{"version":3,"file":"fieldcomponent.js","sources":["../node_modules/@dg/corecomponent/Decorator/types.js","../node_modules/@dg/corecomponent/Decorator/BeanFactoryDecorator.js","../node_modules/@dg/corecomponent/Constants/BeanName.js","../node_modules/@dg/corecomponent/utils/Generic.js","../node_modules/@dg/corecomponent/Context.js","../node_modules/@dg/corecomponent/Events/EventHandler.js","../node_modules/@dg/corecomponent/Events/EventEmitter.js","../node_modules/@dg/corecomponent/Component/ComponentRegistry.js","../node_modules/@dg/corecomponent/Component/UserComponentRegistry.js","../node_modules/@dg/corecomponent/FrameWork/ComponentMetaDataProvider.js","../node_modules/@dg/corecomponent/FrameWork/VanillaFrameWorkOverrides.js","../node_modules/@dg/corecomponent/utils/aria.js","../node_modules/@dg/corecomponent/utils/dom.js","../node_modules/@dg/corecomponent/Decorator/ReferenceSelector.js","../node_modules/tslib/tslib.es6.js","../src/calendar/src/constant/bean-name-constant.ts","../src/calendar/src/core/model/calendar-options-handler.ts","../src/button/src/constants/bean-name-constants.ts","../node_modules/@dg/utils/BEM/bem.js","../node_modules/@dg/utils/composedClasses/composeClasses.js","../node_modules/@dg/utils/generateUtilityClass/generateUtilityClass.js","../node_modules/@dg/utils/KeyEvents/key-events-constants.js","../node_modules/@dg/utils/KeyEvents/key-events.js","../node_modules/@dg/utils/debounce/debounce.js","../node_modules/@dg/corecomponent/Component/Component.js","../src/button/src/model/button-handler.ts","../src/button/src/modules/CSSRegistry.ts","../src/button/src/core/button-classes.ts","../src/button/src/core/button-controller.ts","../src/utility/create-svg-template.ts","../src/button/src/core/button-view.ts","../src/button/src/model/button-option-handler.ts","../node_modules/@dg/corecomponent/Component/UserComponentHandler.js","../src/button/src/model/button-user-component-handler.ts","../src/button/src/model/button-api.ts","../src/button/src/ButtonCoreComponent.ts","../src/button/src/button.ts","../src/calendar/src/core/user-component/buttonRenderer.ts","../src/calendar/src/core/calendar-button/calendar-button-controller.ts","../src/calendar/src/core/calendar-button/calendar-button-view.ts","../src/calendar/src/core/model/calendar-user-component-handler.ts","../src/utility/abstract-controller.ts","../src/calendar/src/modules/CSSRegistry.ts","../src/calendar/src/core/root/calendar-root-classes.ts","../src/calendar/src/constant/event-name.ts","../src/calendar/src/core/calendar-weeday/calendar-weekday-controller.ts","../src/calendar/src/core/calendar-weeday/calendar-weekday-view.ts","../src/calendar/src/core/calendar-container/calendar-container-controller.ts","../src/calendar/src/core/calendar-container/calendar-container-view.ts","../src/calendar/src/core/calendar-day-container/calendar-day-container-controller.ts","../src/calendar/src/core/calendar-day-container/calendar-day-container-view.ts","../src/calendar/src/core/model/calendar-view-manager.ts","../node_modules/dayjs/dayjs.min.js","../src/calendar/src/core/calendar-nav-bar/calendar-nav-bar-controller.ts","../src/calendar/src/core/model/calendar-data-manager.ts","../src/calendar/src/core/calendar-cell/calendar-cell-controller.ts","../src/calendar/src/core/calendar-cell/calendar-cell-view.ts","../src/calendar/src/core/model/calendar-api.ts","../src/calendar/src/core/model/calendar-controller.ts","../src/calendar/src/core/calendar-nav-bar/calendar-nav-bar-view.ts","../src/calendar/src/core/time-nav-bar/time-nav-bar-controller.ts","../src/calendar/src/core/time-nav-bar/time-nav-bar-view.ts","../src/dropdown/src/core/model/dropdown-handler.ts","../src/dropdown/src/modules/CSSRegistry.ts","../src/dropdown/src/core/dropdown-root/dropdown-root-classes.ts","../src/dropdown/src/core/dropdown-container/dropdownContainer-controller.ts","../src/dropdown/src/core/dropdown-container/dropdownContainer-view.ts","../src/dropdown/src/constants/beanname-constant.ts","../src/dropdown/src/core/model/dropdown-api.ts","../src/dropdown/src/core/model/dropdown-ds.ts","../src/dropdown/src/core/model/dropdown-user-component-handler.ts","../src/dropdown/src/component/DefaultLabelRenderer.ts","../src/dropdown/src/component/DefaultChipRenderer.ts","../src/dropdown/src/core/dropdown-option/dropdown-option-controller.ts","../src/Checkbox/constants/checkbox-constants.ts","../src/Checkbox/checkbox-configuration.types.ts","../src/Checkbox/core/model/checkbox-options-handler.ts","../src/Checkbox/core/controller/checkbox-root-controller.ts","../src/Checkbox/core/view/checkbox-root-view.ts","../src/Checkbox/core/model/checkbox-api.ts","../src/Checkbox/core/controller/checkbox-controller-handler.ts","../src/utility/abstract-user-component-handler.ts","../src/Checkbox/core/model/checkbox-user-component-handler.ts","../src/Checkbox/core/model/checkbox-state-handler.ts","../src/description/modules/CSSRegistry.ts","../src/description/description-classes.ts","../src/description/description-controller.ts","../src/description/description-view.ts","../src/label/modules/CSSRegistry.ts","../src/label/form-label-classes.ts","../src/label/label-controller.ts","../src/label/label-view.ts","../src/Checkbox/core/model/checkbox-state-manager.ts","../src/error/modules/CSSRegistry.ts","../src/error/error-classes.ts","../src/error/error-controller.ts","../src/error/error-view.ts","../src/Checkbox/checkbox-core-component.ts","../src/Checkbox/checkbox.ts","../src/dropdown/src/core/dropdown-option/dropdown-option-view.ts","../src/dropdown/src/core/model/dropdown-option-handler.ts","../src/dropdown/src/core/dropdown-search/dropdown-search-controller.ts","../src/dropdown/src/core/dropdown-search/dropdown-search-view.ts","../src/dropdown/src/core/dropdown/dropdown-controller.ts","../src/VirtualList/ContainerHeightHandler.ts","../src/VirtualList/utils/browser.ts","../src/VirtualList/utils/object.ts","../src/VirtualList/AbstractVirtualList.ts","../src/dropdown/src/core/dropdown/dropdown-list.ts","../src/VirtualList/ElementVirtualList.ts","../src/dropdown/src/core/dropdown/dropdown-view.ts","../src/dropdown/src/core/dropdown-selectAll/dropdown-selectAll-controller.ts","../src/dropdown/src/core/dropdown-selectAll/dropdown-selectAll-view.ts","../src/dropdown/src/core/dropdown-create-newoption/dropdown-create-newoption-controller.ts","../src/dropdown/src/core/dropdown-create-newoption/dropdown-create-newoption-view.ts","../src/dropdown/src/core/dropdown-body-container/dropdownBodyContainer-controller.ts","../src/dropdown/src/core/dropdown-body-container/dropdownBodyContainer-view.ts","../src/dropdown/src/core/dropdown-Header-container/dropdownHeaderContainer-controller.ts","../src/dropdown/src/core/dropdown-Header-container/dropdownHeaderContainer-view.ts","../src/dropdown/src/core/dropdown-Footer-container/dropdownFooterContainer-controller.ts","../src/dropdown/src/core/dropdown-Footer-container/dropdownFooterContainer-view.ts","../src/dropdown/src/core/dropdown-no-option/dropdown-no-option-controller.ts","../src/dropdown/src/core/dropdown-no-option/dropdown-no-option-view.ts","../src/dropdown/src/core/dropdown-loading/dropdown-loading-controller.ts","../src/dropdown/src/core/dropdown-loading/dropdown-loading-view.ts","../src/List/src/renderer/loading-option-renderer.ts","../src/dropdown/dropdown-core.ts","../src/dropdown/src/core/dropdown-root/dropdown-root-controller.ts","../src/dropdown/src/core/dropdown-root/dropdown-root-view.ts","../src/dropdown/dropdown.ts","../src/utility/PopupHandler/CorePopupHandler.ts","../src/calendar/src/core/time-dropdown-hanlder/time-dropdown-handler.ts","../src/calendar/src/core/model/popup-handler.ts","../src/calendar/src/calendar-core-components.ts","../src/calendar/src/core/root/calendar-root-contoller.ts","../src/calendar/src/core/root/calendar-root-view.ts","../src/calendar/src/calendar.ts","../src/chip/src/constants/chip-constants.ts","../src/chip/src/modules/CSSRegistry.ts","../src/chip/src/core/chip-root/chip-root-classes.ts","../src/chip/src/core/chip-root/chip-root-controller.ts","../src/chip/src/core/chip-root/chip-root-view.ts","../src/chip/src/core/model/chip-user-component-handler.ts","../src/chip/src/core/model/chip-api.ts","../src/chip/src/core/model/chip-options-handler.ts","../src/chip/src/core/chip-thumbnail/chip-thumbnail-controller.ts","../src/chip/src/core/chip-thumbnail/chip-thumbnail-view.ts","../src/chip/src/core/chip-remove/chip-remove-controller.ts","../src/chip/src/core/chip-remove/chip-remove-view.ts","../src/chip/src/core/model/chip-state-handler.ts","../src/chip/src/core/user-component/chip-icon-renderer.ts","../src/chip/src/core/model/chip-controller-handler.ts","../src/Tooltip/node_modules/@dg/corecomponent/utils/aria.js","../src/Tooltip/node_modules/@dg/corecomponent/utils/dom.js","../src/Tooltip/node_modules/@dg/corecomponent/utils/Generic.js","../src/Tooltip/node_modules/@dg/corecomponent/Constants/BeanName.js","../src/Tooltip/node_modules/@dg/corecomponent/Decorator/types.js","../src/Tooltip/node_modules/@dg/corecomponent/Decorator/BeanFactoryDecorator.js","../src/Tooltip/node_modules/@dg/corecomponent/Decorator/ReferenceSelector.js","../src/Tooltip/node_modules/@dg/corecomponent/Events/EventHandler.js","../src/Tooltip/node_modules/@dg/corecomponent/Events/EventEmitter.js","../src/Tooltip/node_modules/@dg/corecomponent/FrameWork/ComponentMetaDataProvider.js","../src/Tooltip/node_modules/@dg/corecomponent/Component/UserComponentRegistry.js","../src/Tooltip/node_modules/@dg/corecomponent/FrameWork/VanillaFrameWorkOverrides.js","../src/Tooltip/node_modules/@dg/corecomponent/Component/ComponentRegistry.js","../src/Tooltip/node_modules/@dg/corecomponent/Context.js","../src/Tooltip/src/Constants/DefaultTooltipValues.ts","../src/Tooltip/src/Constants/TooltipBeanName.ts","../src/Tooltip/src/Constants/TooltipEvents.ts","../src/Tooltip/src/CustomTooltip.ts","../src/Tooltip/src/TooltipHandler.ts","../src/Tooltip/src/TooltipOptionsHandler.ts","../src/Tooltip/node_modules/@dg/corecomponent/Component/UserComponentHandler.js","../src/Tooltip/src/Components/TooltipUserComponentHandler.ts","../src/Tooltip/src/TooltipAPI.ts","../src/Tooltip/src/PopupHandler/CorePopupHandler.ts","../src/Tooltip/src/TooltipPopHandler.ts","../src/Tooltip/node_modules/@dg/corecomponent/Component/Component.js","../src/Tooltip/src/Components/TooltipRenderer.ts","../src/Tooltip/src/ControllerHandler.ts","../src/Tooltip/src/Tooltip.ts","../src/chip/src/core/model/chip-tooltip-handler.ts","../src/chip/chip-core-component.ts","../src/chip/chip.ts","../src/link/constants/link-constants.ts","../src/link/link-configuration.types.ts","../src/link/core/model/link-options-handler.ts","../src/link/core/model/PhoneFormatter.ts","../src/Multiline/src/modules/CSSRegistry.ts","../src/Multiline/src/core/utility.ts","../src/Multiline/src/core/multiline-root/multiline-root-classes.ts","../src/Multiline/src/constants/beanname-constants.ts","../src/Multiline/src/core/model/multiline-controller.ts","../src/Multiline/src/core/multiline-root/multiline-root-controller.ts","../src/Multiline/src/core/multiline-root/multiline-root-view.ts","../src/Multiline/src/multiline-configuration.types.ts","../src/Multiline/src/core/model/multiline-option-handler.ts","../src/Multiline/src/core/model/multiline-state-manager.ts","../src/Multiline/src/core/multiline-textArea/multiline-textArea-controller.ts","../src/Multiline/src/core/multiline-textArea/multiline-textArea-view.ts","../src/Multiline/src/core/model/multiline-user-component-handler.ts","../src/Multiline/src/core/model/multiline-api.ts","../src/Multiline/src/core/render-multiline-textArea/render-multiline-textArea-controller.ts","../src/Multiline/src/core/render-multiline-textArea/render-multiline-textArea-view.ts","../src/Multiline/src/multi-core-component.ts","../src/Multiline/src/core/render-multiline-root/render-multiline-root-controller.ts","../src/Multiline/src/core/render-multiline-root/render-multiline-root-view.ts","../src/Multiline/src/multiline.ts","../src/link/core/controller/link-root-controller.ts","../src/link/core/link-root-classes.ts","../src/link/core/view/link-root-view.ts","../src/link/core/model/link-api.ts","../src/link/core/controller/link-controller-handler.ts","../src/link/core/model/link-user-component-handler.ts","../src/link/core/model/link-state-handler.ts","../src/link/core/model/link-state-manager.ts","../src/link/link-core-component.ts","../src/number-input/src/formatter/NumberFormatter.ts","../src/number-input/src/core/modules/DecimalModule.ts","../src/number-input/src/formatter/CurrencyFormatter.ts","../src/number-input/src/core/modules/CurrencyModule.ts","../src/number-input/src/formatter/PercentageFormatter.ts","../src/number-input/src/core/modules/PercentageModule.ts","../src/number-input/src/constants/beanname-constants.ts","../src/number-input/src/core/model/number-controller.ts","../src/number-input/src/core/model/number-api.ts","../src/number-input/src/core/model/number-option-handler.ts","../src/number-input/src/core/model/number-user-component-handler.ts","../src/number-input/src/constants/event-name.ts","../src/number-input/src/core/model/number-event-handler.ts","../src/number-input/src/core/model/number-adjuster-model.ts","../node_modules/@dg/utils/clamp/clamp.js","../src/number-input/src/core/model/number-adjuster.ts","../src/number-input/src/modules/ModuleRegistry.ts","../src/token/src/utilities/Constants/KeyEventConstants.ts","../src/token/src/utilities/KeyEventHandler.ts","../src/token/src/utilities/Utility.ts","../src/number-input/src/core/model/number-keyboard-shortcuts.ts","../src/number-input/src/core/model/number-state-manager.ts","../src/number-input/src/modules/CSSRegistry.ts","../src/number-input/src/core/number-utils/number-classnames-slots.ts","../src/number-input/src/core/number-button/number-button-controller.ts","../src/number-input/src/core/number-button/number-button-view.ts","../src/number-input/src/core/user-component/buttonRenderer.ts","../src/number-input/src/core/spin-button/spin-button-controller.ts","../src/number-input/src/core/spin-button/spin-button-view.ts","../src/number-input/src/core/number-input/number-input-controller.ts","../src/number-input/src/core/number-input/number-input-view.ts","../src/Suffix/modules/CSSRegistry.ts","../src/Suffix/suffix-classes.ts","../src/Suffix/suffix-controller.ts","../src/Suffix/suffix-view.ts","../src/Prefix/modules/CSSRegistry.ts","../src/Prefix/prefix-classes.ts","../src/Prefix/prefix-controller.ts","../src/Prefix/prefix-view.ts","../src/number-input/src/core/rendering-number-input/rendering-number-input-controller.ts","../src/number-input/src/core/rendering-number-input/rendering-number-input-view.ts","../src/addOnBefore/modules/CSSRegistry.ts","../src/addOnBefore/start-adornment-classes.ts","../src/addOnBefore/start-adornment-controller.ts","../src/addOnBefore/start-adornment-view.ts","../src/addOnAfter/modules/CSSRegistry.ts","../src/addOnAfter/end-adornment-classes.ts","../src/addOnAfter/end-adornment-controller.ts","../src/addOnAfter/end-adornment-view.ts","../src/number-input/src/core/model/number-tooltip-handler.ts","../src/number-input/src/number-core-component.ts","../src/number-input/src/core/number-root/number-root-controller.ts","../src/number-input/src/core/number-root/number-root-view.ts","../src/number-input/src/core/number-utils/number-template.ts","../src/number-input/src/core/rendering-number-root/rendering-number-root-controller.ts","../src/number-input/src/core/rendering-number-root/rendering-number-root-view.ts","../src/number-input/src/number.ts","../src/pagination/src/constants/beaname-constants.ts","../src/pagination/src/core/utiility.ts","../src/pagination/src/core/model/pagination-option-handler.ts","../src/pagination/src/core/model/pagination-state-manager.ts","../src/pagination/src/core/model/pagination-controller.ts","../src/pagination/src/core/model/pagination-api.ts","../src/pagination/src/core/model/pagination-user-component.ts","../src/pagination/src/core/pagination-root/pagination-root-classes.ts","../src/pagination/src/core/pagination-button/pagination-button-controller.ts","../src/pagination/src/core/pagination-button/pagination-button-view.ts","../src/pagination/src/DataHandler/PaginationDataHandler.ts","../src/pagination/src/core/pageSet/pageset-controller.ts","../src/pagination/src/core/pageSet/pageset-view.ts","../src/pagination/src/core/showTotal/show-total-controller.ts","../src/pagination/src/core/showTotal/show-total-changer-view.ts","../src/select/src/constants/beanname-constant.ts","../src/select/src/core/model/select-option-handler.ts","../src/select/src/core/model/popup-handler.ts","../src/select/src/modules/CSSRegistry.ts","../src/select/src/core/select-root/select-root-classes.ts","../src/select/src/core/select-input/select-input-controller.ts","../src/select/src/core/plus-icon/plus-icon-controller.ts","../src/select/src/core/plus-icon/plus-icon-view.ts","../src/select/src/core/ellipses/ellipses-controller.ts","../src/select/src/core/ellipses/ellipses-view.ts","../src/select/src/core/select-input/select-input-view.ts","../src/select/src/core/model/select-ds.ts","../src/select/src/core/model/select-input-handler.ts","../src/select/src/core/model/select-api.ts","../src/selectInteractor/selectDropdownInteractor.ts","../src/select/src/core/select-input-wrapper/select-input-wrapper-controller.ts","../src/select/src/core/select-input-wrapper/select-input-wrapper-view.ts","../src/select/src/core/model/select-configApi.ts","../src/select/src/core/model/select-state-manager.ts","../src/select/src/core/model/select-user-component-handler.ts","../src/select/src/core/select-container/select-container-controller.ts","../src/select/src/core/select-container/select-container-view.ts","../src/select/src/core/selectbox-icon/selectbox-icon-controller.ts","../src/select/src/core/selectbox-icon/selectbox-icon-view.ts","../src/select/select-core-component.ts","../src/select/src/core/select-root/select-root-controller.ts","../src/select/src/core/select-root/select-root-view.ts","../src/select/select.ts","../src/pagination/src/core/sizeChanger/size-changer-controller.ts","../src/pagination/src/core/sizeChanger/size-changer-view.ts","../src/pagination/src/core/quickJumper/quick-jumper-controller.ts","../src/pagination/src/core/quickJumper/quick-jumper-changer-view.ts","../src/pagination/src/core/sub-elements/sub-element-controller.ts","../src/pagination/src/core/sub-elements/sub-element-view.ts","../src/pagination/src/core/userHandler/ButtonRenderer.ts","../src/pagination/src/pagination-core-component.ts","../src/pagination/src/core/pagination-root/pagination-root-controller.ts","../src/pagination/src/core/pagination-root/pagination-root-view.ts","../src/rating-component/src/constants/beanname-constants.ts","../src/rating-component/src/core/model/rating-controller.ts","../src/rating-component/src/core/model/rating-api.ts","../src/rating-component/src/modules/ModuleRegistry.ts","../src/rating-component/src/core/model/rating-option-handler.ts","../src/rating-component/src/modules/CSSRegistry.ts","../src/rating-component/src/core/rating-utils/rating-classes.ts","../src/rating-component/src/core/rating-container/rating-container-contoller.ts","../src/rating-component/src/core/rating-container/rating-container-view.ts","../src/rating-component/src/constants/event-name.ts","../src/rating-component/src/core/rating-input-wrapper/rating-input-wrapper-controller.ts","../src/rating-component/src/core/rating-input-wrapper/rating-input-wrapper-view.ts","../src/rating-component/src/core/rating-input/rating-input-controller.ts","../src/rating-component/src/core/rating-input/rating-input-view.ts","../src/rating-component/src/core/rating-svg/rating-svg-controller.ts","../src/rating-component/src/core/rating-svg/rating-svg-view.ts","../src/rating-component/src/core/model/rating-user-component-handler.ts","../src/rating-component/src/core/model/rating-model.ts","../src/rating-component/src/core/model/rating-event-handler.ts","../src/rating-component/src/core/model/rating-state-manager.ts","../src/rating-component/src/rating-core-component.ts","../src/rating-component/src/core/rating-utils/keyboard-event-util.ts","../src/rating-component/src/core/rating-root/rating-root-controller.ts","../src/rating-component/src/core/rating-root/rating-root-view.ts","../src/Text/src/modules/CSSRegistry.ts","../src/Text/src/core/utility.ts","../src/Text/src/core/text-root/text-root-classes.ts","../src/Text/src/constants/beanname-constants.ts","../src/Text/src/core/model/text-controller.ts","../src/Text/src/core/customformatter.ts","../src/Text/src/core/text-root/text-root-controller.ts","../src/Text/src/core/text-root/text-root-view.ts","../src/Text/src/text-configuration.types.ts","../src/Text/src/core/model/text-option-handler.ts","../src/Text/src/core/model/text-state-manager.ts","../src/Text/src/core/model/text-user-component-handler.ts","../src/Text/src/core/text-input/text-input-controller.ts","../src/Text/src/core/text-input/text-input-view.ts","../src/Text/src/core/model/text-api.ts","../src/Text/src/core/rendering-text-input/rendering-text-input-controller.ts","../src/Text/src/core/rendering-text-input/rendering-text-input-view.ts","../src/Text/src/text-core-component.ts","../src/Text/src/core/rendering-text-root/rendering-text-root-controller.ts","../src/Text/src/core/rendering-text-root/rendering-text-root-view.ts","../src/date-time-field/src/constant/bean-name-constant.ts","../src/date-time-field/src/core/model/date-time-user-component-handler.ts","../node_modules/dayjs/plugin/customParseFormat.js","../node_modules/dayjs/plugin/utc.js","../src/date-time-field/src/constant/event-name.ts","../src/date-time-field/src/core/model/date-time-model.ts","../src/date-time-field/src/core/model/popup-handler.ts","../src/date-time-field/src/core/model/date-picker-interacter.ts","../src/date-time-field/src/core/model/date-time-api.ts","../src/date-time-field/src/modules/CSSRegistry.ts","../src/date-time-field/src/core/date-time-root/date-time-root-classes.ts","../src/date-time-field/src/core/date-time-spin-button/spin-button-controller.ts","../src/date-time-field/src/core/date-time-spin-button/spin-button-view.ts","../src/date-time-field/src/core/model/date-time-keyboard-shorcuts.ts","../src/date-time-field/src/core/model/date-time-selection-service.ts","../src/date-time-field/src/core/model/date-time-input-constants.ts","../src/date-time-field/src/core/model/placeholder-engine/placeholder-engine.ts","../src/date-time-field/src/core/model/placeholder-engine/adapters/format-provider-adapter.ts","../src/date-time-field/src/core/model/placeholder-engine-integration.ts","../src/date-time-field/src/core/model/date-time-input-handler.ts","../src/date-time-field/src/core/calendar-icon/calendar-icon-controller.ts","../src/date-time-field/src/core/date-time-input/date-time-input-controller.ts","../src/date-time-field/src/core/date-time-input/date-time-input-view.ts","../src/date-time-field/src/core/model/date-time-options-handler.ts","../src/date-time-field/src/core/model/date-time-state-manager.ts","../src/date-time-field/src/core/model/date-time-controller.ts","../src/date-time-field/src/core/date-time-button/date-time-button-controller.ts","../src/date-time-field/src/core/date-time-button/date-time-button-view.ts","../src/date-time-field/src/core/user-component/buttonRenderer.ts","../src/date-time-field/src/core/model/date-time-event-handler.ts","../src/date-time-field/src/core/calendar-icon/calendar-icon-view.ts","../src/date-time-field/src/core/model/date-picker-state-manager.ts","../src/date-time-field/src/core/date-time-readonly-input/date-time-readony-input-controller.ts","../src/date-time-field/src/core/date-time-readonly-input/date-time-readonly-input-view.ts","../src/date-time-field/src/core/calendar-icon-readonly/calendar-icon-controller.ts","../src/date-time-field/src/core/calendar-icon-readonly/calendar-icon-view.ts","../src/date-time-field/src/date-time-core-component.ts","../src/date-time-field/src/core/date-time-root/date-time-root-controller.ts","../src/date-time-field/src/core/date-time-root/date-time-root-view.ts","../src/date-time-field/src/core/date-time-readonly-root/date-time-readonly-root-classes.ts","../src/date-time-field/src/core/date-time-readonly-root/date-time-readonly-root-controller.ts","../src/date-time-field/src/core/date-time-readonly-root/date-time-readonly-root-view.ts","../src/token/src/constants/beanname-constant.ts","../src/token/src/constants/data-mapping.ts","../src/token/src/model/token-option-handler.ts","../src/token/src/constants/event.ts","../src/token/src/model/token-api.ts","../src/token/src/model/token-renderer-handler.ts","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v1.js","../node_modules/uuid/dist/esm-browser/validate.js","../src/token/src/model/token-option.ts","../src/token/src/model/generic-data-store.ts","../src/token/src/model/token-data-store.ts","../src/token/src/model/token-navigation.ts","../src/token/src/model/token-user-component-handler.ts","../src/token/src/Modules/CSSRegistry.ts","../src/token/src/model/classname-generator.ts","../src/token/src/renderer/token-renderer.ts","../src/token/src/Modules/ModuleRegistry.ts","../src/token/src/model/token-edit-handler.ts","../src/token/src/renderer/token-editor.ts","../src/token/src/model/key-board-shortcut-registry.ts","../src/token/src/model/action-registry.ts","../src/token/src/utilities/dom.ts","../src/token/src/core/token-item/token-item-controller.ts","../src/token/src/model/token-key-board-navigation.ts","../src/token/src/model/token-key-shortcut.ts","../src/token/src/model/token-value-handler.ts","../src/token/src/constants/component.ts","../src/token/src/core/token-inner/token-container-event-handler.ts","../src/token/src/core/token-inner/token-inner-controller.ts","../src/token/src/core/token-item/token-item-view.ts","../src/token/src/core/token-inner/token-inner-view.ts","../src/token/src/model/token-controller.ts","../src/token/src/model/token-tooltip-handler.ts","../src/token/src/constants/HookEventNames.ts","../src/token/src/model/hook-manager.ts","../src/token/src/core/dropdown/PositionHandler.ts","../src/token/src/core/dropdown/DropdownModel.ts","../src/core/VersionValidation.ts","../src/List/src/Modules/ModuleRegistry.ts","../src/List/src/Component/Model/list-user-component-handler.ts","../src/List/src/Component/Model/list-option-handler.ts","../src/List/src/Component/Core/HeaderFooterCore-view.ts","../src/List/src/Component/Core/HeaderFooterCore-controller.ts","../src/List/src/Constants/ListBeanName.ts","../src/List/src/Component/Header/header-controller.ts","../src/List/src/Component/Header/header-view.ts","../src/List/src/Component/Footer/footer-controller.ts","../src/List/src/Component/Footer/footer-view.ts","../src/List/src/Modules/CSSRegistry.ts","../src/List/src/Component/Model/classname-generator.ts","../src/List/src/Component/Tab/TabOption/tab-option-controller.ts","../src/List/src/Component/Tab/tab-container-controller.ts","../src/List/src/Component/Tab/TabOption/tab-option-view.ts","../src/List/src/Component/Tab/tab-container-view.ts","../src/List/src/Component/Tab/TabPanelDataPart.ts","../src/List/src/Component/Body/List-Option/list-option-controller.ts","../src/List/src/utility/HighlightKeyword.ts","../src/List/src/Component/Model/generic-data-store.ts","../src/List/src/Component/Body/list-body-container-controller.ts","../src/List/src/Component/Body/List-Option/list-option-view.ts","../src/List/src/Component/Body/list-body-container-view.ts","../src/List/src/renderer/option-renderer.ts","../src/List/src/Constants/HookEventNames.ts","../src/List/src/Component/Model/hook-manager.ts","../src/List/src/Component/Model/list-selection.ts","../src/List/src/Component/Model/list-api.ts","../src/List/src/renderer/not-found-renderer.ts","../src/List/src/renderer/image-text-option-renderer.ts","../src/List/src/Component/Model/list-tooltip-handler.ts","../src/List/src/Component/Model/list-option-node.ts","../src/List/src/Component/Model/List-server-data-store.ts","../src/List/src/Component/Model/list-cache-block.ts","../src/List/src/Component/Model/list-data-store.ts","../src/List/List-core.ts","../src/List/src/Component/Container/list-container-controller.ts","../src/List/src/Component/Container/list-container-view.ts","../src/List/List.ts","../src/token/src/core/dropdown/DropdownInteracter.ts","../src/token/src/core/dropdown/Dropdown.ts","../src/token/src/renderer/token-image-renderer.ts","../src/token/token-core-component.ts","../src/token/src/core/token-root/token-root-controller.ts","../src/token/src/core/token-root/token-root-view.ts","../src/token/src/core/token-input/token-input-controller.ts","../src/token/src/core/token-input/token-input-view.ts","../src/token/src/Modules/token-module.ts","../src/radio/constants/beanname-constants.ts","../src/radio/modules/CSSRegistry.ts","../src/radio/core/radio-root/radio-root-classes.ts","../src/radio/core/radio-input-wrapper/radio-input-wrapper-controller.ts","../src/radio/core/model/generic-data-store.ts","../src/radio/core/model/render-controller.ts","../src/radio/core/radio-root/radio-root-controller.ts","../src/radio/core/radio-root/radio-root-view.ts","../src/radio/core/model/radio-state-manager.ts","../src/radio/core/model/radio-user-component-handler.ts","../src/radio/core/model/radio-api.ts","../src/radio/core/model/radio-option-handler.ts","../src/radio/core/model/radio-controller-handler.ts","../src/radio/core/model/radio-option.ts","../src/radio/core/model/radio-ds.ts","../src/radio/core/radio-container/radio-container-controller.ts","../src/radio/core/radio-input-wrapper/radio-input-wrapper-view.ts","../src/radio/core/radio-container/radio-container-view.ts","../src/radio/core/radio-custom-input/radio-custom-input-controller.ts","../src/radio/core/radio-custom-input/rradio-custom-input-view.ts","../src/radio/radio-core-component.ts","../src/Dialog/src/Constants/DialogBeanName.ts","../src/Dialog/src/Components/DialogRenderer.ts","../src/Dialog/src/Components/DialogUserComponentHandler.ts","../src/Dialog/src/ControllerHandler.ts","../src/Dialog/src/Constants/DialogEvents.ts","../src/Dialog/src/Constants/DefaultDialogValues.ts","../src/Dialog/src/DialogOptionsHandler.ts","../src/Dialog/src/CustomDialogHandler.ts","../src/Dialog/src/DialogHandler.ts","../src/Dialog/src/DialogAPI.ts","../src/Dialog/src/DialogPopHandler.ts","../src/Dialog/src/Dialog.ts","../src/date-range-picker/src/constant/bean-name-constant.ts","../src/date-range-field/src/constant/bean-name-constant.ts","../src/date-range-picker/src/constant/event-name.ts","../src/date-range-picker/src/core/date-range-picker-root/date-range-picker-root-controller.ts","../src/date-range-picker/src/core/date-range-picker-root/date-range-picker-root-view.ts","../src/date-range-picker/src/core/templates/date-range-picker-root-template.ts","../src/date-range-picker/src/core/model/date-range-picker-user-component-handler.ts","../src/date-range-picker/src/core/model/date-range-picker-api.ts","../src/date-range-picker/src/core/date-range-picker-header/date-range-picker-header-controller.ts","../src/date-range-picker/src/core/date-range-picker-header/date-range-picker-header-view.ts","../src/date-range-picker/src/core/templates/date-range-picker-header-template.ts","../src/date-range-picker/src/core/date-range-picker-from-picker/date-range-picker-from-picker-controller.ts","../src/date-range-picker/src/core/date-range-picker-from-picker/date-range-picker-from-picker-view.ts","../src/date-range-picker/src/core/templates/date-range-picker-from-template.ts","../src/date-range-picker/src/core/date-range-picker-to-picker/date-range-picker-to-picker-controller.ts","../src/date-range-picker/src/core/date-range-picker-to-picker/date-range-picker-to-picker-view.ts","../src/date-range-picker/src/core/templates/date-range-picker-to-template.ts","../src/date-range-picker/src/core/model/date-range-picker-data-manager.ts","../src/date-range-picker/src/core/model/date-range-picker-option-handler.ts","../src/date-range-picker/src/core/model/date-range-picker-controller.ts","../src/date-range-picker/src/core/date-range-picker-buttons/date-range-picker-button-controller.ts","../src/date-range-picker/src/core/date-range-picker-buttons/date-range-picker-button-view.ts.ts","../src/date-range-picker/src/core/templates/date-range-picker-button-template.ts","../src/date-range-picker/src/core/date-range-picker-footer/date-range-picker-footer-controller.ts","../src/date-range-picker/src/core/date-range-picker-footer/date-range-picker-footer-view.ts","../src/date-range-picker/src/core/templates/date-range-picker-footer-new-template.ts","../src/date-range-picker/src/core/user-component/button-renderer.ts","../src/date-range-picker/src/date-range-picker-core-component.ts","../src/date-range-picker/src/date-range-picker.ts","../src/date-range-field/src/core/model/date-range-field-option-handler.ts","../src/date-range-field/src/constant/event-name.ts","../src/date-range-field/src/core/date-range-field-input/date-range-field-input-controller.ts","../src/date-range-field/src/core/date-range-field-input/date-range-field-input-view.ts","../src/date-range-field/src/core/template/date-range-field-input-template.ts","../src/date-range-field/src/core/model/date-range-field-controller.ts","../src/date-range-field/src/core/model/popup-handler.ts","../src/date-range-field/src/core/model/date-range-picker-interactor.ts","../src/date-range-field/src/core/utils/date-utils.ts","../src/date-range-field/src/core/model/date-range-field-data-manager.ts","../src/date-range-field/src/core/model/date-range-field-user-component-handler.ts","../src/date-range-field/src/core/model/date-range-field-api.ts","../src/date-range-field/src/date-range-core-component.ts","../src/date-range-field/src/core/modules/CSSRegistry.ts","../src/date-range-field/src/core/date-range-field-root/date-range-field-root-classes.ts","../src/date-range-field/src/core/date-range-field-root/date-range-field-root-controller.ts","../src/date-range-field/src/core/date-range-field-root/date-range-field-root-view.ts","../src/date-range-field/src/core/template/date-range-field-root-template.ts","../src/upload/src/constants/upload-bean-constants.ts","../src/upload/src/core/upload-file-input-id.ts","../src/upload/src/core/upload-renderer/upload-renderer.ts","../src/upload/src/core/model/upload-api.ts","../src/upload/src/core/upload-root/upload-root-controller.ts","../src/upload/src/core/upload-root/upload-root-view.ts","../src/upload/src/core/upload-root/upload-root-template.ts","../src/upload/src/core/model/upload-user-component-handler.ts","../src/upload/src/core/upload-field/upload-field-view.ts","../src/upload/src/core/model/upload-option-handler.ts","../src/upload/src/upload-core-component.ts","../src/all-components.ts","../src/link/link.ts","../src/date-time-field/src/date-time.ts","../src/pagination/src/pagination.ts","../src/rating-component/src/rating.ts","../src/Text/src/text.ts","../src/token/token.ts","../src/radio/radio.ts","../src/date-range-field/src/date-range.ts","../src/date-range-picker/src/dg-date-range-picker.ts","../src/upload/src/upload.ts"],"sourcesContent":["var C,O;!function(C){C[C.CONSTRUCTOR=0]=\"CONSTRUCTOR\",C[C.AUTOWIRE=1]=\"AUTOWIRE\"}(C||(C={})),function(C){C[C.Class=0]=\"Class\",C[C.Method=1]=\"Method\"}(O||(O={}));export{O as AttributeAnnotationTargetType,C as BeanDependencyType};\n//# sourceMappingURL=types.js.map\n","import{BeanDependencyType as t,AttributeAnnotationTargetType as e}from\"./types.js\";const r=\"BeanDefinition\";function n(t,e){let n;if(n=\"class\"===e||\"function\"==typeof t?t:\"prototype\"===e?t.constructor:Object.getPrototypeOf(t),n.hasOwnProperty(r))return n[r];const o={uniqueId:Symbol(),className:\"\",beanName:\"\",componentTypes:[],dependencies:[],constructor:null,existInstance:null,preConstruct:[],postConstruct:[],preDestroy:[],attributeAnnotations:[]};return Object.defineProperty(n,r,{value:o,writable:!1}),o}function o(t){return(t,e,r)=>{const o=n(t,\"prototype\");if(\"function\"!=typeof r.value)throw Error(\"@PreDestroy is can use only to method\");return o.preDestroy||(o.preDestroy=[]),o.preDestroy.push(e),r}}function s(t){return(t,e,r)=>{var o;const s=n(t,\"prototype\");if(\"function\"!=typeof r.value)throw Error(\"@PostConstructor is can use only to method\");return s.postConstruct&&(s.postConstruct=[]),null===(o=s.postConstruct)||void 0===o||o.push(e),r}}function a(t){return(t,e,r)=>{var o;const s=n(t,\"prototype\");if(\"function\"!=typeof r.value)throw Error(\"@PreConstructor is can use only to method\");return s.preConstruct&&(s.preConstruct=[]),null===(o=s.preConstruct)||void 0===o||o.push(e),r}}function u(e,r,o){return(s,a)=>{const u=n(s,\"prototype\"),p=o&&o.lazy||!1;if(o&&o.name)u.dependencies.push({type:t.AUTOWIRE,autowireField:a,autowireLazy:p,beanName:o.name,className:e,optional:r});else{if(\"string\"!=typeof a)throw Error(\"property name must be string without beanName\");u.dependencies.push({type:t.AUTOWIRE,autowireField:a,autowireLazy:p,beanName:e,className:e,optional:r})}}}function p(t){return r={componentType:\"bean\",beanName:t},t=>{const o=r.beanName||t.name,s=n(t,\"class\");return s.className=t.name,s.beanName=o,s.constructor=t,s.componentTypes.push(r.componentType),s.attributeAnnotations.push({targetType:e.Class,targetDescriptor:null}),t};var r}function i(t,e){return u(t,!1,e)}function c(t,e){return u(t,!0,e)}function y(t){return r={name:t},(t,o,s)=>{const a=function(t,r){let n=t.attributeAnnotations.find((t=>t.targetType===e.Method&&t.targetPropertyKey===r));return n||(n={targetType:e.Method,targetPropertyKey:r,targetDescriptor:void 0,parameters:void 0},t.attributeAnnotations.push(n)),n}(n(t,\"prototype\"),o);a.parameters||(a.parameters=[]),a.parameters[s]={index:s,name:r.name}};var r}export{i as AutoWired,p as Bean,r as BeanDefinitionSymbol,c as Optional,s as PostConstruct,a as PreConstruct,o as PreDestroy,y as Qualifier,u as WireFunction};\n//# sourceMappingURL=BeanFactoryDecorator.js.map\n","const e={CONTEXT:\"context\",COMPONENT_REGISTRY:\"componentRegistry\",EVENT_HANDLER:\"eventHandler\",USER_COMPONENT_HANDLER:\"userComponentHandler\",POPUP_HANDLER:\"popupHandler\",OPTION_HANDLER:\"optionHandler\",USER_COMPONENT_REGISTRY:\"userComponentRegistry\",COMPONENT_META_DATA_PROVIDER:\"componentMetaDataProvider\",COMPONENT_UTILITY:\"componentUtility\",FRAME_WORK_COMPONENT_WRAPPER:\"frameworkComponentWrapper\",FRAME_WORK_OVERRIDES:\"frameWorkOverrides\",BEANS:\"lookupBeanInstances\"};export{e as BEAN_NAME};\n//# sourceMappingURL=BeanName.js.map\n","function n(n){if(n instanceof Set||n instanceof Map){const t=[];return n.forEach((n=>t.push(n))),t}return Object.values(n)}function t(n,t=!1){return null!=n&&(\"\"!==n||t)}function r(n){return null!=n&&\"function\"==typeof n.toString?n.toString():null}function o(n,t){const r=[];for(let o=n;o<=t;o++)r.push(o);return r}function e(n,t){if(null!=n)if(Array.isArray(n))for(let r=0;r<n.length;r++)t(r.toString(),n[r]);else for(const[r,o]of Object.entries(n))t(r,o)}export{o as createArrayOfNumbers,t as exists,r as toStringOrNull,e as traverseObject,n as values};\n//# sourceMappingURL=Generic.js.map\n","import{BeanDefinitionSymbol as e}from\"./Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"./Constants/BeanName.js\";import{traverseObject as n}from\"./utils/Generic.js\";class r{constructor(){this.beanWrappers={},this.destroyed=!1}getBeanInstances(){return Object.values(this.beanWrappers)}getInstanceID(){var e;return this.userConfigurations?null===(e=this.userConfigurations)||void 0===e?void 0:e.instanceID:null}registerBeanClasses(e,t){this.beanClasses=e,this.registerUserContextParams(t),this.createBeans();const n=this.getBeanInstances();this.wireBeans(n)}registerUserContextParams(e){this.userConfigurations=null!=e?e:{}}createBean(e,t){if(!e)throw Error(\"Can't wire to bean since it is null\");return this.wireBeans([e]),e}createBeans(){this.beanClasses.forEach((t=>{const n=t[e];if(n){const e=n.beanName,r=new t;this.beanWrappers[e]=r}}))}wireBeans(e){this.autoWireBeans(e),this.methodWireBeans(e),this.callLifeCycleMethods(e,\"preConstruct\"),this.callLifeCycleMethods(e,\"postConstruct\")}autoWireBeans(e){e.forEach((e=>{this.forEachMetaDataInHierarchyBeanDefinition(e,((n,r)=>{const a=n.dependencies;a&&a.forEach((n=>{if(n.autowireLazy)Object.defineProperty(e,n.autowireField,{get:()=>{let e=this.getBeanInstance(r,n.beanName,n.optional);if(n.beanName===t.BEANS&&(e=this.getBeanInstance.bind(this,r)),!e)throw Error(\"Unknown beanName=\"+n.autowireField);return e},configurable:!1});else{let a;a=n.beanName===t.BEANS?this.getBeanInstance.bind(this,r):this.getBeanInstance(r,n.beanName,n.optional),Object.defineProperty(e,n.autowireField,{value:a,configurable:!!a,writable:!1})}}))}))}))}methodWireBeans(e){e.forEach((e=>{this.forEachMetaDataInHierarchyBeanDefinition(e,((t,n)=>{t.attributeAnnotations.forEach((t=>{if(t.targetPropertyKey&&t.parameters){const r=this.getBeansForParameters(t.parameters,n);console.log(r),e[t.targetPropertyKey].apply(e)}}))}))}))}getBeansForParameters(e,t){const r=[];return e&&n(e,((e,n)=>{if(n){const e=this.getBeanInstance(t,n.name);r[Number(n.index)]=e}})),r}getBeanInstance(e,n,r=!1){if(this.destroyed)return null;if(n===t.CONTEXT)return a=this,{createBean(e){a.createBean(e)},destroyBean(e){a.destroyBean(e)},destroy(){a.destroy()}};var a;if(this.userConfigurations&&this.userConfigurations.hasOwnProperty(n))return this.userConfigurations[n];return this.beanWrappers[n]||(r||console.error(`Component: unable to find bean reference ${n} while initialising ${e}`),null)}callLifeCycleMethods(e,t){e.forEach((e=>this.callLifeCycleMethodsOnBean(e,t)))}callLifeCycleMethodsOnBean(e,t,n){const r={};this.forEachMetaDataInHierarchyBeanDefinition(e,(e=>{const a=e[t];a&&a.forEach((e=>{e!=n&&(r[e]=!0)}))})),Object.keys(r).forEach((t=>e[t]()))}forEachMetaDataInHierarchyBeanDefinition(t,n){let r=Object.getPrototypeOf(t);for(;null!=r;){const t=r.constructor;t.hasOwnProperty(e)&&n(t[e],this.getBeanName(t)),r=Object.getPrototypeOf(r)}}getBeanName(t){if(t[e]&&t[e].beanName)return t[e].beanName;const n=t.toString();return n.substring(9,n.indexOf(\"(\"))}getBean(e){return this.getBeanInstance(\"getBean\",e,!0)}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=this.getBeanInstances();this.destroyBeans(e),this.userConfigurations=null}destroyBean(e){e&&this.destroyBeans([e])}destroyBeans(e){return e?(e.forEach((e=>{this.callLifeCycleMethodsOnBean(e,\"preDestroy\",\"destroy\");const t=e;\"function\"==typeof t.destroy&&t.destroy()})),[]):[]}isDestroyed(){return this.destroyed}}export{r as Context};\n//# sourceMappingURL=Context.js.map\n","import{Bean as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as s}from\"../Constants/BeanName.js\";let t=class{constructor(){this.allSyncListeners=new Map,this.allAsyncListeners=new Map,this.globalSyncListeners=new Set,this.globalAsyncListeners=new Set,this.asyncFunctionsQueue=[],this.scheduled=!1,this.firedEvents={}}setBeans(e,s=null,t=null){if(this.optionHandler=e,s){const t=e.useAsyncEvents();this.addGlobalListener(s,t)}t&&this.addGlobalListener(t,!1)}getListeners(e,s,t){const n=s?this.allAsyncListeners:this.allSyncListeners;let i=n.get(e);return!i&&t&&(i=new Set,n.set(e,i)),i}noRegisteredListenersExist(){return 0===this.allSyncListeners.size&&0===this.allAsyncListeners.size&&0===this.globalSyncListeners.size&&0===this.globalAsyncListeners.size}addEventListener(e,s,t=!1){this.getListeners(e,t,!0).add(s)}removeEventListener(e,s,t=!1){const n=this.getListeners(e,t,!1);n&&(n.delete(s),0===n.size)&&(t?this.allAsyncListeners:this.allSyncListeners).delete(e)}addGlobalListener(e,s=!1){(s?this.globalAsyncListeners:this.globalSyncListeners).add(e)}removeGlobalListener(e,s=!1){(s?this.globalAsyncListeners:this.globalSyncListeners).delete(e)}dispatchEvent(e){let s=e;if(this.optionHandler){const{api:e}=this.optionHandler;s.api=e}this.dispatchToListeners(s,!0),this.dispatchToListeners(s,!1),this.firedEvents[s.type]=!0}dispatchEventOnce(e){this.firedEvents[e.type]||this.dispatchEvent(e)}dispatchToListeners(e,s){const t=e.type,n=new Set(this.getListeners(t,s,!1));n.size>0&&(t=>{t.forEach((t=>{s?this.dispatchAsync((()=>t(e))):t(e)}))})(n),new Set(s?this.globalAsyncListeners:this.globalSyncListeners).forEach((n=>{s?this.dispatchAsync((()=>n(t,e))):n(t,e)}))}dispatchAsync(e){this.asyncFunctionsQueue.push(e),this.scheduled||(window.setTimeout(this.flushAsyncQueue.bind(this),0),this.scheduled=!0)}flushAsyncQueue(){this.scheduled=!1;const e=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[],e.forEach((e=>e()))}};t=function(e,s,t,n){var i,c=arguments.length,l=c<3?s:null===n?n=Object.getOwnPropertyDescriptor(s,t):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)l=Reflect.decorate(e,s,t,n);else for(var r=e.length-1;r>=0;r--)(i=e[r])&&(l=(c<3?i(l):c>3?i(s,t,l):i(s,t))||l);return c>3&&l&&Object.defineProperty(s,t,l),l}([e(s.EVENT_HANDLER)],t);export{t as EventHandler};\n//# sourceMappingURL=EventHandler.js.map\n","import{AutoWired as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"../Constants/BeanName.js\";import{EventHandler as r}from\"./EventHandler.js\";var n=function(e,t,r,n){var s,o=arguments.length,i=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,n);else for(var d=e.length-1;d>=0;d--)(s=e[d])&&(i=(o<3?s(i):o>3?s(t,r,i):s(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};class s{constructor(){this.destroyFunctions=[],this.destroyed=!1}getFrameWorkOverrides(){return this.frameWorkOverrides}createBean(e,t,r){return t?t.createBean(e):this.getContext().createBean(e),r&&r(e),e}destroyBean(e,t){return(t||this.getContext()).destroyBean(e)}destroyBeans(e,t){return e&&e.forEach((e=>this.destroyBean(e,t))),[]}destroy(){this.dispatchEvent({type:s.EVENT_DESTROYED}),this.destroyFunctions.forEach((e=>e())),this.destroyFunctions.length=0,this.destroyed=!0}getContext(){return this.context}addEventListener(e,t){this.eventHandler||(this.eventHandler=new r),this.eventHandler.addEventListener(e,t)}removeEventListener(e,t){this.eventHandler&&this.eventHandler.removeEventListener(e,t)}dispatchEventAsync(e){window.setTimeout((()=>this.dispatchEvent(e)),0)}dispatchEvent(e){this.eventHandler&&this.eventHandler.dispatchEvent(e)}addListener(e,t,r){if(this.destroyed)return;e instanceof HTMLElement?o(e,t,r):e.addEventListener(t,r);const n=()=>(e.removeEventListener(t,r),this.destroyFunctions=this.destroyFunctions.filter((e=>e!==n)),null);return this.destroyFunctions.push(n),n}isAlive(){return!this.destroyed}addDestroyFunc(e){this.isAlive()?this.destroyFunctions.push(e):e()}createManagedBean(e,t){const r=this.createBean(e,t);return this.addDestroyFunc(this.destroyBean.bind(this,e,t)),r}}function o(e,t,r){e&&e.addEventListener(t,r,void 0)}s.EVENT_DESTROYED=\"destroyed\",n([e(t.EVENT_HANDLER)],s.prototype,\"eventHandler\",void 0),n([e(t.OPTION_HANDLER)],s.prototype,\"optionsHandler\",void 0),n([e(t.FRAME_WORK_OVERRIDES)],s.prototype,\"frameWorkOverrides\",void 0),n([e(\"context\")],s.prototype,\"context\",void 0);export{s as EventEmitter,o as addSafePassiveEventListener};\n//# sourceMappingURL=EventEmitter.js.map\n","import{Bean as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";let n=class extends o{constructor(){super(...arguments),this.componentsMappedByName={}}setupComponents(e){e&&e.forEach((e=>this.addComponent(e)))}addComponent({componentName:e,componentClass:t,template:o}){const n=e.toUpperCase();o&&(t.getTemplate=o),this.componentsMappedByName[n]=t}getComponentClass(e){return this.componentsMappedByName[e]}};n=function(e,t,o,n){var r,p=arguments.length,s=p<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,n);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(p<3?r(s):p>3?r(t,o,s):r(t,o))||s);return p>3&&s&&Object.defineProperty(t,o,s),s}([e(t.COMPONENT_REGISTRY)],n);export{n as ComponentsRegistry};\n//# sourceMappingURL=ComponentRegistry.js.map\n","import{Bean as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";let r=class extends o{constructor(){super(...arguments),this.defaultComp={},this.jsComponents={}}registerDefaultComponent(e,t){this.defaultComp[e]||(this.defaultComp[e]=t)}registerJSComponent(e,t){this.jsComponents[e]=t}retrieve(e){const t=(e,t)=>({componentFrameWork:t,component:e}),o=this.getFrameWorkOverrides().frameworkComponent(e,this.userComponent);if(null!=o)return t(o,!0);const r=this.jsComponents[e];if(r)return t(r,this.getFrameWorkOverrides().isFrameworkComponent(r));const n=this.defaultComp[e];return n?t(n,!1):null}};r=function(e,t,o,r){var n,s=arguments.length,i=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,r);else for(var m=e.length-1;m>=0;m--)(n=e[m])&&(i=(s<3?n(i):s>3?n(t,o,i):n(t,o))||i);return s>3&&i&&Object.defineProperty(t,o,i),i}([e(t.USER_COMPONENT_REGISTRY)],r);export{r as UserComponentRegistry};\n//# sourceMappingURL=UserComponentRegistry.js.map\n","import{AutoWired as e,Bean as t}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as r}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";var n=function(e,t,r,o){var n,a=arguments.length,c=a<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(c=(a<3?n(c):a>3?n(t,r,c):n(t,r))||c);return a>3&&c&&Object.defineProperty(t,r,c),c};let a=class extends o{constructor(){super(...arguments),this.componentMetaData={}}retrieve(e){return this.componentMetaData[e]}};n([e(r.BEANS)],a.prototype,\"getBeanInstanceByBeanName\",void 0),a=n([t(r.COMPONENT_META_DATA_PROVIDER)],a);export{a as ComponentMetadataProvider};\n//# sourceMappingURL=ComponentMetaDataProvider.js.map\n","class n{constructor(){this.renderingEngine=\"vanilla\"}frameworkComponent(n,r){return null}isFrameworkComponent(n){return!1}}export{n as VanillaFrameWorkOverrider};\n//# sourceMappingURL=VanillaFrameWorkOverrides.js.map\n","function n(n){return\"aria-\"+n}function t(n,t,e){null==e||\"\"==e?i(n,t):o(n,t,e)}function o(t,o,i){t.setAttribute(n(o),i.toString())}function i(t,o){t.removeAttribute(n(o))}function e(n,t){t?n.setAttribute(\"role\",t):n.removeAttribute(\"role\")}function c(n,o){t(n,\"activedescendant\",o)}function u(n,o){t(n,\"atomic\",o)}function f(n,o){t(n,\"autocomplete\",o)}function l(n,o){t(n,\"braillelabel\",o)}function r(n,o){t(n,\"brailleroledescription\",o)}function a(n,o){t(n,\"busy\",o)}function d(n,o){t(n,\"checked\",o)}function s(n,o){t(n,\"colcount\",o)}function b(n,o){t(n,\"colindex\",o)}function p(n,o){t(n,\"colindextext\",o)}function v(n,o){t(n,\"colspan\",o)}function m(n,o){t(n,\"controls\",o)}function x(n,o){t(n,\"current\",o)}function w(n,o){t(n,\"describedby\",o)}function h(n,o){t(n,\"description\",o)}function y(n,o){t(n,\"details\",o)}function A(n,o){t(n,\"disabled\",o)}function g(n,o){t(n,\"errormessage\",o)}function k(n,o){t(n,\"expanded\",o)}function q(n,o){t(n,\"flowto\",o)}function z(n,o){t(n,\"haspopup\",o)}function S(n,o){t(n,\"hidden\",o)}function j(n,o){t(n,\"invalid\",o)}function B(n,o){t(n,\"keyshortcuts\",o)}function C(n,o){t(n,\"label\",o)}function D(n,o){t(n,\"labelledby\",o)}function E(n,o){t(n,\"level\",o)}function F(n,o){t(n,\"live\",o)}function G(n,o){t(n,\"modal\",o)}function H(n,o){t(n,\"multiline\",o)}function I(n,o){t(n,\"multiselectable\",o)}function J(n,o){t(n,\"orientation\",o)}function K(n,o){t(n,\"placeholder\",o)}function L(n,o){t(n,\"posinset\",o)}function M(n,o){t(n,\"pressed\",o)}function N(n,o){t(n,\"readonly\",o)}function O(n,o){t(n,\"relevant\",o)}function P(n,o){t(n,\"required\",o)}function Q(n,o){t(n,\"roledescription\",o)}function R(n,o){t(n,\"rowcount\",o)}function T(n,o){t(n,\"rowindex\",o)}function U(n,o){t(n,\"rowindextext\",o)}function V(n,o){t(n,\"rowspan\",o)}function W(n,o){t(n,\"selected\",o)}function X(n,o){t(n,\"setsize\",o)}function Y(n,o){t(n,\"sort\",o)}function Z(n,o){t(n,\"valuemax\",o)}function $(n,o){t(n,\"valuemin\",o)}function _(n,o){t(n,\"valuenow\",o)}function nn(n,o){t(n,\"valuetext\",o)}export{o as addAriaAttribute,n as ariaAttributeName,i as removeAriaAttribute,c as setAriaActiveDescendant,u as setAriaAtomic,f as setAriaAutocomplete,l as setAriaBraillelabel,r as setAriaBrailleroledescription,a as setAriaBusy,d as setAriaChecked,s as setAriaColCount,b as setAriaColIndex,p as setAriaColIndexText,v as setAriaColSpan,m as setAriaControls,x as setAriaCurrent,w as setAriaDescribedBy,h as setAriaDescription,y as setAriaDetails,A as setAriaDisabled,g as setAriaErrorMessage,k as setAriaExpanded,q as setAriaFlowTo,z as setAriaHasPopUp,S as setAriaHidden,j as setAriaInvalid,B as setAriaKeyShortCuts,C as setAriaLabel,D as setAriaLabelledBy,E as setAriaLevel,F as setAriaLive,G as setAriaModal,H as setAriaMultiLine,I as setAriaMultiSelectable,J as setAriaOrientation,K as setAriaPlaceHolder,L as setAriaPosInSet,M as setAriaPressed,N as setAriaReadOnly,O as setAriaRelevant,P as setAriaRequired,e as setAriaRole,Q as setAriaRoleDescription,R as setAriaRowCount,T as setAriaRowIndex,U as setAriaRowIndexText,V as setAriaRowSpan,W as setAriaSelected,X as setAriaSetSize,Y as setAriaSort,Z as setAriaValueMax,$ as setAriaValueMin,_ as setAriaValueNow,nn as setAriaValueText,t as toggleAriaAttribute};\n//# sourceMappingURL=aria.js.map\n","import{setAriaHidden as t}from\"./aria.js\";function n(n,e,i={}){const{skipAriaHidden:o}=i;n.classList.toggle(\"comp-hidden\",!e),o||t(n,!e)}function e(n,e,i={}){const{skipAriaHidden:o}=i;n.classList.toggle(\"comp-invisible\",!e),o||t(n,!e)}function i(t,n){const e=\"disabled\",i=n?t=>t.setAttribute(e,\"\"):t=>t.removeAttribute(e);i(t),o(t.querySelectorAll(\"input\"),(t=>i(t)))}function o(t,n){if(null!=t)for(let e=0;e<t.length;e++)n(t[e])}function r(t){if(null==t)return[];const n=[];return o(t,(t=>n.push(t))),n}function l(t,n){if(t)for(let e=0;e<t.length;e++){const i=t[e];n(i.name,i.value)}}function d(t,n,e){null==e?t.removeAttribute(n):t.setAttribute(n,e.toString())}function a(t,n){if(t)for(let e=0;e<t.length;e++){const i=t[e];n(i.name,i.value)}}function u(t){return t instanceof Node||t instanceof HTMLElement}function h(t){for(;t&&t.firstChild;)t.removeChild(t.firstChild)}function g(t,n){\"flex\"===n?(t.style.removeProperty(\"width\"),t.style.removeProperty(\"minWidth\"),t.style.removeProperty(\"maxWidth\"),t.style.flex=\"1 1 auto\"):f(t,n)}function f(t,n){n=s(n),t.style.width=n.toString(),t.style.maxWidth=n.toString(),t.style.minWidth=n.toString()}function s(t){return\"number\"==typeof t?t+\"px\":t}function m(t,n,e){null==e?t.removeAttribute(n):t.setAttribute(n,e.toString())}function p(t,n,e){e&&e.nextSibling===n||(e?e.nextSibling?t.insertBefore(n,e.nextSibling):t.appendChild(n):t.firstChild&&t.firstChild!==n&&t.insertAdjacentElement(\"afterbegin\",n))}function c(t,n,e){e?e.insertAdjacentElement(\"afterend\",n):t.firstChild?t.insertAdjacentElement(\"afterbegin\",n):t.appendChild(n)}function b(t,n){n=s(n),t.style.height=n.toString(),t.style.maxHeight=n.toString(),t.style.minHeight=n.toString()}function W(t){const{height:n,width:e,borderTopWidth:i,borderRightWidth:o,borderBottomWidth:r,borderLeftWidth:l,paddingTop:d,paddingRight:a,paddingBottom:u,paddingLeft:h,marginTop:g,marginRight:f,marginBottom:s,marginLeft:m,boxSizing:p}=window.getComputedStyle(t);return{height:parseFloat(n),width:parseFloat(e),borderTopWidth:parseFloat(i),borderRightWidth:parseFloat(o),borderBottomWidth:parseFloat(r),borderLeftWidth:parseFloat(l),paddingTop:parseFloat(d),paddingRight:parseFloat(a),paddingBottom:parseFloat(u),paddingLeft:parseFloat(h),marginTop:parseFloat(g),marginRight:parseFloat(f),marginBottom:parseFloat(s),marginLeft:parseFloat(m),boxSizing:p}}function y(t){const n=t.getBoundingClientRect(),{borderTopWidth:e,borderLeftWidth:i,borderRightWidth:o,borderBottomWidth:r}=W(t);return{top:n.top+(null!=e?e:0),left:n.left+(null!=i?i:0),right:n.right+(null!=o?o:0),bottom:n.bottom+(null!=r?r:0),width:n.width,height:n.height}}function S(t){const n=t.getBoundingClientRect(),{borderTopWidth:e,borderLeftWidth:i,borderRightWidth:o,borderBottomWidth:r,marginTop:l,marginBottom:d,marginLeft:a,marginRight:u}=W(t);return{top:n.top+(null!=e?e:0)-(null!=l?l:0),left:n.left+(null!=i?i:0)-(null!=a?a:0),right:n.right+(null!=o?o:0)+(null!=u?u:0),bottom:n.bottom+(null!=r?r:0)+(null!=d?d:0),width:n.width+(null!=i?i:0)+(null!=o?o:0)+(null!=a?a:0)+(null!=u?u:0),height:n.height+(null!=e?e:0)+(null!=r?r:0)+(null!=l?l:0)+(null!=d?d:0),toJSON:()=>0,y:n.top+(null!=e?e:0)-(null!=l?l:0),x:n.left+(null!=i?i:0)-(null!=a?a:0)}}function F(t){const n=W(t),e=n.marginBottom+n.marginTop;return Math.ceil(t.offsetHeight+e)}function L(t){const n=W(t),e=n.marginLeft+n.marginRight;return Math.ceil(t.offsetWidth+e)}function x(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function B(t){const n=document.createElement(\"div\");return n.innerHTML=(t||\"\").trim(),n.firstChild}export{m as addOrRemoveAttribute,B as addTemplate,h as clearElement,r as cloneNodeList,p as ensureDomOrder,l as forEachAttributeInMap,a as forEachAttributeInNamedNodeMap,o as forEachNodeInList,s as formatSize,F as getAbsoluteHeight,L as getAbsoluteWidth,S as getElementRectWithMargin,y as getElementRectWithOffset,W as getElementSize,c as insertWithDomOrder,u as isNodeOrHTMLElement,x as removeFromParent,i as setDisabled,n as setDisplayed,g as setElementWidth,b as setFixedHeight,f as setFixedWidth,e as setVisible,d as toggleAttribute};\n//# sourceMappingURL=dom.js.map\n","const e={METADATA:\"COMPONENT_META_DATA\"};function t(e){if(e.name)return e.name}function r(e=null){return function(t,r,n){null!==e?\"number\"!=typeof n?o(t,\"querySelectors\",{attributeName:r,querySelector:e,refSelector:void 0}):console.error(\"QuerySelector should be on an attribute\"):console.error(\"QuerySelector should not be null\")}}function n(e){return function(t,r,n){o(t,\"querySelectors\",{attributeName:r,querySelector:`[ref=${e}]`,refSelector:e})}}function o(r,n,o){const u=function(t,r){Reflect.has(t,e.METADATA)||Reflect.set(t,e.METADATA,{});return Reflect.has(t[e.METADATA],r)||Reflect.set(t[e.METADATA],r,{}),Reflect.get(t[e.METADATA],r)}(r,t(r.constructor));u[n]||(u[n]=[]),u[n].push(o)}export{e as Components,r as QuerySelector,t as getFunctionName,n as queryAssignedNodes};\n//# sourceMappingURL=ReferenceSelector.js.map\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export const CALENDAR_BEAN_NAME = {\n\tCALENDAR_API               : 'calendarApi',\n\tCALENDAR_CONFIGURATION     : 'configuration',\n\tCSSCLASSNAMEGENERATOR      : 'CSSClassNameGenartor',\n\tKEYBOARD_SHORTCUT_HANDLER  : 'KeyBoardShortCutsHandler',\n\tCALENDAR_EVENT_HANDLER     : 'calendarEventHandler',\n\tCALENDAR_CONTROLLER_HANDLER: 'calendarControllerHandler',\n\tCALENDAR_MODEL             : 'calendarModel',\n\tCALENDAR_INPUT_HANDLER     : 'calendarInputHandler',\n\tCALENDAR_VIEW_MANAGER      : 'calendarViewManager',\n\tCALENDAR_TIME_DROPDOWN_MANAGER : 'calendarTimeDropDownManager',\n};","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\n\nimport { CalendarOptionHandlerType } from \"./calendar-options-handler.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateType, ICalendarConfiguration } from \"../../calendar-configuration.types\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class CalendarOptionHandler extends EventEmitter implements CalendarOptionHandlerType{\n\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_CONFIGURATION) configuration!: ICalendarConfiguration;\n\n    getInstanceID(): string | undefined {\n        return this.configuration.instanceID;\n    }\n\n    getInitialDate(): DateType{\n        return this.configuration.value;\n\n    }\n\n    getFormat():string{\n        return this.configuration.format as string;\n    }\n\n    isDisabled()   : boolean{\n        return this.configuration.disabled?? false;\n    }\n    isReadOnly()   : boolean{\n        return this.configuration.readOnly?? false;\n    }\n\n    getConfiguration() :ICalendarConfiguration{\n        return this.configuration;\n    }\n\n    getMonthFormat():string{\n        return this.configuration.monthFormat?? \"MMMM\";\n    }\n\n    getYearFormat():string{\n        return this.configuration.yearFomat ?? \"YYYY\";\n    }\n\n    getViewType():string{\n        return this.configuration.viewType?? \"day\";\n    }\n\n    onClick(event : MouseEvent):void{\n        if(typeof this.configuration.onClick == \"function\"){\n                this.configuration.onClick(event);\n        }\n    }\n    onChange(date:Date):void{\n        if(typeof this.configuration.onChange == \"function\"){\n                this.configuration.onChange(date);\n        }\n    }\n\n    getAppendTo():HTMLElement {\n        return this.configuration.appendTo?? document.body;\n    }\n\n    getShowAdjacentDates():boolean {\n        return this.configuration.showAdjacentDates?? true;\n    }\n\n    getWeekDayFormat():string {\n        return this.configuration.weekDayFormat?? \"ddd\";\n    }\n\n    getLocale(): string {\n        return this.configuration.locale?? \"en\";\n    }\n\n    getAriaLabelledBy():string {\n        return this.configuration.ariaLabelledby?? \"\";\n\n    }\n    getClassName():string {\n        return this.configuration.className?? \"\";\n    }\n    \n    getPickerType():string {\n        return this.configuration.pickerType?? \"date\";\n    }\n\n    getType():string{\n        return this.configuration.type?? \"datepicker\";\n    }\n\n    shouldShowTimePicker():boolean {\n        return this.configuration.showTimePicker ?? false;\n    }\n\n    getHourCycle():12 | 24 {\n        return this.configuration.hourCycle ?? 12;\n    }\n\n    getMinuteInterval(): number {\n        return this.configuration.minuteInterval ?? 1;\n    }\n\n    getInputElement():HTMLElement | undefined{\n        return this.configuration.inputElement;\n    }\n\n    getMinDate(): DateType {\n        return this.configuration.minDate;\n    }\n\n    getMaxDate(): DateType {\n        return this.configuration.maxDate;\n    }\n\n     onDestroy():void{\n        if(typeof this.configuration.onDestroy === \"function\"){\n            this.configuration.onDestroy();\n        }\n     }\n\n     getId():string | undefined{\n        return this.configuration.id ;\n     }\n\n     shouldCloseOnSelect():boolean{\n        return this.configuration.closeOnSelect ?? true;\n     }\n\n     shouldDeselect():boolean{\n        return this.configuration.shouldDeselect ??  false;\n     }\n\n     onDeselect(value:Date):void{\n         if(this.configuration.onDeselect){\n            this.configuration.onDeselect(value)\n         }\n     }\n}\n\n\n","export const BUTTON_BEAN_NAME = {\n\tBUTTON_CONFIGURATION: 'configuration',\n\tBUTTON_API : 'buttonapi',\n\tBUTTON_CONTROLLER_HANDLER: 'buttonControllerHandler',\n};","const e={elementDelimiter:\"__\",modifierDelimiter:\"--\",namespace:\"\",namespaceDelimiter:\"-\",strict:!0};function i({block:i=\"\",namespace:r=[],element:t=\"\",modifier:n=[]}={},s){const{elementDelimiter:a,modifierDelimiter:c,namespaceDelimiter:m,strict:o}=Object.assign(Object.assign({},e),s),l=[...r,i].join(m),$=o?[m,a,c]:[],f=o?$.join(\"\").split(\"\").filter(((e,i,r)=>r.indexOf(e)===i)):[];function u(e,i){if(null!=i&&\"\"!==i){if(o&&(r=i,f.some((e=>r.includes(e)))))throw Error(((e,i,r)=>`The modifier (\"${i}\") must not use the characters contained within the delimiters (\"${r.join('\", \"')}\").`)(0,i,$));return`${e} ${l}${a}${t}${c}${i}`}var r;return e}const d=t?Array.isArray(t)?t.map((e=>`${l}${a}${e}`)).join(\" \"):`${l}${a}${t}`:l;return n?Array.isArray(n)?n.reduce(u,d):Object.keys(n).filter((e=>n[e])).reduce(u,d):d}export{i as default};\n//# sourceMappingURL=bem.js.map\n","function o(o,e){const t={};return Object.keys(o).forEach((i=>{const{slot:n,modifiers:r}=o[i],s=r.filter(Boolean),f=e({slot:n,modifiers:s});t[i]=[f].filter(Boolean).join(\" \")})),t}export{o as default};\n//# sourceMappingURL=composeClasses.js.map\n","import e from\"../BEM/bem.js\";function m(m,o,r,t=[\"Dg\"]){return e({block:m,namespace:t,element:o,modifier:r})}export{m as default};\n//# sourceMappingURL=generateUtilityClass.js.map\n","const t={Any:\"Any\",KeyA:\"KeyA\",KeyS:\"KeyS\",KeyD:\"KeyD\",KeyF:\"KeyF\",KeyH:\"KeyH\",KeyG:\"KeyG\",KeyZ:\"KeyZ\",KeyX:\"KeyX\",KeyC:\"KeyC\",KeyV:\"KeyV\",IntlBackslash:\"IntlBackslash\",KeyB:\"KeyB\",KeyQ:\"KeyQ\",KeyW:\"KeyW\",KeyE:\"KeyE\",KeyR:\"KeyR\",KeyY:\"KeyY\",KeyT:\"KeyT\",Digit1:\"Digit1\",Digit2:\"Digit2\",Digit3:\"Digit3\",Digit4:\"Digit4\",Digit6:\"Digit6\",Digit5:\"Digit5\",Equal:\"Equal\",Digit9:\"Digit9\",Digit7:\"Digit7\",Minus:\"Minus\",Digit8:\"Digit8\",Digit0:\"Digit0\",BracketRight:\"BracketRight\",KeyO:\"KeyO\",KeyU:\"KeyU\",BracketLeft:\"BracketLeft\",KeyI:\"KeyI\",KeyP:\"KeyP\",Enter:\"Enter\",KeyL:\"KeyL\",KeyJ:\"KeyJ\",Quote:\"Quote\",KeyK:\"KeyK\",Semicolon:\"Semicolon\",Backslash:\"Backslash\",Comma:\"Comma\",Slash:\"Slash\",KeyN:\"KeyN\",KeyM:\"KeyM\",Period:\"Period\",Tab:\"Tab\",Space:\"Space\",Backquote:\"Backquote\",Backspace:\"Backspace\",Escape:\"Escape\",ShiftLeft:\"ShiftLeft\",CapsLock:\"CapsLock\",AltLeft:\"AltLeft\",ControlLeft:\"ControlLeft\",ShiftRight:\"ShiftRight\",AltRight:\"AltRight\",ControlRight:\"ControlRight\",F17:\"F17\",NumpadDecimal:\"NumpadDecimal\",NumpadMultiply:\"NumpadMultiply\",NumpadAdd:\"NumpadAdd\",NumLock:\"NumLock\",NumpadDivide:\"NumpadDivide\",NumpadEnter:\"NumpadEnter\",NumpadSubtract:\"NumpadSubtract\",F18:\"F18\",F19:\"F19\",NumpadEqual:\"NumpadEqual\",Numpad0:\"Numpad0\",Numpad1:\"Numpad1\",Numpad2:\"Numpad2\",Numpad3:\"Numpad3\",Numpad4:\"Numpad4\",Numpad5:\"Numpad5\",Numpad6:\"Numpad6\",Numpad7:\"Numpad7\",F20:\"F20\",Numpad8:\"Numpad8\",Numpad9:\"Numpad9\",IntlYen:\"IntlYen\",IntlRo:\"IntlRo\",NumpadComma:\"NumpadComma\",F5:\"F5\",F6:\"F6\",F7:\"F7\",F3:\"F3\",F8:\"F8\",F9:\"F9\",F11:\"F11\",F13:\"F13\",F16:\"F16\",F14:\"F14\",F10:\"F10\",ContextMenu:\"ContextMenu\",F12:\"F12\",F15:\"F15\",Home:\"Home\",PageUp:\"PageUp\",Delete:\"Delete\",F4:\"F4\",End:\"End\",F2:\"F2\",PageDown:\"PageDown\",F1:\"F1\",ArrowLeft:\"ArrowLeft\",ArrowRight:\"ArrowRight\",ArrowDown:\"ArrowDown\",ArrowUp:\"ArrowUp\",MetaLeft:\"MetaLeft\",MetaRight:\"MetaRight\"},e={ControlLeft:\"ControlLeft\",ControlRight:\"ControlRight\",AltLeft:\"AltLeft\",AltRight:\"AltRight\",ShiftLeft:\"ShiftLeft\",ShiftRight:\"ShiftRight\",MetaLeft:\"MetaLeft\",MetaRight:\"MetaRight\"},a=[\"MetaLeft\",\"MetaRight\",\"ControlLeft\",\"ControlRight\",\"ShiftLeft\",\"ShiftRight\",\"AltLeft\",\"AltRight\"];export{t as KeyCodes,e as ModifierKeys,a as SortedModifierOrder};\n//# sourceMappingURL=key-events-constants.js.map\n","import e from\"../debounce/debounce.js\";import{KeyCodes as t,SortedModifierOrder as n,ModifierKeys as i}from\"./key-events-constants.js\";export{KeyCodes}from\"./key-events-constants.js\";class s{constructor(e=document.body,t={}){this.container=e,this.listenerMapping=null,this.defaultConfig=Object.assign(Object.assign({},s.DefaultConfiguration),t),this.activeKeys=[],this.konamiSequence=[],this.isPaused=!1,this.destroy=()=>{},this.clearKonamiSequence=()=>{},this.init()}init(){const t=KeyboardEvent.CAPTURING_PHASE,n=KeyboardEvent.BUBBLING_PHASE,o=e=>this.executeKeyCombo(e,n),r=e=>{e.eventPhase==t&&this.executeKeyCombo(e,t)},a=()=>this.activeKeys=[],c=e=>{const t=e.code;this.konamiSequence.push(t),this.clearKonamiSequence()};this.clearKonamiSequence=e((()=>this.konamiSequence=[]),s.konamiDelay);const u=e=>{const t=e.code;!i[e.code]&&!this.activeKeys.includes(t)&&this.activeKeys.push(t)};this.listenerMapping={keydown:{capture:{},bubble:{}},keyup:{capture:{},bubble:{}}},this.destroy=()=>{this.listenerMapping=null,this.container.removeEventListener(\"keydown\",u,!0),this.container.removeEventListener(\"keydown\",o),this.container.removeEventListener(\"keydown\",r,!0),this.container.removeEventListener(\"keyup\",o),this.container.removeEventListener(\"keyup\",r,!0),this.container.removeEventListener(\"keydown\",c),window.removeEventListener(\"keyup\",a)},this.container.addEventListener(\"keydown\",u,!0),this.container.addEventListener(\"keydown\",o),this.container.addEventListener(\"keydown\",r,!0),this.container.addEventListener(\"keyup\",o),this.container.addEventListener(\"keyup\",r,!0),this.container.addEventListener(\"keydown\",c),window.addEventListener(\"keyup\",a)}getListenerMeta(e){const{keyCombo:t,priority:n}=e,i=Object.assign(Object.assign({},this.defaultConfig),e),s=this.getListeners(i.eventType,i.capture,t);return i.priority=null!=n?n:s.length,i}extractExecutionMeta(e,n){const i=e.type,s=n===e.CAPTURING_PHASE,o=e.ctrlKey?t.ControlLeft:\"\",r=[e.metaKey?t.MetaLeft:\"\",o,e.shiftKey?t.ShiftLeft:\"\",e.altKey?t.AltLeft:\"\"].filter((e=>\"\"!==e)),a=this.activeKeys;return r.push(...a),{keyCombo:r,capture:s,eventType:i}}executeListenerArr(e,t=null){for(let n=0;n<e.length;n++){const i=e[n],s=!t||i.repeat==t.repeat;if(!i.isKonami&&s&&!1===i.callback(t,i))break}}executeKonamiSequence(e=null,t=1){const n=3===t,i=this.getListeners(\"keydown\",n,this.konamiSequence);for(let t=0;t<i.length;t++){const n=i[t],s=!e||n.repeat==e.repeat;if(n.isKonami&&s&&!1===n.callback(e,n))break}}sortKeyCombo(e){return e.sort(((e,t)=>n.indexOf(e)-n.indexOf(t)))}getListeners(e,t,n){var i,s;const o=this.convertKeyComboToString(n),r=t?\"capture\":\"bubble\";return(null===(s=null===(i=this.listenerMapping)||void 0===i?void 0:i[e][r])||void 0===s?void 0:s[o])||[]}addListener(e){const{keyCombo:t,callback:n}=e,i=this.getListenerMeta(e),{eventType:s,capture:o,priority:r}=i,a=this.convertKeyComboToString(t),c=o?\"capture\":\"bubble\";this.listenerMapping?this.listenerMapping[s]?this.listenerMapping[s][c]?this.listenerMapping[s][c][a]||(this.listenerMapping[s][c][a]=[]):this.listenerMapping[s][c]={}:this.listenerMapping[s]={capture:{},bubble:{}}:this.listenerMapping={keydown:{capture:{},bubble:{}},keyup:{capture:{},bubble:{}}},this.listenerMapping[s][c][a].splice(r,0,i)}convertKeyComboToString(e){if(\"string\"==typeof e)return e;const t=e;return this.sortKeyCombo(t).join(\"+\")}executeKeyCombo(e,n){if(this.isPaused)return;let i,s,o,r;e instanceof KeyboardEvent?(r=e,n=r.eventPhase,({keyCombo:i,capture:s,eventType:o}=this.extractExecutionMeta(e,n)),this.executeKonamiSequence(r,n)):({keyCombo:i,capture:s,eventType:o}=e);const a=this.getListeners(o,s,i),c=t.Any,u=this.getListeners(o,s,c);this.executeListenerArr(a,r),this.executeListenerArr(u,r)}removeListener(e,t){const{keyCombo:n,capture:i,eventType:s}=e,o=this.getListeners(s,i,n);let r=-1;o.find((({callback:e},n)=>{if(e===t)return r=n,!0})),-1!==r&&o.splice(r,1)}removeKeyCombo(e){var t;const{keyCombo:n,capture:i,eventType:s}=e,o=i?\"capture\":\"bubble\",r=this.convertKeyComboToString(n);null===(t=this.listenerMapping)||void 0===t||delete t[s][o][r]}importEvents(e){e.forEach((e=>{this.addListener(e)}))}pauseExecution(){this.isPaused=!0}unpauseExecution(){this.isPaused=!1}}s.DefaultConfiguration={description:\"\",capture:!1,isKonami:!1,eventType:\"keydown\",repeat:!1},s.konamiDelay=500;export{s as KeyEventManager};\n//# sourceMappingURL=key-events.js.map\n","function e(e,t=166){let u;function a(...a){clearTimeout(u),u=setTimeout((()=>{e.apply(this,a)}),t)}return a.clear=()=>{clearTimeout(u)},a}export{e as default};\n//# sourceMappingURL=debounce.js.map\n","import{BEAN_NAME as e}from\"../Constants/BeanName.js\";import{EventEmitter as t}from\"../Events/EventEmitter.js\";import{Components as s,getFunctionName as i}from\"../Decorator/ReferenceSelector.js\";import{cloneNodeList as r,forEachAttributeInNamedNodeMap as o,isNodeOrHTMLElement as n,setVisible as l,setDisplayed as a}from\"../utils/dom.js\";import{AutoWired as c,PreConstruct as h}from\"../Decorator/BeanFactoryDecorator.js\";var u=function(e,t,s,i){var r,o=arguments.length,n=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,s):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)n=Reflect.decorate(e,t,s,i);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(n=(o<3?r(n):o>3?r(t,s,n):r(t,s))||n);return o>3&&n&&Object.defineProperty(t,s,n),n};class d extends t{constructor(e){super(),this.displayed=!0,this.visible=!0,e&&this.setTemplate(e)}preConstructMethods(){this.createChildComponentsPreConstruct()}createChildComponentsFromTags(e,t){r(e.childNodes).forEach((s=>{if(!(s instanceof HTMLElement))return;const i=this.createComponentFromElement(s,(e=>{e.getGui()&&this.copyAttributesFromNode(s,e.getGui())}),t);if(i){if(i.addItems&&s.children.length){this.createChildComponentsFromTags(s,t);const e=Array.prototype.slice.call(s.children);i.addItems(e)}this.swapComponentForNode(i,e,s)}else s.childNodes&&this.createChildComponentsFromTags(s,t)}))}createComponentFromElement(e,t,s){const i=e.nodeName,r=s?s[e.getAttribute(\"ref\")]:void 0,o=this.componentRegistry.getComponentClass(i);if(o){d.elementGettingCreated=e;const s=new o(r);return s.setParentComponent(this),this.createBean(s,null,t),s}return null}copyAttributesFromNode(e,t){o(e.attributes,((e,s)=>{\"class\"!==e?t.setAttribute(e,s):(s||\"\").split(\" \").forEach((e=>t.classList.add(e)))}))}swapComponentForNode(e,t,s){const i=e.getGui();t.replaceChild(i,s),this.addDestroyFunc(this.destroyBean.bind(this,e)),this.swapInComponentForRefSelectors(e,s)}swapInComponentForRefSelectors(e,t){const s=this;this.iterateOverQuerySelectors((i=>{s[i.attributeName]===t&&(s[i.attributeName]=e)}))}iterateOverQuerySelectors(e){let t=Object.getPrototypeOf(this);for(;null!=t;){const r=Reflect.get(t,s.METADATA),o=i(t.constructor);r&&Reflect.has(r,o)&&Reflect.has(r[o],\"querySelectors\")&&r[o].querySelectors.forEach((t=>e(t))),t=Object.getPrototypeOf(t)}}createChildComponentsPreConstruct(){this.getGui()&&this.createChildComponentsFromTags(this.getGui())}activateTabIndex(e){e||(e=[]),e.length||e.push(this.getGui()),e.forEach((e=>e.setAttribute(\"tabindex\",\"0\")))}wireQuerySelectors(){if(!this.eGui)return;const e=this;this.iterateOverQuerySelectors((t=>{const s=s=>e[t.attributeName]=s;if(t.refSelector&&this.getAttribute(\"ref\")===t.refSelector)s(this.eGui);else{const e=this.eGui.querySelector(t.querySelector);e&&s(e.Component||e)}}))}setGui(e){this.eGui=e}queryForHtmlElement(e){return this.eGui.querySelector(e)}queryForHtmlInputElement(e){return this.eGui.querySelector(e)}destroy(){this.parentComponent&&(this.parentComponent=void 0),super.destroy()}setTemplate(e,t){this.setTemplateFromElement(e,t)}setTemplateFromElement(e,t){this.eGui=e,this.eGui.Component=this,this.wireQuerySelectors(),this.getContext()&&this.createChildComponentsFromTags(this.getGui(),t)}getGui(){return this.eGui}getFocusableElement(){return this.eGui}getAriaElement(){return this.getFocusableElement()}setParentComponent(e){this.parentComponent=e}getParentComponent(){return this.parentComponent}appendChild(e,t=this.eGui){if(null!=e)if(n(e))t.appendChild(e);else{const s=e;t.appendChild(s.getGui())}}isDisplayed(){return this.displayed}setVisible(e,t={}){if(e!==this.visible){this.visible=e;const{skipAriaHidden:s}=t;l(this.eGui,e,{skipAriaHidden:s})}}setDisplayed(e,t={}){if(e!==this.displayed){this.displayed=e;const{skipAriaHidden:s}=t;a(this.eGui,e,{skipAriaHidden:s});const i={type:d.EVENT_DISPLAYED_CHANGED,visible:this.displayed};this.dispatchEvent(i)}}addGuiEventListener(e,t,s){this.eGui.addEventListener(e,t,s),this.addDestroyFunc((()=>this.eGui.removeEventListener(e,t)))}addCssClass(e){const t=this.getGui(),s=(e||\"\").split(\" \");null==t||t.classList.add(...s)}removeCssClass(e){const t=this.getGui(),s=(e||\"\").split(\" \");null==t||t.classList.remove(...s)}containsCssClass(e){const t=this.getGui();return!!t&&t.classList.contains(e)}addOrRemoveCssClass(e,t){if(e){if(e.indexOf(\" \")>=0){const s=(e||\"\").split(\" \");if(s.length>1)return void s.forEach((e=>this.addOrRemoveCssClass(e,t)))}if(e.length){const s=this.getGui();s&&s.classList.toggle(e,t)}}}getAttribute(e){const t=this.getGui();return t?t.getAttribute(e):null}getRefElement(e){return this.queryForHtmlElement(`[ref=\"${e}\"]`)}}d.EVENT_DISPLAYED_CHANGED=\"displayedChanged\",u([c(e.COMPONENT_REGISTRY)],d.prototype,\"componentRegistry\",void 0),u([h()],d.prototype,\"preConstructMethods\",null);export{d as Component};\n//# sourceMappingURL=Component.js.map\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ButtonController } from \"../core/button-controller\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { BUTTON_BEAN_NAME } from \"../constants/bean-name-constants\";\n\n@Bean(BUTTON_BEAN_NAME.BUTTON_CONTROLLER_HANDLER)\nexport class ButtonControllerHandler extends EventEmitter {\n    private buttonCtrl !: ButtonController;\n    registerButton(buttonCtrl : ButtonController) : void {\n        this.buttonCtrl = buttonCtrl;\n    }\n\n    getButtonCtrl() : ButtonController {\n        return this.buttonCtrl;\n    }\n}\n\n\n","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../modules/CSSRegistry\";\n\nexport function getButtonUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('button', slots.slot, slots.modifiers,globalNameSpace as string[]);\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ButtonCompType, ButtonPropertyType, ButtonRendererParamsType } from \"./button.types\";\nimport { AutoWired, BEAN_NAME, setAriaLabel } from \"@dg/corecomponent\";\nimport { IButtonUserComponentHandler } from \"../model/button-user-component-handler.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { BUTTON_BEAN_NAME } from \"../constants/bean-name-constants\";\nimport { ButtonControllerHandler } from \"../model/button-handler\";\nimport { ICustomRenderer } from \"../../../utility/custom-render.types\";\nimport { ComponentItemType, IComponentDetails } from \"../../../utility/component-detail.types\";\nimport { getButtonUtilityClass } from \"./button-classes\";\n\nconst useUtilityClasses = (ownerState : any) => {\n    const {disabled} = ownerState;\n\tconst slots = {\n\t\troot    : {\n            slot     : 'root',\n            modifiers: [\n                disabled && 'disabled'\n            ]\n        },\n\t};\n\n\treturn composeClasses(slots, getButtonUtilityClass);\n};\n\nexport class ButtonController extends EventEmitter {\n\tprivate comp!: ButtonCompType|null;\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IButtonUserComponentHandler;\n    @AutoWired(BUTTON_BEAN_NAME.BUTTON_CONTROLLER_HANDLER) controllerHandler !: ButtonControllerHandler;\n\tsetComp(comp: ButtonCompType) {\n        this.comp = comp;\n        this.init();\n        this.attachListener();\n        this.controllerHandler.registerButton(this);\n        this.addDestroyFunc(() => {\n            this.comp?.destroy();\n        })\n    }\n\n    refresh() : void {\n        this.applyClasses();\n        this.setRendererDetails();\n        this.setTabIndex();\n        this.setRole();\n        this.setDisabled();\n        this.setAccessibility();\n    }\n\n    private init() {\n        this.applyClasses();\n        this.setRendererDetails();\n        this.setTabIndex();\n        this.setRole();\n        this.setDisabled();\n        this.setAccessibility();\n        this.addListener(this.eventHandler, 'PROPERTY_CHANGED',this.refresh.bind(this));\n    }\n\n    private setAccessibility() : void {\n        const element = this.comp?.getElement();\n        element && setAriaLabel(element, this.optionsHandler.getAriaLabel());\n    }\n\n    private setDisabled() {\n        const element = this.comp?.getElement();\n        const disabled = this.optionsHandler.isDisabled();\n        element && element.setAttribute('aria-disabled', disabled);\n    }\n\n    private attachListener() {\n        const element = this.comp?.getElement();\n        if(!element) return;\n        this.addListener(element, 'keydown', (event) => {\n            const disabled = this.optionsHandler.isDisabled();\n\t\t\tconst callback = this.optionsHandler.getEvent();\n\t\t\tif (disabled) return;\n            switch (event.key) {\n                case 'Enter': \n                case ' '    : \n                    event.preventDefault();\n                    callback && callback(event);\n                    break;\n            }\n        });\n\n        this.addListener(element, 'click', (event) => {\n            const disabled = this.optionsHandler.isDisabled();\n            const readonly = this.optionsHandler.isReadonly();\n\t\t\tconst callback = this.optionsHandler.getEvent();\n\t\t\tif (disabled || readonly) return;\n            callback && callback(event);\n        });\n    }\n\n    private setRole() {\n        const element = this.comp?.getElement();\n        if(!element) return;\n\n        if(!element.hasAttribute('role')) {\n            element.setAttribute('role',\"button\");\n        }\n    }\n\n    private applyClasses() {\n        const ownerState = this.getOwnerState();\n        const userclasses = this.optionsHandler.getClasses();\n        const classes = useUtilityClasses(ownerState);\n        this.comp?.getElement().classList.remove('dg-button__root--disabled');\n\n        this.comp?.addOrRemoveClassName(classes.root, true);\n\n\n        if(userclasses && typeof userclasses === \"string\") {\n            userclasses && this.comp?.getElement().classList.add(userclasses);\n        }else if(userclasses) {\n            for(let i = 0; i < userclasses.length; i++){\n                const className = userclasses[i]\n            this.comp?.getElement().classList.add(className);\n\n            }\n        }\n        \n    }\n\n    private setTabIndex() {\n        const element = this.comp?.getElement();\n        const tabindex = this.optionsHandler.getTabindex();\n\n        if(!element) return;\n\n        if(!element.hasAttribute('tabindex')) {\n            element.setAttribute('tabindex',tabindex);\n        }\n    }   \n\n    private getOwnerState() {\n        return {\n            disabled : this.optionsHandler.isDisabled()\n        }\n    }\n\n    private setRendererDetails() : void {\n        const rendererWrapper = this.createButtonRendererWrapper<ICustomRenderer>();\n        const params          = this.createButtonRendererParams();\n        const props           = this.getProperty();\n        const userDetails     = this.userComponentHandler.getButtonRendererDetails<ICustomRenderer, ButtonRendererParamsType>(rendererWrapper, params) as IComponentDetails;\n        this.comp?.setRendererDetails(userDetails, props);\n    }\n\n    private createButtonRendererWrapper<T>() : ComponentItemType<T> {\n        const renderer = this.optionsHandler.getRenderer();\n        const rendererParams = this.optionsHandler.getRendererParams();\n        return {\n\t\t\tgetRenderer      : () => renderer,\n\t\t\tgetRendererParams: () => rendererParams\n\t\t}\n    }\n\n    private createButtonRendererParams() : ButtonRendererParamsType {\n        return {\n            parentElement : this.comp?.getElement() ?? null,\n            value : this.optionsHandler.getText()\n        }\n    }\n\n    getElement(){\n        return this.comp?.getElement();\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.comp = null\n    }\n\n    getProperty() : ButtonPropertyType {\n        return {\n            showIcon: this.optionsHandler.needToShowIcon(),\n            showText: this.optionsHandler.needToShowText(),\n            icon    : this.optionsHandler.getIcon(),\n            text    : this.optionsHandler.getText(),\n            getSvgClasses : this.optionsHandler.getSvgClasses()\n        }\n    }\n\n    applyClassNameForSVG():void{\n        const showIcon = this.optionsHandler.needToShowIcon();\n\n        if(showIcon){\n            const getSvgClasses = this.optionsHandler.getSvgClasses();\n            getSvgClasses && this.comp?.getSvgElement().classList.add(getSvgClasses);\n        }\n\n    }\n}","export interface CreateSVGClassType{\n    icon : string,\n    svg : string\n}\n\n// export function createSVGTemplate(classes : CreateSVGClassType, iconID : string){\n//     return `<i class =\"dg-button__icon\">\n//     <svg class=${classes.svg} focusable=\"false\" ref=\"svg-element\">\n//                 <use xlink:href=${iconID}></use>\n//             </svg>\n//             <i>`\n// }\n\nexport function getSvgIcon(iconId: string,classes : CreateSVGClassType ): string {\n    const svgIcons: { [key: string]: string } = {\n        \"icon-plus\": \n            `<svg viewBox=\"0 0 24 24\"  class=${classes.svg}>\n                <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z\" />\n            </svg>`,\n        \"icon-minus\": \n           `<svg viewBox=\"0 0 24 24\" class=${classes.svg}>\n                <path d=\"M19 13H5v-2h14v2z\" />\n            </svg>`,\n        \"icon-up-arrow\":\n           `<svg width=\"24\" class=${classes.svg} height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path d=\"M8 14L12 10L16 14\" stroke=\"#4A4A4A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n</svg>`,\n        \"icon-down-arrow\": \n           `<svg width=\"24\" class=${classes.svg} height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8 10L12 14L16 10\" stroke=\"#4A4A4A\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n                </svg>`,\n        \"icon-share\":\n           `<svg viewBox=\"0 0 24 24\" class=${classes.svg}>\n                <path d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.12-4.11c.54.5 1.24.82 2.02.82 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L7.96 9.81C7.42 9.31 6.72 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.72 0 1.42-.31 1.96-.77l7.12 4.11c-.05.23-.09.46-.09.7 0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3z\" />\n            </svg>`,\n        \"remove-icon\": \n            `<svg viewBox=\"0 0 24 24\" class=${classes.svg}>\n                <g id=\"Layer_1-2\" data-name=\"Layer 1\">\n                    <path d=\"M1 20a1 1 0 0 1-.71-1.7l18-18.01A1 1 0 1 1 19.7 1.7L1.71 19.71c-.2.2-.45.29-.71.29Z\" />\n                    <path d=\"M19 20c-.26 0-.51-.1-.71-.29l-18-18C-.1 1.32-.1.68.29.29s1.03-.39 1.42 0l18 18a1 1 0 0 1-.71 1.7Z\" />\n                </g>\n            </svg>`,\n        \"selected-icon\": \n           `<svg viewBox=\"0 0 24 24\" class=${classes.svg}>\n                <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14.5l-5-5 1.41-1.41L11 13.67l7.59-7.59L20 7.5l-9 9z\" />\n            </svg>`,\n        \"dg__svg--backward\": `\n            <svg viewBox=\"0 0 12 12\" width=\"100%\" height=\"100%\" class=${classes.svg}>\n                <polygon points=\"6.6,10.3 2.9,6.5 6.6,2.7 7.4,3.4 4.3,6.5 7.4,9.6\"></polygon>\n            </svg>`,\n        \"dg__svg--fastbackward\": \n           `<svg viewBox=\"0 0 12 12\" width=\"100%\" height=\"100%\" class=${classes.svg}>\n                <polygon points=\"5.6,10.3 1.9,6.5 5.6,2.6 6.3,3.4 3.3,6.5 6.4,9.6\"></polygon>\n                <polygon points=\"9.6,10.3 5.9,6.5 9.6,2.6 10.3,3.4 7.3,6.5 10.4,9.6\"></polygon>\n            </svg>`,\n        \"dg__svg--fastforward\": \n           `<svg viewBox=\"1 0 12 12\" width=\"100%\" height=\"100%\" class=${classes.svg}>\n                <polygon points=\"7.4,10.3 6.7,9.6 9.7,6.5 6.6,3.4 7.4,2.7 11.1,6.5\"></polygon>\n                <polygon points=\"3.4,10.3 2.7,9.6 5.7,6.5 2.6,3.4 3.4,2.7 7.1,6.5\"></polygon>\n            </svg>`,\n        \"dg__svg--forward\":\n           `<svg viewBox=\"1 0 12 12\" width=\"100%\" height=\"100%\" class=${classes.svg}>\n                <polygon points=\"4.4,10.3 3.7,9.6 6.7,6.5 3.6,3.4 4.4,2.7 8.1,6.5\"></polygon>\n            </svg>`,\n        'dg__svg--time-picker' : \n        `<svg  viewBox=\"0 0 20 20\" id=\"dg__svg--time\"  class=${classes.svg}>\n  <path d=\"M13.01,11.76l-2.45-1.56v-3.23c0-.5-.41-.91-.91-.91s-.91.41-.91.91v3.73c0,.31.16.6.42.77l2.87,1.82c.15.1.32.14.49.14.3,0,.59-.15.77-.42.27-.42.14-.99-.28-1.26Z\"/>\n  <path d=\"M10,0C4.49,0,0,4.49,0,10s4.49,10,10,10,10-4.49,10-10S15.51,0,10,0ZM10,18.18c-4.51,0-8.18-3.67-8.18-8.18S5.49,1.82,10,1.82s8.18,3.67,8.18,8.18-3.67,8.18-8.18,8.18Z\"/>\n</svg>`\n    };\n\n    return svgIcons[iconId] || \"\";\n}\n\n\n\n","import { composeClasses } from \"@dg/utils\";\n\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { ButtonCompType, ButtonPropertyType } from \"./button.types\";\nimport { PostConstruct, clearElement, queryAssignedNodes, removeFromParent } from \"@dg/corecomponent\";\nimport { ButtonController } from \"./button-controller\";\nimport { getSvgIcon } from \"../../../utility/create-svg-template\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\nimport { ICustomRenderer } from \"../../../utility/custom-render.types\";\nimport { getButtonUtilityClass } from \"./button-classes\";\n\nexport function loadTemplate(template: string): HTMLElement {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString((template || '').trim(), 'text/html');\n    return doc.body.firstElementChild as HTMLElement;\n}\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\ticon    : {\n            slot     : 'icon',\n            modifiers: []\n        },\n\t\tsvg : {\n\t\t\tslot : 'svg',\n\t\t\tmodifiers : []\n\t\t},\n\t\ttext : {\n\t\t\tslot : 'text',\n\t\t\tmodifiers : []\n\t\t}\n\t};\n\n\treturn composeClasses(slots, getButtonUtilityClass);\n};\n\nexport function escapeString(toEscape?: string | null, skipHtmlChars?: boolean): string | null {\n\n\t const escapeMap: { [key: string]: string } = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;', \n\t\t};\n\n    if (toEscape == null) {\n        return null;\n    }\n\n    const stringResult = toEscape.toString().toString();\n\n    if (skipHtmlChars) {\n\t\treturn stringResult;\n\t}\n\n    return stringResult.replace(/[&<>\"']/g, (chr) => escapeMap[chr]);\n}\n\nconst buttonTemplate = () => {\n    return document.createElement('button');\n};\n\nexport class ButtonComponent extends Component {\n\tprivate renderer!: ICustomRenderer;\n\t\n\t@queryAssignedNodes('svg-element') svgElement !      : any;\n\n\n\tprivate rendererElement!: HTMLElement | null;\n\n\tprivate appendTo: HTMLElement | null | undefined;\n\n\tconstructor(appendTo: HTMLElement | null | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.setTemplate(buttonTemplate());\n\t\tconst comp: ButtonCompType = {\n\t\t\tsetRendererDetails: ( rendererDetails: IComponentDetails, value?: ButtonPropertyType, ) => this.setRendererDetails(rendererDetails, value),\n\t\t\tgetElement: () => this.getGui(),\n\t\t\taddOrRemoveClassName: (name: string, force: boolean) => this.addOrRemoveCssClass(name, force),\n\t\t\tdestroy: () => this.destroy(),\n\t\t\tgetSvgElement : () => this.getSvgElement()\n\t\t};\n\n\t\tconst controller = this.createBean(new ButtonController());\n\t\tcontroller.setComp(comp);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tprivate setRendererDetails( rendererDetails: IComponentDetails, value?: ButtonPropertyType ): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutRenderer(value);\n\t\t}\n\t}\n\n\tprivate getSvgElement(){\n\t\treturn this.svgElement.eGui;\n\t}\n\n\tprivate insertValueWithoutRenderer(props?: ButtonPropertyType): void {\n\t\tif(!props) return ;\n\n\t\tconst { showIcon, icon, showText, text } = props;\n\n\t\tconst classes = useUtilityClasses();\n\t\tconst userClasses = typeof props.getSvgClasses === \"function\" ? props.getSvgClasses() : \"\";\n\t\tuserClasses ? classes.svg = userClasses : \"\";\n\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\n\t\tif (showIcon && icon) {\n\t\t\tlet iconElement = loadTemplate(getSvgIcon(icon,classes));\n\t\t\tthis.appendChild(iconElement);\n\t\t}\n\n\t\tif (showText && text) {\n\t\t\tconst textElement = document.createElement('span');\n\t\t\ttextElement.className = classes.text;\n\t\t\ttextElement.textContent = text?.toString() ?? '';\n\t\t\tthis.appendChild(textElement);\n\t\t}\n\t}\n\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate afterRenderer(renderer: ICustomRenderer) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\tprivate appendElementIntoUserDom(): void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo && this.appendTo.removeChild(eGui);\n\t\t\tthis.appendTo = null;\n\t\t});\n\t}\n}\n","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { BUTTON_BEAN_NAME } from \"../constants/bean-name-constants\";\nimport { IButtonConfiguration } from \"../button-configuration.types\";\nimport { IButtonOptionHandler } from \"./button-option-handler.types\";\n\n// function getCallbackForEvent(eventName: string): string {\n// \tif (eventName && eventName.length == 2) {\n// \t\treturn eventName;\n// \t}\n// \treturn `on${eventName[0].toUpperCase()}${eventName.slice(1)}`;\n// }\n\nfunction getHookCallbackForEvent(eventName: string, Hookname: string): string {\n\tif (eventName && eventName.length == 2) {\n\t\treturn eventName;\n\t}\n\treturn `on${Hookname}${eventName[0].toUpperCase()}${eventName.slice(1)}`;\n}\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class ButtonOptionHandler extends EventEmitter implements IButtonOptionHandler {\n\n    @AutoWired(BUTTON_BEAN_NAME.BUTTON_CONFIGURATION) configuration !: IButtonConfiguration;\n\n    onBefore(eventName : string, event?: any) : boolean {\n\t\tconst callbackMethodName = getHookCallbackForEvent(eventName, 'Before') as keyof IButtonConfiguration;;\n\n\t\tif(typeof this.configuration?.[callbackMethodName] === 'function') {\n\t\t\treturn this.configuration[callbackMethodName](event) ?? true;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tonAfter(eventName : string, event?: any) : void {\n\t\tconst callbackMethodName = getHookCallbackForEvent(eventName, 'After') as keyof IButtonConfiguration;;\n\n\t\tif(typeof this.configuration[callbackMethodName] === 'function') {\n\t\t\tthis.configuration[callbackMethodName](event);\n\t\t}\n\t}\n\n    getTabindex():string{\n        return  this.configuration.tabindex ??  \"0\"\n    }\n\n   \n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n    isReadonly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n\tgetClasses(): string[] |string{\n        return this.configuration.classes ?? '';\n    }\n\n    getColor(): 'inherit' | 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning'  {\n        return this.configuration.color ?? 'primary' ;\n    }\n\n    getSize(): 'small' | 'medium' | 'large'  {\n        return this.configuration.size ?? 'small';\n    }\n\n    getVariant(): 'contained' | 'outlined' | 'text'   {\n        return this.configuration.variant ?? 'text' ;\n    }\n\n    getText(): string {\n        return this.configuration.text ?? '';\n    }\n\n\tgetAppendto() : HTMLElement{\n\t\treturn this.configuration.appendto ? this.configuration.appendto : document.body ;\n\t}\n\n\tgetEvent():CallableFunction{\n\t\treturn this.configuration.callback ?? (()=>{});\n\t}\n\n    getAriaLabel(): string{\n        return this.configuration.ariaLabel ?? \"\";\n    }\n\n    getRenderer() : any {\n        return this.configuration.renderer;\n    }\n\n    getRendererParams() : any {\n        return this.configuration.rendererParams;\n    }\n\n    needToShowIcon() : boolean {\n        return this.configuration.showIcon ?? false;\n    }\n\n    needToShowText() : boolean {\n        return this.configuration.showText ?? true;\n    }\n\n    getIcon() : string | undefined{\n        return this.configuration.icon ;\n    }\n    getSvgClasses() :CallableFunction | null {\n        return this.configuration.getSvgClasses?? null;\n    }\n\n}\n","import{AutoWired as e,Bean as t}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as n}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";var r=function(e,t,n,o){var r,a=arguments.length,i=a<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,o);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(i=(a<3?r(i):a>3?r(t,n,i):r(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i};let a=class extends o{getComponentDetails(e,t,o,r){let{componentName:a,frameworkComponent:i,jsComponent:l}=this.getComponentMeta(e,t,o);const s=e=>{const t=this.getBeanInstance(n.USER_COMPONENT_REGISTRY).retrieve(e);t&&(l=t.componentFrameWork?void 0:t.component,i=t.componentFrameWork?t.component:void 0)};if(null!=a&&s(a),null==l&&null==i&&null!=r&&s(r),!l&&!i)return;const m=null==l,c=l||i;return{componentFramework:m,componentClass:c,params:o,propertyName:t,newInstance:()=>this.newInstance(c,m,t,o)}}getComponentMeta(e,t,n){let o=null,r=null,a=null;return(e=>{\"string\"==typeof e?o=e:null!=e&&!0!==e&&(this.getFrameWorkOverrides().isFrameworkComponent(e)?a=e:r=e)})(this.getComponent(e,t)),{componentName:o,frameworkComponent:a,jsComponent:r}}getComponent(e,t){}newInstance(e,t,o,r){var a,i;let l;const s=this.getBeanInstance(n.FRAME_WORK_COMPONENT_WRAPPER),m=this.getBeanInstance(n.COMPONENT_META_DATA_PROVIDER);if(t){const t=m.retrieve(o);l=s.wrap(e,t&&null!==(a=null==t?void 0:t.mandatoryMethodList)&&void 0!==a?a:[],t&&null!==(i=null==t?void 0:t.optionalMethodList)&&void 0!==i?i:[])}else l=new e;return this.initComponent(l,r),l}initComponent(e,t){if(this.context.createBean(e),null!=e.init)return e.init(t)}};r([e(n.BEANS)],a.prototype,\"getBeanInstance\",void 0),a=r([t(n.USER_COMPONENT_HANDLER)],a);export{a as UserComponentHandler};\n//# sourceMappingURL=UserComponentHandler.js.map\n","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IButtonUserComponentHandler } from './button-user-component-handler.types';\nimport { ComponentItemType, IComponentDetails } from '../../../utility/component-detail.types';\nexport const enum PropertyName {\n\tBUTTON_RENDERER = 'buttonRenderer',\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class ButtonUserComponentHandler extends UserComponentHandler implements IButtonUserComponentHandler {\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tgetButtonRendererDetails<T, P>(item: ComponentItemType<T>, params?: P) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails<T, P>(item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\n\tprotected getComponentDetails<T, P>( item: ComponentItemType<T>, propertyName: PropertyName, params?: P, defautName?: string, ): IComponentDetails |undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta<T,P>(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif (\n\t\t\tjsComponent == null &&\n\t\t\tframeworkComponent == null &&\n\t\t\tdefautName != null\n\t\t) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams<T, P>(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance<T,P>(componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta<T, P>( item: ComponentItemType<T>, propertyName: PropertyName, _params?: P, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: T | null= null;\n\t\tlet frameworkComponent: T | null = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: T) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent =\n\t\t\t\t\tthis.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass(\n\t\t\tthis.getComponent<T>(item, propertyName),\n\t\t);\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent<T>(item: ComponentItemType<T>, propertyName: PropertyName): T {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance<T, P>( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: P, ) {\n\t\tlet instance: T;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams<T, P>(item : ComponentItemType<T>, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams<T, P>(item, propertyName, params)};\n    }\n\n    private getUserParams<T, P>(item : ComponentItemType<T>, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.BUTTON_RENDERER:\n                return this.getUserRendererParams<T, P>(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams<T, P>(item : ComponentItemType<T>, params : P) : any {\n        const rendererParams = item.getRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { BUTTON_BEAN_NAME } from \"../constants/bean-name-constants\";\nimport { IButtonAPI } from \"./button-api.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ButtonControllerHandler } from \"./button-handler\";\nimport { IButtonConfiguration } from \"../button-configuration.types\";\n\n@Bean(BUTTON_BEAN_NAME.BUTTON_API)\nexport class ButtonAPI extends EventEmitter implements IButtonAPI {\n    @AutoWired(BUTTON_BEAN_NAME.BUTTON_CONTROLLER_HANDLER) controller !: ButtonControllerHandler;\n    @AutoWired(BUTTON_BEAN_NAME.BUTTON_CONFIGURATION) configuration !: IButtonConfiguration;\n\n    getElement(): HTMLElement | undefined{\n        return this.controller.getButtonCtrl().getElement();\n    }\n    destroy(): void {\n        const buttonctrl = this.controller.getButtonCtrl();\n        if(buttonctrl) {\n            buttonctrl.destroy();\n        }\n        this.context.destroy();\n    }\n\n    updateProperties(properties: any): void {\n        Object.entries(properties).forEach(([key, value]) => {\n            if (value !== undefined) {\n                // Cast key as keyof INumberConfiguration to maintain type safety\n                (this.configuration as any)[key] = value; \n            }\n        });\n\n        this.dispatchEvent({\n            type: \"PROPERTY_CHANGED\",\n            options: properties,\n        });\n\n    }\n}","\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { ComponentMetadataProvider } from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport { UserComponentRegistry } from '@dg/corecomponent/UserComponentRegistry.js';\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"./button-core-component.types\";\nimport { ButtonOptionHandler } from \"./model/button-option-handler\";\nimport { ButtonUserComponentHandler } from \"./model/button-user-component-handler\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ButtonAPI } from \"./model/button-api\";\nimport { ButtonControllerHandler } from \"./model/button-handler\";\n\nlet nextInstanceId = 1;\n\n\nclass CoreComponent {\n    createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID : string; } {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n}\n\n\nexport class ButtonCoreComponent extends CoreComponent {\n\tinitializeButton(configuration: any, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\t\n        const instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\t\tconst beanClasses = this.CreateBeanClasses();\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n\n\t\tcreateUI(context);\n\t}\n\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tlet beanList = [\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tButtonOptionHandler,\n\t\t\tButtonUserComponentHandler,\n\t\t\tComponentMetadataProvider,\n            EventHandler,\n\t\t\tButtonAPI,\n\t\t\tButtonControllerHandler\n\t\t];\n\n\t\treturn new Set(beanList);\n\t}\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IButtonConfiguration } from \"./button-configuration.types\";\nimport { IUserParams } from \"./button-core-component.types\";\nimport { IButtonAPI } from \"./model/button-api.types\";\nimport { BUTTON_BEAN_NAME } from \"./constants/bean-name-constants\";\nimport { ButtonComponent } from \"./core/button-view\";\nimport { ButtonCoreComponent } from \"./ButtonCoreComponent\";\n\nexport class Button {\n\tpublic api: IButtonAPI | undefined;\n\tconstructor(configuration: IButtonConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(BUTTON_BEAN_NAME.BUTTON_API) as IButtonAPI;\n\t\t\tcontext.createBean(new ButtonComponent(configuration.appendTo));\n\t\t};\n\t\tnew ButtonCoreComponent().initializeButton(configuration, params, createUI);\n\t}\n}","import { Button } from \"../../../../button/src/button\";\nimport { IButtonConfiguration } from \"../../../../button/src/button-configuration.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nexport class ButtonRenderer implements ICustomRenderer{\n    private params : any;\n    private button !:any;\n    \n    init(params : any) {\n        this.params = params;\n        const configuration = this.createConfiguration();\n        this.button = new Button(configuration);\n    }\n\n    getElement(): HTMLElement {\n        return this.button.api.getElement();\n    }\n\n    private createConfiguration() : IButtonConfiguration {\n        return {\n            text    : this.params.label,\n            callback: this.params.callback,\n            icon    : this.params.icon,\n            showIcon: this.params.showIcon,\n            showText: this.params.showText,\n            disabled: this.params.disabled,\n            ariaLabel : this.params.ariaLabel,\n            classes : this.params.classes\n        }\n    }\n\n    destroy() : void {\n        this.button.api.destroy();\n        this.button = null;\n        this.params = null;\n    }\n}","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { CalendarButtonType } from \"./calendar-button.types\";\n\n\n\n\n\n\nexport class CalendarButtonController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: any;\n    \n    private comp !: CalendarButtonType;\n\n    // private ownerState : {disabled : boolean|null} = {disabled : null,};\n    setComp(comp : CalendarButtonType) : void {\n        this.comp = comp;\n        this.applyState();\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.applyState.bind(this));\n    }\n\n    private applyState() : void {\n\n        // const ownerState = this.getOwnerState();\n\n        // if(this.ownerState.disabled === ownerState.disabled ) {\n        //     return;\n        // }\n\n\n        // this.ownerState = ownerState;\n        // const classes = useUtilityClasses(ownerState);\n        // this.comp.addOrRemoveCssClass(classes.root, true);\n\n        this.setRendererDetails();\n    }\n\n    private setRendererDetails() : void {\n        \n        const params          = this.createRendererParams();\n        const rendererWrapper = this.createRendererWrapper();\n        const compDetails     = this.userComponentHandler.getButtonRendererDetails(rendererWrapper, params);\n\n        this.comp.setRendererDetails(compDetails);\n    }\n\n    private createRendererParams() {\n        const params = this.comp.getParams() ?? {};\n        return {\n            parentElement: this.comp.getElement(),\n            callback     : (event :any) => {\n                event.stopImmediatePropagation();\n                params.callback && params.callback(event)\n            },\n            showIcon     : true,\n            showText     : false,\n            ariaLabel    : params.getRole(),\n            label        : params.label,\n            icon         : params.icon,\n            classes      : params.classes,  \n            disabled : params.disabled,\n\t\t};\n    }\n\n    private createRendererWrapper() {\n        const {getRenderer, getRendererParams} = this.comp.getParams() ?? {};\n        return {\n\t\t\tgetRenderer          : () => getRenderer ? getRenderer() : undefined,\n\t\t\tgetUserRendererParams: () => getRendererParams ? getRendererParams() : undefined\n\t\t}\n    } \n\n    // private getOwnerState() {\n    //     const {  getRole, icon } = this.comp.getParams() ?? {};\n    //     return {\n    //         role : getRole(),\n    //         icon : icon\n    //     }\n    // }\n\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n\n  \n\n\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { CalendarButtonController } from \"./calendar-button-controller\";\nimport { CalendarButtonType } from \"./calendar-button.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\nconst DatePickerButtonTemplate = () => {\n    // const div = document.createElement(\"div\");\n    // div.innerHTML = '<div></div>';\n    // return div.firstChild as HTMLElement;\n\n\treturn document.createElement(\"div\");\n};\nexport class CalendarButtonComponent extends Component {\n\tprivate renderer: any;\n\tprivate rendererElement: any;\n    private params : any;\n\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.setTemplate(DatePickerButtonTemplate());\n\t\tconst comp : CalendarButtonType = {\n            addOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n            setRendererDetails : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getElement         : () => this.getGui(),\n            getParams          : () => this.params,\n\t\t\t\n\t\t};\n\n\t\tconst controller = this.createBean(new CalendarButtonController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className;\n\t}\n\tprotected destroy(): void {\n\t\t// super.destroy();\n\t\tthis.getGui().remove()\n\n}\n\n\t\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { CalendarComponentHandlerTypes } from './calendar-user-component-handler.types';\n\nexport const enum PropertyName {\n\tBUTTON_RENDERER      = 'buttonRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class CalendarComponentHandler extends UserComponentHandler implements CalendarComponentHandlerTypes {\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\t\n\tprotected getComponentDetails( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const lookUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlookUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlookUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(_item : any, propertyName : PropertyName, _params : any) : any {\n        switch(propertyName) {\n            default:\n                return {};\n        }\n\n    }\n\n    // private getUserRendererParams(item : any, params : any) : any {\n    //     const rendererParams = item.getUserRendererParams();\n\n    //     let rendererParamsResult : any = {};\n\n    //     if (typeof rendererParams == 'function') {\n\t// \t\trendererParamsResult = rendererParams(params);\n\t// \t} else if (typeof rendererParams == 'object') {\n\t// \t\trendererParamsResult = rendererParams;\n\t// \t}\n\n    //     return rendererParamsResult;\n    // }\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nexport class AbstractController<T> extends EventEmitter{\n    public component !: T | null ;\n    setComponent(component : T){\n        this.component = component;\n        this.init();\n    }\n    init(){      \n    }\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\nexport function getCalendarRootUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('date-picker', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","export const EVENT_NAME = {\n    KEYDOWN  : 'keydown',\n    FOCUS    : 'focus',\n    BLUR     : 'blur',\n    MOUSEDOWN: 'mousedown',\n    CLICK    : 'click'\n}\n\nexport const CALENDAR_CUSTOM_EVENTS ={\n\n    DAYS_UPATED                   : 'days_upated',\n    MONTH_UPDATED                 : 'month_updated',\n    YEAR_UPDATED                  : 'year_updated',\n    NAVBAR_RERENDER               : 'navbar_rerender',\n    CONTAINER_RERENDER            : 'container_render',\n    RERENDER                      : 'rerender',\n    SHOWYEARBTN                   : 'showYearBTN',\n    HIDEYEARBTN                   : 'hideYearBTN',\n    HIDEWEEKDAY                   : 'hideWeekday',\n    SHOWWEEKDAY                   : 'showWeekday',\n    UPDATE_TIME                   : \"update_time\",\n    SET_FOCUS_TO_THE_TITLE_ELEMENT: 'setFocusedToTitleElement',\n    PROPERTY_UPDATE               : 'PROPERTY_UPDATE',\n    VALUE_UPDATE                  : 'VALUE_UPDATE'\n\n}","import { composeClasses } from \"@dg/utils\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport {  CalendarWeekDayViewType } from \"./calendar-weekday-view.types\";\nimport { getCalendarRootUtilityClass } from \"../root/calendar-root-classes\";\nimport { AutoWired, setAriaRole } from \"@dg/corecomponent\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { CalendarViewManagerTypes } from \"../model/calendar-view-manager.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'weekdaycontainer',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass)\n}\n\n\n\n\nexport class CalendarWeekDayController extends AbstractController<CalendarWeekDayViewType>{\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager !:CalendarViewManagerTypes;\n\n\n\n    \n   init(){\n    this.applyClassNames();\n    this.setRole();\n    this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.HIDEWEEKDAY, this.hideWeekDay.bind(this));\n    this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.SHOWWEEKDAY, this.showWeekDay.bind(this));\n\n\n\n    }\n    \n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    setRole(){\n        const element = this.component?.getElement() as HTMLElement;\n        setAriaRole(element,\"grid\")\n    }\n\n    getProperty(){\n       return{\n           weekday : this.viewManager.getWeekdayRendereringData()\n       }\n    }\n\n    hideWeekDay(){\n        (this.component?.getElement() as HTMLElement).style.display = \"none\";\n    }\n    showWeekDay(){\n        (this.component?.getElement()as HTMLElement).style.display = \"block\";\n    }\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n}","\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarWeekDayViewType } from './calendar-weekday-view.types';\nimport { CalendarWeekDayController } from './calendar-weekday-controller';\nimport { composeClasses } from '@dg/utils';\nimport { getCalendarRootUtilityClass } from '../root/calendar-root-classes';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'weekday--names',\n\t\t\tmodifiers : [\n                \n            ]\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass)\n}\n\n\nfunction CalendarWeekDayTemplate(props:any,className:string): HTMLElement {\n\n\tconst div = document.createElement('div');\n\tconst dummy = document.createElement('div');\n\n\tconst weekdays = document.createElement('div');\n\tweekdays.setAttribute('role', 'row');\n\tweekdays.className = 'dg-date-picker__weekday';\n\n\tfor (let i = 0; i < props.weekday.length; i++){\n\t\tconst weekday = document.createElement('div');\n\t\tweekday.setAttribute('role','columnheader')\n        weekday.innerText = props.weekday[i];\n\t\tweekday.className = className;\n        weekdays.appendChild(weekday);\n\n\t}\n\n\tdummy.appendChild(weekdays);\n\tdiv.appendChild(dummy);\n\treturn div.firstChild as HTMLElement;\n}\n\nexport class CalendarWeekDayView extends Component {\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:CalendarWeekDayViewType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new CalendarWeekDayController());\n\n        const classes = useUtilityClasses()\n        const props = controller.getProperty()\n\n        const template = CalendarWeekDayTemplate(props,classes.container)\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprotected destroy(): void {\n        super.destroy();\n\t\tthis.getGui().remove();\n    }\n\n}","import { composeClasses } from \"@dg/utils\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport {  CalendarCalendarViewType } from \"./calendar-container-view.types\";\nimport { getCalendarRootUtilityClass } from \"../root/calendar-root-classes\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { CalendarViewManagerTypes } from \"../model/calendar-view-manager.types\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'calendar',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass)\n}\n\n\n\n\nexport class CalendarCalendarController extends AbstractController<CalendarCalendarViewType>{\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager !:CalendarViewManagerTypes;\n\n    private parentComponent : Component | undefined\n   init(){\n    this.applyClassNames();\n    this.parentComponent = this.component?.getParentComponent();\n    this.setTabindex();\n    \n\n    }\n    private setTabindex(){\n\t\tconst element = this.component?.getElement() as HTMLElement;\n        element.setAttribute(\"tabindex\", \"0\");\n\t}\n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    getProperty(){\n        return {\n            dayView: !this.viewManager.isMonthView() && !this.viewManager.isYearView(),\n\n        }\n    }\n\n\n    rerender():void{\n        this.component?.rerender(this,this.parentComponent);\n        this.applyClassNames();\n\n    }\n    protected destroy(): void {\n        super.destroy();\n        \n    }\n\n}","\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarCalendarViewType } from './calendar-container-view.types';\nimport { CalendarCalendarController } from './calendar-container-controller';\n\n\nfunction CalendarWithWeekDay(): HTMLElement {\n    const container = document.createElement('div');\n    const weekday = document.createElement('calendar-weekday');\n    const cells = document.createElement('calendar-cells');\n    container.appendChild(weekday);\n    container.appendChild(cells);\n    return container;\n}\n\nfunction CalendarWithoutWeekDayCalendarTemplate(): HTMLElement {\n    const container = document.createElement('div');\n    const cells = document.createElement('calendar-cells');\n    container.appendChild(cells);\n    return container;\n}\n\nexport class CalendarCalendarView extends Component {\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:CalendarCalendarViewType  = this.getComponent();\n\n\t\tconst controller = this.createManagedBean(new CalendarCalendarController());\n\n        this.renderTemplate(controller,component);\n      \n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): CalendarCalendarViewType{\n\t\treturn {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t\tdestroy : ()=>this.destroy(),\n\t\t\trerender: (controller,comp) => this.rerender(controller,comp),\n\t\t\tgetParentComponent: () => this.getParentComponent(),\n\t\t}\n\n\n\t}\n\n\tprivate renderTemplate(controller: CalendarCalendarController, _component: CalendarCalendarViewType) {\n\t\tconst props = controller.getProperty()\n        const template = props.dayView ? CalendarWithWeekDay() :CalendarWithoutWeekDayCalendarTemplate()\n        this.setTemplate(template);\n    }\n\n    rerender(controller:CalendarCalendarController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller,component);\n        comp.appendChild(this.getGui())\n\t\tcontroller.setComponent(component);\n    }\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}","import { composeClasses } from \"@dg/utils\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport {  CalendarContainerViewType } from \"./calendar-day-container-view.types\";\nimport { getCalendarRootUtilityClass } from \"../root/calendar-root-classes\";\nimport { AutoWired, setAriaRole } from \"@dg/corecomponent\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { CalendarViewManagerTypes } from \"../model/calendar-view-manager.types\";\n\n\n\nconst useUtilityClasses = (ownerState: any) => {\n    const { isMonthView, isYearView } = ownerState;\n    const slot = (isMonthView || isYearView) ? (isMonthView ? 'monthcontainer':'yearcontainer') : 'daycontainer'\n\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot,\n\t\t\tmodifiers : [\n                \n            ]\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass)\n}\n\n\n\n\nexport class CalendarDayContainerontroller extends AbstractController<CalendarContainerViewType>{\n\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager !:CalendarViewManagerTypes;\n    private parentComponent !: any;\n    \n   init(){\n    this.applyClassNames();\n    this.setRole();\n    this.parentComponent = this.component?.getParentComponent();\n    this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.RERENDER, this.rerender.bind(this));\n    }\n    \n    private applyClassNames(){\n        const ownerState = this.ownerState();\n        const classes = useUtilityClasses(ownerState);\n        this.component?.addOrRemoveCssClass(classes.container);\n        // if(!ownerState.isMonthView && !ownerState.isYearView){\n        //          this.component?.getElement().classList.add('zeffects--zoomin');\n\n        // }\n    }\n\n    private ownerState(){\n        return {\n            isMonthView : this.viewManager.isMonthView(),\n            isYearView : this.viewManager.isYearView(),\n        }\n    }\n\n\n     getProperty(){\n        return{\n         weekCount : this.viewManager.getRowCount(),\n         dayCount :  this.viewManager.getColumnCount(),\n \n        }\n     }\n\n     private setRole(){\n        const element = this.component?.getElement() as HTMLElement;\n        setAriaRole(element,\"grid\")\n     }\n\n    private rerender():void{\n        this.viewManager.resetCounter();\n        this.viewManager.updateRenderingDetails();\n        this.component?.rerender(this,this.parentComponent);\n        this.applyClassNames();\n\n    }\n\n    protected destroy(): void {\n        super.destroy();\n        \n    }\n\n}","\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarContainerViewType } from './calendar-day-container-view.types';\nimport { CalendarDayContainerontroller } from './calendar-day-container-controller';\nimport { composeClasses } from '@dg/utils';\nimport { getCalendarRootUtilityClass } from '../root/calendar-root-classes';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'row',\n\t\t\tmodifiers : [\n            ]\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass)\n}\n\n\nfunction CalendarDayContainerTemplate(props:any,className:string): HTMLElement {\n\n\tconst div = document.createElement('div');\n\tconst cells = document.createElement('div');\n\n    for (let i = 0; i < props.weekCount; i++) {\n        const row = document.createElement('div');\n        row.className = className\n        row.setAttribute('role','row');\n\n        for (let j = 0; j < props.dayCount ; j++) {\n            const cell = document.createElement('calendar-cell');\n            row.appendChild(cell);    \n        }\n        cells.appendChild(row);\n    }\n\t\n\tdiv.appendChild(cells);\n\treturn div.firstChild as HTMLElement;\n}\n\n\n\nexport class CalendarDayContainerView extends Component {\n\n    \n    @PostConstruct()\n    init(): void {\n        const component: CalendarContainerViewType = this.getComponent();\n\n        const controller = this.createManagedBean(new CalendarDayContainerontroller());\n        this.renderTemplate(controller,component);\n        controller.setComponent(component);\n\n        \n    }\n\n    getComponent(): CalendarContainerViewType {\n        return {\n                getElement: () => this.getGui(),\n                addOrRemoveCssClass: (className: string) => this.addOrRemoveCSSClass(className),\n                rerender: (controller,comp) => this.rerender(controller,comp),\n                getParentComponent: () => this.getParentComponent(),\n                destroy : () => this.destroy()\n            }\n         \n    }\n\n    private addOrRemoveCSSClass(className: string): void {\n        const element = this.getGui()\n        element && (element.className = className);\n    }\n\n    private renderTemplate(controller: CalendarDayContainerontroller, _component: CalendarContainerViewType) {\n        const classes = useUtilityClasses();\n        const targetClass = classes.container.split(' ').find(cls => cls.includes('row')) as string;\n        const props = controller.getProperty();\n\n        const template = CalendarDayContainerTemplate(props, targetClass);\n\n        this.setTemplate(template);\n       \n\n    }\n\n    rerender(controller:CalendarDayContainerontroller,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller,component);\n        comp.appendChild(this.getGui())\n    }\n\n\tprotected destroy(): void {\n\t\t// super.destroy();\n        // this.parentComponent?.getFocusableElement().focus();\n\t\tthis.getGui().remove();\n\n\t}\n}\n","import { AutoWired, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DayDetails, ICalendarDataManager } from \"./calendar-data-manager.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { CalendarViewManagerTypes } from \"./calendar-view-manager.types\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { Dayjs } from \"dayjs\";\n\n\n\n\nexport const CALENDAR_VIEW_TYPE = {\n    MONTH: 'month',\n    YEAR : 'year',\n    DAY  : 'day',\n   \n}\n\n\n@Bean(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER)\nexport class CalendarViewManager extends EventEmitter implements CalendarViewManagerTypes {\n\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_MODEL) protected model !:ICalendarDataManager;\n\n\n    private viewType !     : string;\n    private renderingData !: DayDetails[];\n    private counter        : number = 0;\n    private pickerType !: string;\n\n    private rowCount : number    = 0;\n    private columnCount : number = 0;\n\n    private yearTitle : string = \"\";\n\n\n    @PostConstruct()\n    init(){\n        this.viewType = this.optionsHandler.getViewType();\n        this.pickerType = this.optionsHandler.getPickerType();\n\n        if(this.pickerType === CALENDAR_VIEW_TYPE.MONTH){\n           this.viewType = CALENDAR_VIEW_TYPE.MONTH\n        }else if(this.pickerType === CALENDAR_VIEW_TYPE.YEAR){\n            this.viewType = CALENDAR_VIEW_TYPE.YEAR\n        }\n        this.updateRenderingDetails();\n\n\n\n\n   }\n\n   getViewType(): string{\n    return this.viewType;\n   }\n\n   setViewType(viewType : string):void{\n            this.viewType = viewType;\n   }\n\n   updateRenderingDetails():void{\n    if(CALENDAR_VIEW_TYPE.DAY === this.viewType){\n        this.renderingData = this.model.getRenderDetailsforDay();\n        this.rowCount      = this.model.getNumberOfWeeksInMonth();\n        this.columnCount   = this.model.getNumberOfDaysInWeek();\n        this.yearTitle     = `${this.model.getSelectedYear()}`\n    }else if(CALENDAR_VIEW_TYPE.MONTH === this.viewType){\n        this.renderingData = this.model.getMonthNames();\n        this.rowCount      = 3;\n        this.columnCount   = 4;\n        this.yearTitle     = `${this.model.getSelectedYear()}`\n\n\n    }else if(CALENDAR_VIEW_TYPE.YEAR === this.viewType){\n        this.rowCount      = 3;\n        this.columnCount   = 4;\n        this.renderingData = this.model.getRenderDetailsforYear();\n        this.yearTitle     = `${this.renderingData[0].value} - ${this.renderingData[this.renderingData.length - 1].value}`\n        this.dispatchEvent({\n            type : CALENDAR_CUSTOM_EVENTS.YEAR_UPDATED\n        })\n    }\n\n   }\n\n   getSelectedYearTitle() : string {\n        return this.yearTitle;\n   }\n\n   getRenderingDetails(): DayDetails {\n        if(this.counter >= this.renderingData.length){\n            this.counter = 0; \n        }\n        return this.renderingData[this.counter];\n    }\n\n    updateCounter(): void {\n        this.counter = this.counter + 1;\n\n\n    }\n\n    getRowCount(): number {\n        return this.rowCount;\n    }\n\n    getColumnCount(): number {\n        return this.columnCount;\n    }\n\n    resetCounter(): void {\n        this.counter = 0;\n    }\n\n    isMonthView(): boolean{\n        return this.viewType === CALENDAR_VIEW_TYPE.MONTH\n    }\n\n    isYearView(): boolean{\n        return this.viewType === CALENDAR_VIEW_TYPE.YEAR\n    }\n\n    getRendereringData():DayDetails[]{\n        return this.renderingData;\n    }\n\n    getWeekdayRendereringData():string[]{\n        return this.model.getWeekNames();\n    }\n    \n\n    setMonth(month: number): void {\n        this.model.setMonth(month);\n        this.model.setSelectedMonth(month)\n        this.updateRenderingDetails();\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.RERENDER});\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n    }\n    \n\n    setDay(day:number):void { \n        this.model.setDay(day);\n        this.model.setSelectedDay(day);\n        this.updateRenderingDetails();\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.RERENDER});\n    }\n\n    setYear(year : number): void{\n        this.model.setYear(year);\n        this.model.setSelectedYear(year);\n        this.updateRenderingDetails();\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.RERENDER});\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n    }\n\n    setDate(date : string | Date | Dayjs):void{\n        this.model.setDate(date);\n        this.model.setSelectedDate(date);\n        this.updateRenderingDetails();\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.RERENDER});\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n        this.dispatchEvent({type : CALENDAR_CUSTOM_EVENTS.UPDATE_TIME});\n    }\n\n\n\n\n   \n\n\n\n\n\n}","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import { composeClasses } from \"@dg/utils\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { CalendarNavBarViewType } from \"./calendar-nav-bar-view.types\";\nimport { ICalendarDataManager } from \"../model/calendar-data-manager.types\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { CALENDAR_VIEW_TYPE } from \"../model/calendar-view-manager\";\nimport { getCalendarRootUtilityClass } from \"../root/calendar-root-classes\";\nimport { CalendarViewManagerTypes } from \"../model/calendar-view-manager.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\n\nexport const Custom_Min_Year = 1;\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'navigation',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass)\n}\n\n\n\n// const useUtilityClassesForButton = () => {\n// \tconst slots = {\n// \t\tcontainer : {\n// \t\t\tslot : 'button',\n// \t\t\tmodifiers : [\n                \n//             ]\n// \t\t}\n// \t}\n\n// \treturn composeClasses(slots, getCalendarRootUtilityClass)\n// }\n\n\n\nexport class CalendarNavBarController extends AbstractController<CalendarNavBarViewType>{\n\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_MODEL) protected model !:ICalendarDataManager;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager !:CalendarViewManagerTypes;\n\n    private parentComponent!: any;\n    \n   init(){\n        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED, this.setMonth.bind(this));\n        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.YEAR_UPDATED, this.setYear.bind(this));\n        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.NAVBAR_RERENDER, this.rerender.bind(this));\n        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.HIDEYEARBTN, this.hideYearBtns.bind(this));\n        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.SHOWYEARBTN, this.showYearBtns.bind(this));\n        this.parentComponent = this.component?.getParentComponent();\n        this.setAriaAttributes()\n         this.applyClassNames();\n         this.registerEventListener();\n         this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.SET_FOCUS_TO_THE_TITLE_ELEMENT, this.setFocusToTheTitleElement.bind(this));\n        //  this.disableNavIfYearExceedsMax()\n         \n    }\n\n    private setFocusToTheTitleElement() {\n        this.component?.getTitleElement().focus();\n    }\n    \n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    getProperty(){\n       return{\n            month: this.model.getSelectedMonth(),\n            year : this.viewManager.getSelectedYearTitle(),\n            viewType : this.viewManager.getViewType(),\n       }\n    }\n\n    setAriaAttributes():void{\n        const monthElement = this.component?.getMonthElement();\n        const yearElement = this.component?.getYearElement();\n        if(monthElement){\n            monthElement && monthElement.setAttribute('aria-label',this.model.getSelectedMonth());\n            monthElement && monthElement.setAttribute('aria-live','polite');\n            monthElement && monthElement.setAttribute('aria-atomic','true');\n        }\n\n        if(yearElement){\n            yearElement && yearElement.setAttribute('aria-label',this.viewManager.getSelectedYearTitle());\n            yearElement && yearElement.setAttribute('aria-live','polite');\n            yearElement && yearElement.setAttribute('aria-atomic','true');\n    \n\n        } \n\n    }\n\n    getParamsProperty() {\n        return {\n\t\t\tpreviousMonthButton: {\n                getRole       : () => 'previousMonth',\n                callback         : () => this.goToPreviousMonth(),\n                icon : \"dg__svg--backward\",\n                disabled : this.model.isMonthInDangerZoneForPast()\n\n\t\t\t},\n\n\t\t\tnextMonthButton: {\n                getRole       : () => 'nextMonth',\n                callback         : () => this.goToNextMonth(),\n                icon : \"dg__svg--forward\",\n                disabled : this.model.isMonthInDangerZoneForFuture()\n\n\n\t\t\t},\n            previousYearButton: {\n                getRole       : () => 'previousYear',\n                callback         : () => this.goToPreviousYear(),\n                icon : \"dg__svg--fastbackward\",\n                disabled : this.model.isYearInDangerZoneForPast()\n\n\t\t\t},\n\n\t\t\tnextYearButton: {\n                getRole       : () => 'nextYear',\n                callback         : () => this.goToNextYear(),\n                icon : \"dg__svg--fastforward\",\n                disabled : this.model.isYearInDangerZoneForFuture()\n\n\n\t\t\t},\n\t\t};\n    }\n\n    goToPreviousMonth():void{\n        const isBefore = this.model.isBeforeMonth();\n        if(isBefore){\n            return\n        }\n        const viewType = this.viewManager.getViewType();\n        if(viewType === CALENDAR_VIEW_TYPE.MONTH){\n            return this.goToPreviousYear();\n        }else if(viewType === CALENDAR_VIEW_TYPE.YEAR){\n            return this.goToBackForwardYear();\n        }\n\n\n        this.model.goToPreviousMonth();\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.RERENDER});\n\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n        this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'})\n        this.checkToDisableNavIfLimitExceedsMax()\n\n    }\n    goToNextMonth():void{\n        const isAfter = this.model.isAfterMonth();\n        if(isAfter){\n            return\n        }\n        const viewType = this.viewManager.getViewType();\n        if(viewType === CALENDAR_VIEW_TYPE.MONTH){\n            return this.goToNextYear();\n        }else if(viewType === CALENDAR_VIEW_TYPE.YEAR){\n            return this.goToFastForwardYear();\n        }\n\n       \n\n        this.model.goToNextMonth();\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.RERENDER});\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n        // this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n        this.checkToDisableNavIfLimitExceedsMax();\n\n\n    }\n\n    goToPreviousYear():void{\n        const isBefore = this.model.isBeforeYear();\n        if(isBefore){\n            return\n        }\n        const viewType = this.viewManager.getViewType();\n\n        if(viewType === CALENDAR_VIEW_TYPE.YEAR){\n            return this.goToFastForwardYear();\n        }\n\n        this.model.goToPreviousYear();\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.RERENDER});\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n       \n        this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n        this.checkToDisableNavIfLimitExceedsMax()\n\n    }\n\n    goToNextYear():void{\n        const isAfter = this.model.isAfterYear();\n        if(isAfter){\n            return\n        }\n        const viewType = this.viewManager.getViewType();\n\n        if(viewType === CALENDAR_VIEW_TYPE.YEAR){\n            return this.goToFastForwardYear();\n        }\n\n        this.model.goToNextYear();\n        this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.RERENDER });\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n        this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n        this.checkToDisableNavIfLimitExceedsMax()\n\n\n    }\n\n    goToFastForwardYear():void{\n        const renderingData = this.viewManager.getRendereringData();\n\t\tconst year = renderingData[renderingData.length - 1].value;\n\t\tthis.model.setYear(year);\n\t\tthis.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED });\n\t\tthis.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.RERENDER });\n        this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'})\n\n    }\n\n    goToBackForwardYear(): void {\n        let year = this.viewManager.getRendereringData()[0].value;\n        if (year < Custom_Min_Year) {\n            year = Custom_Min_Year;\n        }\n        this.model.setYear(year);\n        this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED });\n        this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.RERENDER });\n        this.dispatchEvent({ type: 'FOCUS_INPUT_ELEMENT' });\n    }\n    \n\n\n\n    setMonth(){\n        if(this.optionsHandler.getPickerType() === \"month\" || this.optionsHandler.getPickerType() === \"year\"){\n            (this.component?.getYearElement() as HTMLElement).textContent = this.viewManager.getSelectedYearTitle();\n            this.setAriaAttributes();    \n            return\n        }\n        (this.component?.getMonthElement()as HTMLElement).textContent = this.model.getSelectedMonth();\n\t\t(this.component?.getYearElement()as HTMLElement).textContent = this.viewManager.getSelectedYearTitle();\n\t\tthis.setAriaAttributes();\n    }\n\n    setYear() {\n\t\t(this.component?.getYearElement()as HTMLElement).textContent = this.viewManager.getSelectedYearTitle();\n        this.setAriaAttributes();\n    }\n\n\n    registerEventListener(): void {\n        const element = this.component?.getTitleElement() as HTMLElement;\n\n        this.addListener(element, 'click',(event : PointerEvent)=>{\n            event.stopImmediatePropagation();\n\n            const viewType = this.viewManager.getViewType();\n             if(viewType === CALENDAR_VIEW_TYPE.DAY){\n                this.viewManager.setViewType(CALENDAR_VIEW_TYPE.MONTH);\n                this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.HIDEWEEKDAY});\n                this.component?.getTitleElement().focus()\n\n\n             }else if(viewType === CALENDAR_VIEW_TYPE.MONTH){\n                this.viewManager.setViewType(CALENDAR_VIEW_TYPE.YEAR);\n                this.component?.getTitleElement().focus()\n\n                // this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.HIDEWEEKDAY});\n\n             }\n             else if(viewType === CALENDAR_VIEW_TYPE.YEAR){\n                this.component?.getTitleElement().focus()\n\n                return\n             }\n\n            \n            this.viewManager.resetCounter();\n            this.viewManager.updateRenderingDetails();\n            this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.HIDEYEARBTN});\n            this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.RERENDER});\n            this.component?.getTitleElement().focus();\n            this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n\n\n        })\n        \n    }\n\n    rerender():void{\n\n        this.component?.rerender(this,this.parentComponent);\n        this.applyClassNames();\n\n    }\n\n    hideYearBtns():void{\n        const { previousYearButton, nextYearButton } = this.component?.getMonthYearButtons() as { previousYearButton :any, nextYearButton: any};\n        const monthElement = this.component?.getMonthElement() as HTMLElement;\n\n        previousYearButton.eGui.style.display = 'none'\n        nextYearButton.eGui.style.display     = 'none';\n\n        monthElement.style.display       = 'none';\n    }\n\n    showYearBtns():void{\n        const { previousYearButton, nextYearButton } = this.component?.getMonthYearButtons() as { previousYearButton :any, nextYearButton: any};;\n        const monthElement = this.component?.getMonthElement() as HTMLElement;\n\n        previousYearButton.eGui.style.display = 'block';\n        nextYearButton.eGui.style.display     = 'block';\n        monthElement.style.display       = 'block';\n\n    }\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n    checkToDisableNavIfLimitExceedsMax(){\n        const isYearInDangerZoneForFuture = this.model.isYearInDangerZoneForFuture();\n        const isYearInDangerZoneForPast = this.model.isYearInDangerZoneForPast();\n        const isMonthInDangerZoneForFuture = this.model.isMonthInDangerZoneForFuture();\n        const isMonthInDangerZoneForPast = this.model.isMonthInDangerZoneForPast();\n\n        const { previousYearButton, nextYearButton, previousMonthButton, nextMonthButton  } = this.component?.getMonthYearButtons() as {previousYearButton:any,nextYearButton    : any, previousMonthButton : any, nextMonthButton:any};\n\n        if(isYearInDangerZoneForFuture){\n            nextYearButton.renderer.button.api.updateProperties({disabled : true});\n        }else{\n            nextYearButton.renderer.button.api.updateProperties({disabled : false});\n        }\n\n        if(isYearInDangerZoneForPast){\n            previousYearButton.renderer.button.api.updateProperties({disabled : true});\n        }else{\n            previousYearButton.renderer.button.api.updateProperties({disabled : false});\n        }\n\n\n        if(isMonthInDangerZoneForFuture){\n            nextMonthButton.renderer.button.api.updateProperties({disabled : true});\n        }else{\n            nextMonthButton.renderer.button.api.updateProperties({disabled : false});\n        }\n\n\n\n        if(isMonthInDangerZoneForPast){\n            previousMonthButton.renderer.button.api.updateProperties({disabled : true});\n        }else{\n            previousMonthButton.renderer.button.api.updateProperties({disabled : false});\n        }\n\n\n    \n\n    }\n\n\n\n\n\n\n}","import dayjs, { Dayjs, UnitType } from \"dayjs\";\nimport { DayDetails, ICalendarDataManager } from \"./calendar-data-manager.types\";\n// import { ICalendarConfiguration } from \"../../calendar-configuration.types\";\nimport { Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { Custom_Min_Year } from \"../calendar-nav-bar/calendar-nav-bar-controller\";\n\n\n\nconst DEFUALT_FORMAT_MAP = {\n    MMMM_D_YYYY_hh_mm_ss_A: 'MMMM D, YYYY hh:mm:ss A',\n    MMMM_D_YYYY           : 'MMMM D, YYYY'\n  }\n  export interface FormatType{\n             year       ?: string,\n             month      ?: string,\n             day        ?: string,\n             date       ?: string,\n             hour       ?: string,\n             minute     ?: string,\n             millisecond?: string,\n             second     ?: string,\n             \"/\"        ?: string,\n             \"-\"        ?: string,\n             \".\"        ?: string,\n             \",\"        ?: string,\n    meridian ?           : string\n}\nexport const formatMap = {\n    y  : 'year',\n    Y  : 'year',\n    D  : 'date',\n    M  : 'month',\n    d  : 'day',\n    H  : 'hour',\n    h  : 'hour',\n    m  : 'minute',\n    s  : 'second',\n    S  : 'millisecond',\n    A  : 'meridian',\n    \"/\": \"separator\",\n    \"-\": \"separator\",\n    \".\": \"separator\",\n    \",\": \"separator\",\n    \":\": \"separator\",\n    \" \": \"separator\",\n};\n@Bean(CALENDAR_BEAN_NAME.CALENDAR_MODEL)\nexport class CalendarDataManager extends EventEmitter implements ICalendarDataManager {\n    \n    private currentDate! : dayjs.Dayjs;\n    // private config!      : ICalendarConfiguration;\n    private monthFormat !: string;\n    private yearFormat !: string;\n    private weekDayFormat !: string;\n    private formatMap       : FormatType = {};\n    private minDate! : Dayjs | null;\n    private maxDate! : Dayjs | null;\n\n    private locale !: string;\n    private selectedDate! : Dayjs;\n    private format !: string;\n    \n\n    private counter: number = 0;\n    private CurrentMonthDays !: DayDetails[];\n    private dateSelected : boolean = false\n    // private renderDetails\n\n    @PostConstruct()\n    init(): void {\n        // this.config = this.optionsHandler.getConfiguration();\n        // const format = this.config.format;\n        // const date = this.optionsHandler.getInitialDate();\n        // this.currentDate = this.selectedDate = dayjs(date,format);\n        this.initDate();\n        this.selectedDate = this.currentDate;\n        this.setMaxDate();\n        this.setMinDate()\n\n        this.monthFormat = this.optionsHandler.getMonthFormat();\n        this.yearFormat = this.optionsHandler.getYearFormat();\n        this.weekDayFormat = this.optionsHandler.getWeekDayFormat();\n        this.locale = this.optionsHandler.getLocale();\n        this.generateCurrentMonthDays(this.selectedDate,this.currentDate);\n        this.initializeFormatArrays();\n\n        this.addListener(this.eventHandler,CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE,this.setMaxDate.bind(this));\n        this.addListener(this.eventHandler,CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE,this.setMinDate.bind(this));\n        this.addListener(this.eventHandler,CALENDAR_CUSTOM_EVENTS.VALUE_UPDATE,this.setDate.bind(this));\n        this.addListener(this.eventHandler,CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE,this.updateCurrentMonthDays.bind(this));\n    }\n    initDate(){\n         this.format = this.optionsHandler.getFormat();\n\n        let date = this.optionsHandler.getInitialDate();\n        if(date){\n            this.dateSelected = true\n        }\n        // date ? date = date : date = dayjs().set('month',0).set('date',1);\n        if(date) {\n            date = date;\n        }else {\n            date = dayjs().startOf(\"day\");\n        }\n        if(date){\n           if(this.format){\n                if(typeof date === 'string'){\n                    this.currentDate  = dayjs(date,this.format);\n                }else{\n                    const timeStampDate = dayjs(date).format(this.format);\n                    this.currentDate= dayjs(timeStampDate,this.format);\n                }\n                // this.format = format;\n           }else{\n            const type = this.optionsHandler.getType();\n\n            if(type === 'datefield' || type === \"datepicker\"){\n                this.currentDate = dayjs(date,DEFUALT_FORMAT_MAP.MMMM_D_YYYY);\n                // this.format = DEFUALT_FORMAT_MAP.MMMM_D_YYYY;\n            }else{\n                this.currentDate = dayjs(date,DEFUALT_FORMAT_MAP.MMMM_D_YYYY_hh_mm_ss_A);\n                // this.format = DEFUALT_FORMAT_MAP.MMMM_D_YYYY_hh_mm_ss_A;\n            }\n           }\n        }\n\n       \n\n    }\n\n    private initializeFormatArrays(): void {\n        const formatArray = this.format\n          ? this.format.match(new RegExp('([y|d|M|H|h|m|s|S|a|])+|[/]+|[-]+|[.]+|[,]+|[:]+|[ ]', 'ig')) || []\n          : [];\n\n    \n        formatArray.forEach((pattern: string) => {\n          if (pattern === \"/\" || pattern === \"-\" || pattern === \".\" || pattern === \",\" || pattern === \":\" || pattern === \" \") {\n            return;\n          }\n    \n          const fieldNameKey = pattern[0] as keyof typeof formatMap; // Explicitly define the key type\n          const formatKey = formatMap[fieldNameKey]; // Retrieve key from formatMap\n          if (formatKey) {  // Ensure formatKey exists before pushing it to arrays\n            // this.formatArray.push(formatKey);\n            this.formatMap[formatKey as keyof FormatType] = pattern; // Correct type safety\n          }\n        });\n      }\n\n      setMinDate():void{\n        this.minDate = this.optionsHandler.getMinDate() ? dayjs(dayjs(this.optionsHandler.getMinDate()),this.format) : null;\n      }\n  \n      setMaxDate():void{\n        this.maxDate = this.optionsHandler.getMaxDate() ? dayjs(dayjs(this.optionsHandler.getMaxDate()),this.format) : null;\n      }\n\n      updateCurrentMonthDays():void{\n        this.generateCurrentMonthDays(this.selectedDate,this.currentDate)\n      }\n\n    goToPreviousMonth(): void {\n        this.selectedDate  = this.selectedDate.subtract(1, 'month');\n        // this.currentDate  = this.currentDate.subtract(1, 'month');\n\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n    }\n\n    goToNextMonth(): void {\n        this.selectedDate  = this.selectedDate.add(1, 'month');\n        // this.currentDate  = this.currentDate.add(1, 'month');\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n\n    }\n\n    goToPreviousYear(): void {\n        this.selectedDate = this.selectedDate.subtract(1, 'year');\n        // this.currentDate = this.currentDate.subtract(1, 'year');\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n\n    }\n\n    goToNextYear(): void {\n        this.selectedDate = this.selectedDate.add(1, 'year');\n        // this.currentDate = this.currentDate.add(1, 'year');\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n\n    }\n\n    goToCurrent(): void {\n        this.currentDate = dayjs();\n        this.generateCurrentMonthDays(this.currentDate,this.selectedDate);\n\n    }\n\n    updateCurrentDate(date: Date): void {\n        this.currentDate = dayjs(date);\n        this.generateCurrentMonthDays(this.currentDate,this.selectedDate);\n\n    }\n\n    getCurrentDate() {\n        return this.currentDate.toDate();\n    }\n\n    getNextDay(): Date {\n        const nextDay = this.currentDate.add(1, 'day');\n        return nextDay.toDate();\n    }\n\n    getCurrentDay() {\n        return this.currentDate.day();\n    }\n\n    getPreviousDay(): Date {\n        const previousDay = this.currentDate.subtract(1, 'day');\n        return previousDay.toDate();\n    }\n\n    getNextMonth(): Date {\n        const nextMonth = this.currentDate.add(1, 'month');\n        return nextMonth.toDate();\n    }\n\n    getCurrentMonth() {\n        return this.currentDate.month();\n    }\n\n    getNextYear(): Date {\n        const nextYear = this.currentDate.add(1, 'year');\n        return nextYear.toDate();\n    }\n\n    getPreviousYear(): Date {\n        const previousYear = this.currentDate.subtract(1, 'year');\n        return previousYear.toDate();\n    }\n\n    getCurrentYear() {\n        return this.currentDate.year();\n    }\n\n    getPreviousMonth(): Date {\n        const previousMonth = this.currentDate.subtract(1, 'month');\n        return previousMonth.toDate();\n    }\n\n    getTotalDays() {\n        return this.currentDate.daysInMonth();\n    }\n\n    getNextWeek(): { start: Date, end: Date } {\n        const nextWeekStart = this.currentDate.add(1, 'week').startOf('week');\n        const nextWeekEnd = this.currentDate.add(1, 'week').endOf('week');\n        return {\n            start: nextWeekStart.toDate(),\n            end: nextWeekEnd.toDate()\n        };\n    }\n\n    getPreviousWeek(): { start: Date, end: Date } {\n        const previousWeekStart = this.currentDate.subtract(1, 'week').startOf('week');\n        const previousWeekEnd = this.currentDate.subtract(1, 'week').endOf('week');\n        return {\n            start: previousWeekStart.toDate(),\n            end: previousWeekEnd.toDate()\n        };\n    }\n\n    getCurrentWeek(): { start: Date, end: Date } {\n        const currentWeekStart = this.currentDate.startOf('week');\n        const currentWeekEnd = this.currentDate.endOf('week');\n        return {\n            start: currentWeekStart.toDate(),\n            end: currentWeekEnd.toDate()\n        };\n    }\n\n    getDaysInMonth(): number {\n        return this.currentDate.daysInMonth();\n    }\n\n    setSelectedDay(day : number):void{\n        this.selectedDate = this.selectedDate.date(day);\n        this.dateSelected = true\n\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n    }\n\n    setSelectedMonth(month : number):void{\n        this.selectedDate = this.selectedDate.month(month);\n        this.dateSelected = true\n\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n\n\n    }\n\n    setSelectedYear(year : number):void{\n        this.selectedDate = this.selectedDate.year(year);\n        this.dateSelected = true\n        this.generateCurrentMonthDays(this.selectedDate ,this.currentDate);\n\n    }\n    \n    isDateSelected():boolean{\n        return this.dateSelected\n    }\n\n    setDateSelected(force:boolean):void{\n        this.dateSelected = force;\n    }\n\n\n    getDate(): number {\n        this.counter = this.counter + 1;\n        return this.counter;\n    }\n\n    getMinDate():Dayjs{\n        return this.minDate!;\n    }\n\n    \n\n    // generateCurrentMonthDays(): void {\n    //     const startOfMonth = this.currentDate.startOf('month');\n    //     const endOfMonth = this.currentDate.endOf('month');\n\n    //     const days: DayDetails[] = [];\n\n    //     // Add days from the previous month to fill the first week\n    //     const startOfCalendar = startOfMonth.startOf('week');\n    //     let date = startOfCalendar;\n    //     while (date.isBefore(startOfMonth)) {\n    //         const showAdjacentDates = this.optionsHandler.getShowAdjacentDates();\n    //         const adjacentDate = showAdjacentDates ? date.date() : \"\"\n    //         days.push({ \n    //             date          : adjacentDate,\n    //             isCurrentMonth: false,\n    //             dateObject    : date.toDate(),\n    //             isToday       : isToday(date),\n    //             isSelected  : iSameDay(date,this.selectedDate),\n    //             isWeekEnd     : isWeekend(date),                   value: date.date(),\n    //             ariaLabel     : date.format(\"MMMM DD, YYYY\")\n    //             });\n    //         date = date.add(1, 'day');\n    //     }\n\n    //     // Add all days of the current month\n    //     date = startOfMonth;\n    //     while (date.isBefore(endOfMonth) || date.isSame(endOfMonth, 'day')) {\n    //         days.push({ \n    //             date          : date.date(),\n    //             isCurrentMonth: true,\n    //             dateObject    : date.toDate(),\n    //             isToday       : isToday(date),\n    //             isSelected  : iSameDay(date,this.selectedDate),\n    //             isWeekEnd     : isWeekend(date),\n    //             value         : date.date(),\n    //             ariaLabel     : date.format(\"MMMM DD, YYYY\")\n    //         });\n    //         date = date.add(1, 'day');\n    //     }\n\n    //     // Add days from the next month to fill the last week\n    //     while (date.isBefore(endOfMonth.endOf('week')) || date.isSame(endOfMonth.endOf('week'), 'day')) {\n    //         const showAdjacentDates = this.optionsHandler.getShowAdjacentDates();\n    //         const adjacentDate = showAdjacentDates ? date.date() : \"\"\n    //         days.push({ \n    //             date          : adjacentDate,\n    //             isCurrentMonth: false,\n    //             dateObject    : date.toDate(),\n    //             isToday       : isToday(date),\n    //             isSelected  : iSameDay(date,this.selectedDate),\n    //             isWeekEnd     : isWeekend(date),                   value: date.date(),\n    //             ariaLabel     : date.format(\"MMMM DD, YYYY\")\n    //         });\n    //         date = date.add(1, 'day');\n    //     }\n\n\n    //     this.CurrentMonthDays = days;\n\n    //     this.counter = 0; // Reset counter\n    // }\n\n    generateCurrentMonthDays(dateObject : any,compareDateObject : any): void {\n        \n        const startOfMonth    = dateObject.startOf('month');\n        const endOfMonth      = dateObject.endOf('month');\n        const startOfCalendar = startOfMonth.startOf('week');\n        const endOfCalendar   = endOfMonth.endOf('week');\n    \n        const getAdjacentDate = (date: Dayjs): string | number => \n            this.optionsHandler.getShowAdjacentDates() ? date.date() : \"\";\n    \n        const days: DayDetails[] = [];\n        let date = startOfCalendar;\n    \n        while (date.isBefore(endOfCalendar) || date.isSame(endOfCalendar, 'day')) {\n            const isCurrentMonth = date.isSame(startOfMonth, 'month');\n            // Preserve the current time of selectedDate in each date instance\n            const dateWithTime = date.hour(dateObject.hour()).minute(dateObject.minute()).second(dateObject.second());\n\n            const isSameMonth = isSameMonthInSameYear(dateObject,compareDateObject);\n            const isSelected = (isSameMonth && this.isDateSelected()) ? iSameDay(date,dateObject): false;\n            const isBefore = this.minDate && date.isBefore(this.minDate,'date');\n            const isAfter = this.maxDate && date.isAfter(this.maxDate)\n            const isDisabled = isBefore|| isAfter;\n\n            days.push({\n                date          : isCurrentMonth ? date.date() : getAdjacentDate(date),\n                isCurrentMonth: isCurrentMonth,\n                dateObject    : dateWithTime.toDate(),\n                isToday       : isToday(date),\n                isSelected   ,\n                isWeekEnd     : isWeekend(date),\n                value         : date.date(),\n                ariaLabel     : date.format(\"MMMM DD, YYYY\"),\n                isDisabled\n            });\n            date = date.add(1, 'day');\n        }\n    \n        this.CurrentMonthDays = days;\n        this.counter = 0; // Reset counter\n    }\n\n    getTimeBarRenderingDetails(): any {\n        return {\n            hour     : this.getCurrentHour(),\n            minute   : this.getCurrentMinute(),\n            second   : this.getCurrentSecond(),\n            meridian : this.getCurrentMeridian(),       // 'A' returns 'AM' or 'PM'\n            hourCycle: this.optionsHandler.getHourCycle()\n        };\n    }\n    \n    \n\n\n    getRenderingDetails(): DayDetails {\n        if(this.counter > this.CurrentMonthDays.length){\n            this.counter = 0; \n        }\n        return this.CurrentMonthDays[this.counter];\n    }\n\n    getMaxRenderingDaysCount():number{\n        return this.CurrentMonthDays.length;\n    }\n\n    updateCounter(): void {\n        this.counter = this.counter + 1;\n\n    }\n\n    // New methods\n    setDay(day: number): void {\n        this.currentDate = this.currentDate.date(day);\n        this.dateSelected = true\n        this.generateCurrentMonthDays(this.currentDate ,this.selectedDate);\n    }\n\n    setMonth(month: number): void {\n        this.currentDate = this.currentDate.month(month);\n        this.generateCurrentMonthDays(this.currentDate ,this.selectedDate);\n\n    }\n\n    setYear(year: number): void {\n        this.currentDate = this.currentDate.year(year);\n        this.generateCurrentMonthDays(this.currentDate ,this.selectedDate);\n\n    }\n\n    setDate(date : string | Date | Dayjs | null):void{\n        \n        if(date === null){\n            this.dateSelected = false;\n            date = this.currentDate;\n        }\n        this.currentDate = dayjs(date);\n    }\n\n    setHours(hour: number): void {\n        const meridian = this.currentDate.format('A');\n\n        this.currentDate = this.currentDate.set('h', hour);\n\n        const convertedMeridian = this.currentDate.format('A');\n\n        if(convertedMeridian != meridian){\n            this.setMeridian(meridian);\n        }\n\n    }\n\n    setMinutes(minute: number): void {\n        this.currentDate = this.currentDate.minute(minute);\n    }\n\n\n    setMeridian(meridian: string): void {\n        const currentMeridian = this.getCurrentMeridian();\n       if(currentMeridian === meridian){ return; }\n\n        if(meridian === 'AM' || meridian === 'PM'){\n            let date             = this.currentDate.format(this.format);\n                date             = toggleMeridian(date);\n                this.currentDate = dayjs(date,this.format);\n        }\n        // if(meridian){\n        //     let date             = this.currentDate.format(this.format)\n\n        //         // date             = toggleMeridian(date);\n        //         this.currentDate = dayjs(date,this.format);\n\n        // }\n\n        // this.currentDate = this.currentDate.hour(meridian === 'AM' || meridian === 'PM'? this.currentDate.add(12, \"hour\") : (this.currentDate.hour() % 12) + 12);\n        \n    }\n\n    setCounterValue(_value:number):void{\n\n    }\n\n    getHours(): number {\n        return this.currentDate.hour();\n    }\n    getMinutes(): number {\n\n        return this.currentDate.minute();\n\n    }\n    getMeridian(): string {\n        return this.currentDate.format('A');\n    }\n    getSeconds(): number {\n        return this.currentDate.second();\n    }\n\n\n\n    getMonth():string{\n        return this.currentDate.format(this.monthFormat)\n    }\n\n\n    getMonthIndex():number{\n        return this.currentDate.month();\n    }\n    getYear():string{\n        return this.currentDate.format(this.yearFormat)\n    }\n    getYearOnly():string{\n        return this.currentDate.format(\"YYYY\");\n    }\n\n    getYearIndex():number{\n        return this.currentDate.year();\n    }\n\n    getDateObject():Date{\n        // return this.currentDate.format(this.format);\n        return this.currentDate.toDate();\n    }\n\n    getDateInDayjs():Dayjs{\n        return this.currentDate;\n    }\n\n    getMonthNames(): DayDetails[]{\n        const monthNames: DayDetails[]  = [];\n\n        for (let i = 0; i < 12; i++) {\n            \n          const monthName       = dayjs().month(i).format(this.monthFormat);  // Format month name;\n\n          const selectedYear = this.getSelectedYearIndex();\n          const monthdateObject = this.selectedDate.set(\"year\", selectedYear).set(\"month\",i);\n          const isBefore = this.minDate && monthdateObject.isBefore(this.minDate);\n          const isAfter = this.maxDate && monthdateObject.isAfter(this.maxDate)\n          const isDisabled = isBefore|| isAfter as boolean;\n\n          const month           = monthdateObject.month();\n          const isCurrentMonth  = true;\n          const currentYear = this.getYearIndex();\n\n          const isSelected      =  selectedYear === currentYear ? month === this.currentDate.month() ? true:false:false;\n\n          const isToday = dayjs().year() === this.selectedDate.year() ? dayjs().month() === i ? true : false : false;\n\n          \n         \n\n          monthNames.push({\n              date: monthName,\n              isSelected,\n              isToday,\n              value:i,\n              isCurrentMonth,\n              ariaLabel : monthName,\n              dateObject :monthdateObject.toDate(),\n              isDisabled\n          });\n        }\n        return monthNames;\n        \n    }\n\n    getNumberOfWeeksInMonth(): number {\n        const startOfMonth = this.selectedDate.startOf('month');\n        const endOfMonth = this.selectedDate.endOf('month');\n    \n        const startOfCalendar = startOfMonth.startOf('week');\n        const endOfCalendar = endOfMonth.endOf('week');\n    \n        const totalDays = endOfCalendar.diff(startOfCalendar, 'day') + 1;\n        const weeks = Math.ceil(totalDays / 7);\n    \n        return weeks;\n    }\n\n    getNumberOfDaysInWeek():number{\n        return 7; // need to be changed dynamically for working days and particular dated generation;\n    }\n\n    getRenderDetailsforDay(): DayDetails[]{\n        return this.CurrentMonthDays;\n    }\n\n    getRenderDetailsforYear(): DayDetails[] {\n        const currentYear   = this.currentDate.year();\n        const minYearLimit  = this.minDate ? this.minDate.year() : Custom_Min_Year;\n        const startOfDecade = Math.floor(currentYear / 10) * 10 - Custom_Min_Year; // Start the decade from the previous year\n        const startYear     = Math.max(startOfDecade, minYearLimit); // Avoid negative / below-min years\n        const years: DayDetails[] = [];\n      \n        for (let i = 0; i < 12; i++) {\n            const year = startYear + i;\n            const isCurrentMonth = true;\n            const isSelected =  this.selectedDate.year() === year;\n            const isToday = dayjs().year() === year ? true : false;\n\n            const monthdateObject = this.currentDate.set(\"year\",year);\n\n            const isBefore = this.minDate && monthdateObject.isBefore(this.minDate);\n            const isAfter = this.maxDate && monthdateObject.isAfter(this.maxDate)\n            const isDisabled = isBefore|| isAfter as boolean;\n\n            years.push({\n                date: year.toString(),\n                isSelected,\n                isCurrentMonth,\n                isToday,\n                value: year,\n                ariaLabel : year.toString(),\n                dateObject : dayjs().set(\"year\",year).toDate(),\n                isDisabled\n\n            });\n        }\n\n        return years;\n    }\n\n    \n\n    setSelectedDate(date:Date | Dayjs |string)  : void{\n        this.dateSelected = true;\n        this.selectedDate = dayjs(date);\n        this.generateCurrentMonthDays(this.selectedDate,this.currentDate);\n\n    }\n\n    getWeekNames(): string[] {\n        const weekNames: string[] = [];\n        const startOfWeek = dayjs().startOf('week');\n    \n        for (let i = 0; i < 7; i++) {\n            weekNames.push(startOfWeek.add(i, 'day').locale(this.locale).format(this.weekDayFormat));\n        }\n    \n        return weekNames;\n    };\n\n    getSelectedDay()  : number{\n        return this.selectedDate.date();\n\n    }\n    getSelectedMonth(): string{\n        return this.selectedDate.format(this.monthFormat);\n    }\n    getSelectedYear() : string{\n        return this.selectedDate.format(this.yearFormat)\n    }\n    getSelectedDate() : Dayjs{\n        return this.selectedDate;\n\n    }\n\n    getSelectedMonthIndex()                           : number{\n        return this.selectedDate.month();\n    }\n    getSelectedYearIndex()                           : number{\n        return this.selectedDate.year();\n    }\n\n    getCurrentHour(): string {\n        if (this.formatMap[\"meridian\"]) {\n            return this.currentDate.format('h');\n        }\n        return this.currentDate.format(this.formatMap[\"hour\"]);\n    }\n    getCurrentMinute(): string {\n        return this.currentDate.format(this.formatMap[\"minute\"]);\n    }\n    getCurrentMeridian():string{\n        return  this.formatMap[\"meridian\"] ? this.currentDate.format(this.formatMap[\"meridian\"]) : '';\n    }\n\n    getCurrentSecond(): string {\n        return this.currentDate.format(this.formatMap[\"second\"]);\n    }\n    \n    isAfterMonth(): boolean{\n        if(this.maxDate && isSameMonthInSameYear(this.maxDate,this.selectedDate)){\n            return true\n        }\n        return this.maxDate ? this.selectedDate.isAfter(this.maxDate) : false;\n    }\n\n    isBeforeMonth(): boolean{\n        if(this.minDate && isSameMonthInSameYear(this.minDate,this.selectedDate)){\n            return true\n        }\n        return this.minDate ? this.selectedDate.isBefore(this.minDate) : false;\n\n    }\n\n    isBeforeYear(): boolean{\n        if(this.minDate && this.minDate.isSame(this.selectedDate,'year')){\n            return true\n        }\n        return this.minDate ? this.selectedDate.isBefore(this.minDate) : false;\n\n    }\n    isAfterYear(): boolean{\n        if(this.maxDate && this.maxDate.isSame(this.selectedDate,'year')){\n            return true\n        }\n        return this.maxDate ? this.selectedDate.isAfter(this.maxDate) : false;\n\n    }\n\n    isYearInDangerZoneForFuture():boolean{\n        const precausionYearForFuture = this.selectedDate.set(\"year\",this.selectedDate.year() +1);\n        if(this.maxDate){\n            if(this.maxDate.isSame(precausionYearForFuture,'year')){\n                return true\n            }if(precausionYearForFuture.isAfter(this.maxDate)){\n                return true\n            }\n        }\n        return false\n        \n    }\n\n    isYearInDangerZoneForPast():boolean{\n        const precausionYearForPast = this.selectedDate.set(\"year\",this.selectedDate.year() -1);\n        if(this.minDate){\n            if(this.minDate.isSame(precausionYearForPast,'year')){\n                return true\n            }if(precausionYearForPast.isBefore(this.minDate)){\n                return true\n            }\n        }\n\n        return false\n\n    }\n\n    isMonthInDangerZoneForFuture():boolean{\n        const precausionMonthForFuture = this.selectedDate.set(\"month\",this.selectedDate.month() +1);\n        if(this.maxDate){\n            if(this.maxDate.isSame(precausionMonthForFuture,'month')){\n                return false\n            }else if(precausionMonthForFuture.isAfter(this.maxDate)){\n                return true\n            }\n        }\n        return false\n    }\n\n    isMonthInDangerZoneForPast():boolean{\n        const precausionMonthForPast = this.selectedDate.set(\"month\",this.selectedDate.month() -1);\n        if(this.minDate){\n            if(this.minDate.isSame(precausionMonthForPast,'month')){\n                return false\n            }if(precausionMonthForPast.isBefore(this.minDate)){\n                return true\n            }\n        }\n        return false\n    }\n\n    isBeforeTIme(hour:number,type:string):boolean{\n        const tempDate = this.selectedDate.set(type as UnitType,hour);\n        if(this.minDate){\n            if(tempDate.isBefore(this.minDate)){\n                return true\n            }\n        }\n        return false\n\n    }\n}\n\n\n\n// Function to check if a given date is today\nfunction isToday(date:Dayjs) :boolean{\n    return dayjs(date).isSame(dayjs(), 'day');\n}\n\nexport function isSameMonthInSameYear(date1:Dayjs,date2:Dayjs):boolean{\n\n    const month1 = date1.month();\n    const month2= date2.month();\n\n    const year1 =  date1.year();\n    const year2 = date2.year();\n\n    if( (month1 === month2) && (year1 === year2)){\n        return true;\n    }\n    return false;\n\n}\n\nexport function isSameDate(date1: Dayjs | Date | string, date2: Dayjs | Date | string, unit: UnitType = 'day'): boolean {\n    return dayjs(date1).isSame(dayjs(date2), unit);\n}\n\nfunction iSameDay(date1:Dayjs,date2:Dayjs){\n    return dayjs(date1).isSame(date2, 'day');\n}\n\nfunction isWeekend(date: Dayjs): boolean {\n    const day = date.day();\n    return day === 0 || day === 6; // 0 for Sunday, 6 for Saturday\n}\n\n// function isSameMonth(date1: Dayjs, date2: Dayjs): boolean {\n//     return date1.isSame(date2, 'month') && date1.isSame(date2, 'year');\n// }\n\nfunction toggleMeridian(dateStr : string) {\n    return dateStr.replace(/\\bAM\\b/, \"XX\").replace(/\\bPM\\b/, \"AM\").replace(/\\bXX\\b/, \"PM\");\n}\n","import { composeClasses } from \"@dg/utils\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { CalendarCellViewType } from \"./calendar-cell-view.types\";\nimport { getCalendarRootUtilityClass } from \"../root/calendar-root-classes\";\nimport { DayDetails, ICalendarDataManager } from \"../model/calendar-data-manager.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { AutoWired, BEAN_NAME, setAriaLabel, setAriaRole } from \"@dg/corecomponent\";\nimport { CalendarViewManagerTypes } from \"../model/calendar-view-manager.types\";\nimport { CALENDAR_VIEW_TYPE } from \"../model/calendar-view-manager\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { TimePickerDropdownType } from \"../time-dropdown-hanlder/time-dropdown-handler.types\";\nimport { CalendarOptionHandlerType } from \"../model/calendar-options-handler.types\";\nimport { isSameDate } from \"../model/calendar-data-manager\";\n\nconst useUtilityClasses = (ownerState: any) => {\n    const { currentMonth, isToday, isSelected, isWeekEnd, isMonthView, isYearView, showAdjacentDates,isDisabled } = ownerState;\n    const slots = {\n        container: {\n            slot: 'cell',\n            modifiers: [\n                // (isMonthView || isYearView) && currentMonth && \"current\",\n                (!currentMonth && !isMonthView && !isYearView) && \"adjacentdate\",\n               (isToday && currentMonth) && \"today\",\n               (isToday && !currentMonth && showAdjacentDates) && 'today',\n                (isSelected && currentMonth) && \"selected\",\n                (isWeekEnd && currentMonth) && 'weekend',\n                isMonthView && 'month',\n                isYearView && 'year',\n                (!isMonthView && !isYearView) && 'day',\n                isDisabled && 'disabled'\n            ]\n        }\n    };\n\n    return composeClasses(slots, getCalendarRootUtilityClass);\n}\n\nexport class CalendarCellViewController extends AbstractController<CalendarCellViewType> {\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_MODEL) protected model!: ICalendarDataManager;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager!: CalendarViewManagerTypes;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_TIME_DROPDOWN_MANAGER) dropdownHanlder !: TimePickerDropdownType;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: CalendarOptionHandlerType;\n\n\n\n    private dateDetails!: DayDetails;\n\n    init() {\n        this.applyClassNames();\n        this.registerEventListener();\n        this.setRole();\n        // this.setTabindex()\n        this.setAriaAttributes();\n    }\n\n    private applyClassNames() {\n        const ownerState = this.ownerState();\n        const classes    = useUtilityClasses(ownerState);\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    // private setTabindex() {\n    //     const element = this.component?.getElement() as HTMLElement;\n    //     element.tabIndex = 0;\n    // }\n    private ownerState() {\n        return {\n            currentMonth: this.dateDetails.isCurrentMonth,\n            isToday     : this.dateDetails.isToday,\n            isSelected: this.dateDetails.isSelected,\n            isWeekEnd   : this.dateDetails.isWeekEnd,\n            isMonthView : this.viewManager.isMonthView(),\n            isYearView  : this.viewManager.isYearView(),\n            showAdjacentDates : this.optionsHandler.getShowAdjacentDates(),\n            isDisabled : this.dateDetails.isDisabled\n        };\n    }\n\n    setRole() {\n        const element = this.component?.getElement() as HTMLElement;\n        setAriaRole(element, \"gridcell\");\n    }\n\n    setAriaAttributes() {\n        const element = this.component?.getElement() as HTMLElement;\n        setAriaLabel(element, this.dateDetails.ariaLabel);\n    }\n\n    getProperty() {\n        this.dateDetails = this.viewManager.getRenderingDetails();\n        this.viewManager.updateCounter();\n        return { date: this.dateDetails.date };\n    }\n\n    private registerEventListener(): void {\n        const element = this.component?.getElement() as HTMLElement;\n        const type =  this.optionsHandler.getType()\n\n        const isDisabled = this.dateDetails.isDisabled;\n        if(isDisabled){\n            return\n        }\n        \n        this.addListener(element, 'click', (event : PointerEvent) => {\n            event.stopImmediatePropagation();\n\n            const viewType = this.viewManager.getViewType();\n            // element.focus()\n            this.dropdownHanlder.destroyDropdown();\n\n\n            if (viewType === CALENDAR_VIEW_TYPE.DAY) {\n                if (!this.dateDetails.isCurrentMonth) {\n                    return;\n                }\n\n                if(this.optionHandler.shouldDeselect()){\n                    const currentDate = this.model.getDateObject()\n                    if(isSameDate(this.dateDetails.dateObject as Date,currentDate) && this.dateDetails.isSelected ){\n                        this.model.setDateSelected(false);\n                        this.dateDetails.isSelected = false;\n                        this.applyClassNames()\n                        this.optionHandler.onDeselect(this.dateDetails.dateObject as Date)\n\n                        return\n                    }\n                }\n\n                this.optionsHandler.onClick(event);\n                this.updateModelDate(this.dateDetails.value);\n\n                this.optionsHandler.onChange(this.model.getDateObject());\n\n\n                if(type === 'datepicker' && this.optionHandler.shouldCloseOnSelect()){\n                    this.dispatchEvent({type:'DESTROY_CALENDAR'})\n                }\n\n                this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.RERENDER });\n                // this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.SET_FOCUS_TO_THE_TITLE_ELEMENT });\n                this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n\n\n\n\n            } else if (viewType === CALENDAR_VIEW_TYPE.MONTH) {\n                this.updateModelMonth(this.dateDetails.value);\n                let pickerType = \"month\";\n                if(pickerType === this.optionsHandler.getPickerType()){\n                    // this.updateModelDate(this.dateDetails.value);\n                    this.optionsHandler.onChange(this.model.getDateObject());\n\n                    return\n                }\n\n                this.viewManager.setViewType(CALENDAR_VIEW_TYPE.DAY)\n                this.updateViewManager();\n\n                this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.SHOWYEARBTN });\n                this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED });\n                this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.SHOWWEEKDAY});\n                // this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.SET_FOCUS_TO_THE_TITLE_ELEMENT });\n                this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n\n\n\n\n            } else if (viewType === CALENDAR_VIEW_TYPE.YEAR) {\n                this.updateModelYear(this.dateDetails.value);\n                let pickerType = \"year\";\n                if(pickerType === this.optionsHandler.getPickerType()){\n                    // this.updateModelDate(this.dateDetails.value);\n                    this.optionsHandler.onChange(this.model.getDateObject());\n\n                    return\n                }\n                this.viewManager.setViewType(CALENDAR_VIEW_TYPE.MONTH);\n                this.updateViewManager();\n                this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED });\n                // this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.SET_FOCUS_TO_THE_TITLE_ELEMENT });\n            this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n\n\n            }\n        });\n    }\n\n    private updateModelDate(value: number) {\n       \n        this.model.setDay(value);\n\n        const month = this.model.getSelectedMonthIndex();\n        const year = this.model.getSelectedYearIndex();\n        \n        this.model.setMonth(month);\n        this.model.setYear(year);\n\n        this.model.setSelectedDay(value);\n\n\n    }\n\n    private updateModelMonth(value: number) {\n        // this.model.setMonth(value);\n        // const year = this.model.getSelectedYearIndex();\n        // this.model.setYear(year);\n        this.model.setSelectedMonth(value);\n    }\n\n    private updateModelYear(value: number) {\n        // this.model.setYear(value);\n        this.model.setSelectedYear(value);\n    }\n\n    private updateViewManager() {\n        this.viewManager.resetCounter();\n        this.viewManager.updateRenderingDetails();\n        this.dispatchEvent({ type: CALENDAR_CUSTOM_EVENTS.RERENDER });\n    }\n\n    protected destroy(): void {\n        super.destroy();\n    }\n}\n","\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarCellViewType } from './calendar-cell-view.types';\nimport { CalendarCellViewController } from './calendar-cell-controller';\n\n\nfunction CalendarWeekDayTemplate(props:any): HTMLElement {\n\n\tconst div = document.createElement('div');\n\tconst cell = document.createElement('div');\n\tcell.innerText = props.date;\n\tdiv.appendChild(cell);\n\treturn div.firstChild as HTMLElement;\n}\n\nexport class CalendarCellView extends Component {\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:CalendarCellViewType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new CalendarCellViewController());\n\n        const props = controller.getProperty()\n        const template = CalendarWeekDayTemplate(props)\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprotected destroy(): void {\n\t\t\t// super.destroy();\n\t\t\tthis.getGui().remove()\n\n\t}\n\n}","\n\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { CalendarAPITypes } from \"./calendar-api.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { CalendarControllerHandlerType } from \"./calendar-controller.types\";\nimport { ICalendarDataManager } from \"./calendar-data-manager.types\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport { CalendarViewManagerTypes } from \"./calendar-view-manager.types\";\nimport { CalendarOptionHandlerType } from \"./calendar-options-handler.types\";\nimport { ICalendarConfiguration } from \"../../calendar-configuration.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { isSameDate } from \"./calendar-data-manager\";\n\n\n@Bean(CALENDAR_BEAN_NAME.CALENDAR_API)\nexport class CalendarApi extends EventEmitter implements CalendarAPITypes {\n\t@AutoWired(CALENDAR_BEAN_NAME.CALENDAR_CONTROLLER_HANDLER) controllerHandler !: CalendarControllerHandlerType;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_MODEL) protected model !: ICalendarDataManager;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager !:CalendarViewManagerTypes;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: CalendarOptionHandlerType;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_CONFIGURATION) configuration!: ICalendarConfiguration;\n\n\n\n\n\n    \n\n    getElement() : HTMLElement {\n        return this.controllerHandler.getCalendarCtrl().getElement() as HTMLElement;\n    }\n\n    getValue(){\n        return this.model.getDateObject();\n\n    }\n\n    focus(){\n        this.controllerHandler.getCalendarCtrl().focus();\n\n    }\n\n    destroy(){\n        this.controllerHandler.getCalendarCtrl().destroy();\n    }\n\n    blur(){\n        this.controllerHandler.getCalendarCtrl().blur();\n    }\n\n    setDate(date: Date | Dayjs |string): void {\n        this.viewManager.setDate(date);\n    }\n\n    setDay(day: number):void{\n        this.viewManager.setDay(day);\n    }\n\n    setMonth(month: number):void{\n        this.viewManager.setMonth(month); \n    }\n\n    setYear(year : number):void{\n        this.viewManager.setYear(year);\n    }\n\n    getId(): string {\n        return this.optionHandler.getId()!;\n    }\n\n    updateProperties(properties : ICalendarConfiguration){\n        if(!properties){\n            return\n        }\n        Object.entries(properties).forEach(([key, value]) => {\n                (this.configuration as any)[key] = value; \n        });\n\n        if(properties.value !== undefined){\n            const currentSelectedDate = this.model.getSelectedDate();\n            let shouldUpdateDate = false;\n            \n            if(properties.value === null){\n                if(currentSelectedDate){\n                    shouldUpdateDate = true;\n                    this.model.setDate(null);\n                    this.viewManager.updateRenderingDetails();\n                }\n            } else {\n\n                let newDate: Dayjs;\n                if(typeof properties.value === 'number'){\n                    newDate = dayjs(new Date(properties.value));\n                } else {\n                    newDate = dayjs(properties.value);\n                }\n                \n                if(!currentSelectedDate || !isSameDate(currentSelectedDate, newDate, 'day')){\n                    shouldUpdateDate = true;\n                    if(typeof properties.value === 'number'){\n                        this.viewManager.setDate(new Date(properties.value));\n                    } else {\n                        this.viewManager.setDate(properties.value);\n                    }\n                }\n            }\n            \n            if(shouldUpdateDate){\n                this.dispatchEvent({\n                    type : CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE \n                })\n\n                this.dispatchEvent({\n                    type : CALENDAR_CUSTOM_EVENTS.RERENDER\n                })\n            } else {\n                this.dispatchEvent({\n                    type : CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE \n                })\n            }\n        } else {\n            this.dispatchEvent({\n                type : CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE \n            })\n\n            this.dispatchEvent({\n                type : CALENDAR_CUSTOM_EVENTS.RERENDER\n            })\n        }\n\n    }\n\n\n    \n\n}","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { CalendarRootController } from \"../root/calendar-root-contoller\";\nimport { CalendarControllerHandlerType } from \"./calendar-controller.types\";\n\n\n@Bean(CALENDAR_BEAN_NAME.CALENDAR_CONTROLLER_HANDLER)\nexport class CalendarControllerHandler extends EventEmitter implements CalendarControllerHandlerType{\n\tprivate calendarCtrl!: CalendarRootController;\n\tregisterCalendarCtrl(calendarCtrl: CalendarRootController): void {\n\t\tthis.calendarCtrl = calendarCtrl;\n\t}\n\n\tgetCalendarCtrl(): CalendarRootController {\n\t\treturn this.calendarCtrl;\n\t}\n}","\nimport { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarNavBarViewType } from './calendar-nav-bar-view.types';\nimport { CalendarNavBarController } from './calendar-nav-bar-controller';\n\n\nfunction CalendarNavBarFullTemplate(props: any): HTMLElement {\n    const container = document.createElement(\"div\");\n\n    // Left section\n    const leftDiv = document.createElement(\"div\");\n    leftDiv.classList.add(\"dg-date-picker__navigation--left\");\n    const previousYearButton = document.createElement(\"calendar-previous-button\");\n    previousYearButton.setAttribute(\"ref\", \"previousYearButton\");\n    const previousMonthButton = document.createElement(\"calendar-previous-button\");\n    previousMonthButton.setAttribute(\"ref\", \"previousMonthButton\");\n    leftDiv.appendChild(previousYearButton);\n    leftDiv.appendChild(previousMonthButton);\n\n    // Title section\n    const titleDiv = document.createElement(\"div\");\n    titleDiv.classList.add(\"dg-date-picker__navigation--title\");\n    titleDiv.setAttribute(\"ref\", \"titleElement\");\n    titleDiv.setAttribute(\"tabindex\", \"0\");\n    const monthSpan = document.createElement(\"span\");\n    monthSpan.classList.add(\"dg-date-picker__navigation--monthnav\");\n    monthSpan.setAttribute(\"ref\", \"monthElement\");\n    monthSpan.textContent = props.month;\n    const yearSpan = document.createElement(\"span\");\n    yearSpan.classList.add(\"dg-date-picker__navigation--yearnav\");\n    yearSpan.setAttribute(\"ref\", \"yearElement\");\n    yearSpan.textContent = props.year;\n    titleDiv.appendChild(monthSpan);\n    titleDiv.appendChild(yearSpan);\n\n    // Right section\n    const rightDiv = document.createElement(\"div\");\n    rightDiv.classList.add(\"dg-date-picker__navigation--right\");\n    const nextMonthButton = document.createElement(\"calendar-previous-button\");\n    nextMonthButton.setAttribute(\"ref\", \"nextMonthButton\");\n    const nextYearButton = document.createElement(\"calendar-previous-button\");\n    nextYearButton.setAttribute(\"ref\", \"nextYearButton\");\n    rightDiv.appendChild(nextMonthButton);\n    rightDiv.appendChild(nextYearButton);\n\n    container.appendChild(leftDiv);\n    container.appendChild(titleDiv);\n    container.appendChild(rightDiv);\n\n    return container;\n}\n\nfunction CalendarNavBarYearTemplate(props: any): HTMLElement {\n    const container = document.createElement(\"div\");\n\n    // Left section\n    const leftDiv = document.createElement(\"div\");\n    leftDiv.classList.add(\"dg-calendar__navigation--left\");\n    const previousYearButton = document.createElement(\"calendar-previous-button\");\n    previousYearButton.setAttribute(\"ref\", \"previousYearButton\");\n    leftDiv.appendChild(previousYearButton);\n\n    // Title section\n    const titleDiv = document.createElement(\"div\");\n    titleDiv.classList.add(\"dg-calendar__navigation--title\");\n    titleDiv.setAttribute(\"ref\", \"titleElement\");\n    const yearSpan = document.createElement(\"span\");\n    yearSpan.classList.add(\"dg-calendar__navigation--yearnav\");\n    yearSpan.setAttribute(\"ref\", \"yearElement\");\n    yearSpan.textContent = props.year;\n    titleDiv.appendChild(yearSpan);\n\n    // Right section\n    const rightDiv = document.createElement(\"div\");\n    rightDiv.classList.add(\"dg-calendar__navigation--right\");\n    const nextYearButton = document.createElement(\"calendar-previous-button\");\n    nextYearButton.setAttribute(\"ref\", \"nextYearButton\");\n    rightDiv.appendChild(nextYearButton);\n\n    container.appendChild(leftDiv);\n    container.appendChild(titleDiv);\n    container.appendChild(rightDiv);\n\n    return container;\n}\n\n\nfunction CalendarNavBarRootTemplate(props:any){\n\tconst {viewType} = props;\n\tconst template = viewType === 'day' ? CalendarNavBarFullTemplate(props) :CalendarNavBarYearTemplate(props);\n\treturn template\n\n}\n\n// function dummTemplate(_props:any){\n// \tconst div = document.createElement('div');\n// \treturn div;\n\t\n// }\n\n\n\nexport class CalendarNavBarView extends Component {\n\t@queryAssignedNodes('monthElement') monthElement !: any;\n\t@queryAssignedNodes('yearElement') yearElement !  : any;\n\t@queryAssignedNodes('titleElement') titleElement !: any;\n\n\t@queryAssignedNodes('previousMonthButton') previousMonthButton!: any;\n\t@queryAssignedNodes('nextMonthButton') nextMonthButton!        : any;\n\t@queryAssignedNodes('previousYearButton') previousYearButton!  : any;\n\t@queryAssignedNodes('nextYearButton') nextYearButton!          : any;\n\n    private controller !:CalendarNavBarController\n\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:CalendarNavBarViewType  = this.getComponent()\n\n\t\t this.controller = this.createManagedBean(new CalendarNavBarController());\n        this.renderTemplate(this.controller,component);\n\t\tthis.controller.setComponent(component);\n\t}\n\n\tprivate getComponent(): CalendarNavBarViewType {\n\t\treturn {\n\t\t\tgetElement         : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t\tgetYearElement     : () => this.getYearElement(),\n\t\t\tgetMonthElement    : () => this.getMonthElement(),\n\t\t\trerender           : (controller,comp) => this.rerender(controller,comp),\n\t\t\tgetTitleElement    : ()=>this.getTitleElement(),\n\t\t\tgetParentComponent : () => this.getParentComponent(),\n\t\t\tgetMonthYearButtons: () => this.getMonthYearButtons(),\n\n\t\t}\n\n\t}\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate getMonthElement(){\n\t\treturn this.monthElement\n\t}\n\n\tprivate getYearElement(){\n\t\treturn this.yearElement\n\t}\n\n\tprivate getTitleElement(){\n\t\treturn this.titleElement;\n\n\t}\n\n\tprivate getMonthYearButtons():{previousYearButton:any,nextYearButton    : any, previousMonthButton : HTMLElement, nextMonthButton:HTMLElement} {\n\t\treturn{\n\t\t\tpreviousYearButton: this.previousYearButton,\n\t\t\tnextYearButton    : this.nextYearButton,\n            previousMonthButton: this.previousMonthButton,\n            nextMonthButton    : this.nextMonthButton,\n\t\t}\n\t}\n\n\n\tprivate renderTemplate(controller: CalendarNavBarController, _component: CalendarNavBarViewType) {\n        this.controller = controller;\n\t\tconst props =   this.controller.getProperty()\n        const paramsProperty =   this.controller.getParamsProperty()\n        const template = CalendarNavBarRootTemplate(props)\n      \n        this.setTemplate(template, {\n\t\t\tpreviousMonthButton: paramsProperty.previousMonthButton,\n\t\t\tnextMonthButton    : paramsProperty.nextMonthButton,\n\t\t\tpreviousYearButton : paramsProperty.previousYearButton,\n\t\t\tnextYearButton     : paramsProperty.nextYearButton,\n\t\t});\n    }\n\n\trerender(controller:CalendarNavBarController,comp:any) {\n        this.controller = controller;\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(this.controller,component);\n\t\tthis.controller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n    // afterGuiAttached(_params: any): void {\n    //     this.controller.checkToDisableNavIfLimitExceedsMax();\n       \n    // }\n\n\t\n\n}","\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { TimeNavBarViewType } from \"./time-nav-bar-view.types\";\nimport { ICalendarDataManager } from \"../model/calendar-data-manager.types\";\nimport { CALENDAR_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { CalendarViewManagerTypes } from \"../model/calendar-view-manager.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { TimePickerDropdownType } from \"../time-dropdown-hanlder/time-dropdown-handler.types\";\n\n\n// const useUtilityClasses = () => {\n// \tconst slots = {\n// \t\tcontainer : {\n// \t\t\tslot : 'timebar',\n// \t\t\tmodifiers : []\n// \t\t}\n// \t}\n\n// \treturn composeClasses(slots, getCalendarRootUtilityClass)\n// }\n\n\n\n// const useUtilityClassesForButton = () => {\n// \tconst slots = {\n// \t\tcontainer : {\n// \t\t\tslot : 'button',\n// \t\t\tmodifiers : [\n                \n//             ]\n// \t\t}\n// \t}\n\n// \treturn composeClasses(slots, getCalendarRootUtilityClass)\n// }\n\n\n\nexport class TimeNavBarController extends AbstractController<TimeNavBarViewType>{\n\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_MODEL) protected model !:ICalendarDataManager;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_VIEW_MANAGER) protected viewManager !:CalendarViewManagerTypes;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_TIME_DROPDOWN_MANAGER) dropdownHanlder !: TimePickerDropdownType;\n\n    private parentComponent!: any;\n    \n   init(){\n        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.UPDATE_TIME, this.refresh.bind(this));\n        this.parentComponent = this.component?.getParentComponent();\n        this.setAriaAttributes()\n         this.applyClassNames();\n         this.registerEventListener();\n    }\n    \n    private applyClassNames(){\n        this.component?.addOrRemoveCssClass(\"dg-date-picker__timebar\");\n    }\n\n    getProperty(){\n             return this.model.getTimeBarRenderingDetails()\n    }\n\n    setAriaAttributes():void{\n        \n    }\n\n\n    registerEventListener(): void {\n        const hourElement = this.component?.getHourElement() as HTMLElement;\n        const minuteElement = this.component?.getMinuteElement() as HTMLElement;\n        const meridianelement = this.component?.getMeridianElement() as HTMLElement;\n\n\n            if(hourElement){\n                hourElement.addEventListener('click',()=>{\n                    const hour = Number(this.model.getCurrentHour());\n\n                    let  selectedValueindex = hour;\n                    selectedValueindex === -1 ? selectedValueindex = 0 :'';\n\n                    const hourCycle = this.optionsHandler.getHourCycle();\n\n                    this.dropdownHanlder.createDropdown(hourElement, 'hour',this.setHour.bind(this), selectedValueindex,hourCycle);\n                    // hourElement.focus();\n        \n                })\n            }\n        \n\n            if(minuteElement){\n                minuteElement.addEventListener('click',()=>{\n                    const minute = this.model.getMinutes()\n                    const selectedValueindex = minute\n\n\n\n                    this.dropdownHanlder.createDropdown(minuteElement,'minute',this.setMinute.bind(this), selectedValueindex);\n\n                    // minuteElement.focus();\n\n                })\n            }\n\n            if(meridianelement){\n                meridianelement.addEventListener('click',()=>{\n                const merdian = this.model.getMeridian();\n\n\n                this.dropdownHanlder.createDropdown(meridianelement,'meridian',this.setMeridian.bind(this),merdian);\n\n                // meridianelement.focus();\n\n                })\n\n            }\n\n        \n    }\n\n    private setHour(value: string,event?:string){\n        const valueInMNumeric = Number(value);\n        if(isNaN(valueInMNumeric)){\n            return\n        }\n        this.model.setHours(valueInMNumeric);\n        const hourElement = this.component?.getHourElement() as HTMLElement;\n        const spanElement = hourElement.querySelector('span');\n        if (spanElement) {\n            spanElement.textContent = value; \n        }\n\n        \n        if(event!='api'){\n            const date = this.model.getDateObject()\n            this.optionsHandler.onChange(date)\n        }\n\n    }\n\n    private setMinute(value: string,event?:string){\n        const valueInMNumeric = Number(value);\n        if(isNaN(valueInMNumeric)){\n            return\n        }\n        this.model.setMinutes(Number(valueInMNumeric));\n        const hourElement = this.component?.getMinuteElement() as HTMLElement;\n        const spanElement = hourElement.querySelector('span');\n        if (spanElement) {\n            spanElement.textContent = value; \n        }\n        if(event!='api'){\n            const date = this.model.getDateObject()\n            this.optionsHandler.onChange(date)\n        }\n    }\n\n    private setMeridian(value: string,event?:string){\n        this.model.setMeridian(value);\n\n        if(value === '') {\n            return;\n        }\n        \n        const hourElement = this.component?.getMeridianElement() as HTMLElement;\n        const spanElement = hourElement.querySelector('span');\n        if (spanElement) {\n            spanElement.textContent = value; \n        }\n        if(event!='api'){\n            const date = this.model.getDateObject()\n            this.optionsHandler.onChange(date)\n        }\n    }\n\n    private refresh() {\n        const props = this.model.getTimeBarRenderingDetails();\n        this.setHour(props.hour,'api');\n        this.setMinute(props.minute,'api');\n        props.hourCycle === 12 &&  this.setMeridian(props.meridian,'api');\n       \n    }\n\n    rerender():void{\n\n        this.component?.rerender(this,this.parentComponent);\n        this.applyClassNames();\n\n    }\n\n    hideYearBtns():void{\n        // const { previousYearButton, nextYearButton } = this.component?.getMonthYearButtons() as { previousYearButton :HTMLElement, nextYearButton: HTMLElement};\n        // const monthElement = this.component?.getMonthElement() as HTMLElement;\n\n        // previousYearButton.style.display = 'none'\n        // nextYearButton.style.display     = 'none';\n        // monthElement.style.display       = 'none';\n    }\n\n    showYearBtns():void{\n        // const { previousYearButton, nextYearButton } = this.component?.getMonthYearButtons() as { previousYearButton :HTMLElement, nextYearButton: HTMLElement};;\n        // const monthElement = this.component?.getMonthElement() as HTMLElement;\n\n        // previousYearButton.style.display = 'block';\n        // nextYearButton.style.display     = 'block';\n        // monthElement.style.display       = 'block';\n\n    }\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n\n\n\n\n}","\nimport { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { TimeNavBarViewType } from './time-nav-bar-view.types';\nimport { TimeNavBarController } from './time-nav-bar-controller';\nimport { getSvgIcon } from '../../../../utility/create-svg-template';\n\n\n\n\n\nfunction TimeNavBarTemplate(props : any) : HTMLElement{\n    const wrapper = document.createElement('div');\n\n    // Time Icon\n    const timeIcon = getSvgIcon('dg__svg--time-picker', {svg : 'dg-date-picker__time-icon', icon : 'dg-date-picker__time-icon'});\n    const tempDOM = document.createElement('div');\n    tempDOM.innerHTML = timeIcon;\n\n    wrapper.appendChild(tempDOM.firstChild as HTMLElement);\n    // const timeIcon = document.createElement('i');\n    // timeIcon.classList.add('dg-date-picker__time-icon');\n    // const timeSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    // timeSvg.classList.add('dg-date-picker__time');\n    // timeSvg.setAttribute('width', '17');\n    // timeSvg.setAttribute('height', '17');\n    // timeSvg.setAttribute('viewBox', '0 0 24 24');\n    // const path1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    // path1.setAttribute('d', \"M14.56,13.7l-2.23-1.42v-2.94c0-.34-.28-.62-.62-.62s-.62.28-.62.62v3.28c0,.21.11.41.29.53l2.52,1.61c.1.07.22.1.33.1.21,0,.41-.1.53-.29.19-.29.1-.68-.19-.86Z\");\n    // const path2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    // path2.setAttribute('d', \"M12,3.37C7.24,3.37,3.38,7.24,3.38,12s3.87,8.62,8.62,8.62,8.62-3.87,8.62-8.62S16.76,3.37,12,3.37ZM12,19.37c-4.07,0-7.38-3.31-7.38-7.38s3.31-7.38,7.38-7.38,7.38,3.31,7.38,7.38-3.31,7.38-7.38,7.38Z\");\n    // timeSvg.appendChild(path1);\n    // timeSvg.appendChild(path2);\n    // timeIcon.appendChild(timeSvg);\n    // wrapper.appendChild(timeIcon);\n\n    // Time Picker Container\n    const timePickerDiv = document.createElement('div');\n    timePickerDiv.classList.add('dg-date-picker__time-picker', 'dg-date-picker__multiple-select-box');\n    wrapper.appendChild(timePickerDiv);\n\n    // Helper to create a time button\n    function createTimeButton(buttonClasses: string, refName: string, textContent: string | null) {\n        const button = document.createElement('button');\n        button.className = buttonClasses;\n        button.setAttribute('ref', refName);\n\n        const span = document.createElement('span');\n        span.classList.add('dg-time-picker__text');\n        span.textContent = textContent;\n        button.appendChild(span);\n\n        const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n        svg.setAttribute('width', '24');\n        svg.setAttribute('height', '24');\n        svg.setAttribute('viewBox', '0 0 24 24');\n        svg.classList.add('dg-date-picker__icon--dropdown');\n        svg.setAttribute('fill', 'none');\n        svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n        const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n        path.setAttribute('d', \"M15 11.9909C15.0004 11.8999 14.9827 11.8098 14.9478 11.7258C14.9129 11.6417 14.8616 11.5655 14.7969 11.5016L10.1811 6.88583C10.0499 6.76353 9.87625 6.69696 9.69688 6.70012C9.51751 6.70328 9.34637 6.77594 9.21952 6.90279C9.09267 7.02965 9.01996 7.20078 9.01679 7.38015C9.01363 7.55952 9.0802 7.73313 9.2025 7.86438L13.329 11.9909L9.2025 16.1174C9.07285 16.2472 9 16.4232 9 16.6067C9 16.7901 9.07285 16.9661 9.2025 17.096C9.26615 17.1613 9.34228 17.2132 9.42631 17.2487C9.51034 17.2841 9.6006 17.3024 9.69181 17.3024C9.78301 17.3024 9.87327 17.2841 9.9573 17.2487C10.0413 17.2132 10.1175 17.1613 10.1811 17.096L14.7969 12.4802C14.862 12.4166 14.9136 12.3404 14.9485 12.2563C14.9834 12.1722 15.0009 12.0819 15 11.9909Z\");\n        svg.appendChild(path);\n        button.appendChild(svg);\n\n        return button;\n    }\n\n    const hourButton = createTimeButton(\n        \"dg-button__root dg-date-picker__time-model dg-date-picker__hour-input\",\n        \"HourElement\",\n        props.hour\n    );\n    timePickerDiv.appendChild(hourButton);\n\n    const minuteButton = createTimeButton(\n        \"dg-button__root dg-date-picker__time-model dg-date-picker__minute-input\",\n        \"MinuteElement\",\n        props.minute\n    );\n    timePickerDiv.appendChild(minuteButton);\n\n    if (props.hourCycle === 12 && props.meridian) {\n        const periodButton = document.createElement('button');\n        periodButton.className = \"dg-button__root dg-date-picker__time-model dg-date-picker__period-input\";\n        periodButton.setAttribute(\"ref\", \"MeridianElement\");\n\n        const periodSpan = document.createElement('span');\n        periodSpan.classList.add('dg-date-picker__time-holder');\n        periodSpan.textContent = props.meridian;\n        periodButton.appendChild(periodSpan);\n\n        const periodSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n        periodSvg.setAttribute('width', '24');\n        periodSvg.setAttribute('height', '24');\n        periodSvg.setAttribute('viewBox', '0 0 24 24');\n        periodSvg.classList.add('dg-date-picker__icon--dropdown');\n        periodSvg.setAttribute('fill', 'none');\n        periodSvg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n        const periodPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n        periodPath.setAttribute('d', \"M15 11.9909C15.0004 11.8999 14.9827 11.8098 14.9478 11.7258C14.9129 11.6417 14.8616 11.5655 14.7969 11.5016L10.1811 6.88583C10.0499 6.76353 9.87625 6.69696 9.69688 6.70012C9.51751 6.70328 9.34637 6.77594 9.21952 6.90279C9.09267 7.02965 9.01996 7.20078 9.01679 7.38015C9.01363 7.55952 9.0802 7.73313 9.2025 7.86438L13.329 11.9909L9.2025 16.1174C9.07285 16.2472 9 16.4232 9 16.6067C9 16.7901 9.07285 16.9661 9.2025 17.096C9.26615 17.1613 9.34228 17.2132 9.42631 17.2487C9.51034 17.2841 9.6006 17.3024 9.69181 17.3024C9.78301 17.3024 9.87327 17.2841 9.9573 17.2487C10.0413 17.2132 10.1175 17.1613 10.1811 17.096L14.7969 12.4802C14.862 12.4166 14.9136 12.3404 14.9485 12.2563C14.9834 12.1722 15.0009 12.0819 15 11.9909Z\");\n        periodSvg.appendChild(periodPath);\n        periodButton.appendChild(periodSvg);\n        timePickerDiv.appendChild(periodButton);\n    }\n\n    return wrapper;\n}\n\n\n\n\n// function dummTemplate(_props:any){\n// \tconst div = document.createElement('div');\n// \treturn div;\n\t\n// }\n\n\n\nexport class TimeNavBarView extends Component {\n\t@queryAssignedNodes('HourElement') hourElement !: any;\n\t@queryAssignedNodes('MinuteElement') minuteElement !: any;\n\t@queryAssignedNodes('MeridianElement') meridianElement !: any;\n\n\n\t// @queryAssignedNodes('previousMonthButton') previousMonthButton!: any;\n\t// @queryAssignedNodes('nextMonthButton') nextMonthButton!        : any;\n\t// @queryAssignedNodes('previousYearButton') previousYearButton!  : any;\n\t// @queryAssignedNodes('nextYearButton') nextYearButton!          : any;\n\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:TimeNavBarViewType  = this.getComponent()\n\n\t\tconst controller = this.createManagedBean(new TimeNavBarController());\n        this.renderTemplate(controller,component);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): TimeNavBarViewType {\n\t\treturn {\n\t\t\tgetElement         : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t\trerender           : (controller,comp) => this.rerender(controller,comp),\n\t\t\tgetParentComponent : () => this.getParentComponent(),\n\t\t\tgetHourElement: () => this.getHourElement(),\n\t\t\tgetMeridianElement: () => this.getMeridianElement(),\n\t\t\tgetMinuteElement: () => this.getMinuteElement(),\n\n\t\t}\n\n\t}\n\n\tprivate getHourElement(): HTMLElement {\n\t\treturn this.hourElement;\n\t}\n\n\tprivate getMeridianElement(): HTMLElement {\n\t\treturn this.meridianElement;\n\t}\n\t\n\tprivate getMinuteElement(): HTMLElement {\n\t\treturn this.minuteElement;\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\n\t// private getMonthYearButtons():{previousYearButton:HTMLElement,nextYearButton    : HTMLElement}{\n\t// \treturn{\n\t// \t\tpreviousYearButton: this.previousYearButton.eGui,\n\t// \t\tnextYearButton    : this.nextYearButton.eGui\n\t// \t}\n\t// }\n\n\n\tprivate renderTemplate(controller: TimeNavBarController, _component: TimeNavBarViewType) {\n\t\tconst props = controller.getProperty()\n        // const paramsProperty = controller.getParamsProperty()\n        const template = TimeNavBarTemplate(props)\n        this.setTemplate(template);\n    }\n\n\trerender(controller:TimeNavBarController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller,component);\n\t\tcontroller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n\t\n\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { SelectDropdownRootController } from \"../dropdown-root/dropdown-root-controller\";\nimport { DropdownController } from \"../dropdown/dropdown-controller\";\nimport { DropdownContainerController } from \"../dropdown-container/dropdownContainer-controller\";\nimport { SearchController } from \"../dropdown-search/dropdown-search-controller\";\nimport { SelectAllController } from \"../dropdown-selectAll/dropdown-selectAll-controller\";\nimport { DropdownCreateNewOptionController } from \"../dropdown-create-newoption/dropdown-create-newoption-controller\";\n\n@Bean(\"DROPDOWN_CONTROLLER_HANDLER\")\nexport class dropdownController extends EventEmitter{\n    private dropdownRootController !: SelectDropdownRootController;\n    private dropdownController !: DropdownController;\n    private dropdownContainerHandler  !: DropdownContainerController;\n    private searchController !: SearchController;\n    private selectAllController !: SelectAllController;\n    private dropdownCreateNewOptionController !: DropdownCreateNewOptionController;\n\n\n    registerDropdownComponent(dropdownRootController : SelectDropdownRootController) : void {\n        this.dropdownRootController = dropdownRootController;\n    }\n\n    getDropdownComponent() : SelectDropdownRootController{\n        return this.dropdownRootController;\n    }\n\n    registerDropdown(dropdownController : DropdownController) : void {\n        this.dropdownController = dropdownController;\n    }\n\n    getDropdown() : DropdownController{\n        return this.dropdownController;\n    }\n\n    registerDropdownContainer(dropdownContainerHandler : DropdownContainerController) : void {\n        this.dropdownContainerHandler = dropdownContainerHandler;\n    }\n\n    getDropdownContainer() : DropdownContainerController{\n        return this.dropdownContainerHandler;\n    }\n\n    registerSearch(searchController : SearchController) : void {\n        this.searchController = searchController;\n    }\n\n    getSearch() : SearchController{\n        return this.searchController;\n    }\n\n    registerSelectAllController(selectAllController : SelectAllController) : void {\n        this.selectAllController = selectAllController;\n    }\n\n    getSelectAllController() : SelectAllController{\n        return this.selectAllController;\n    }\n\n    registerDropdownCreateNewOptionController(dropdownCreateNewOptionController : DropdownCreateNewOptionController) : void {\n        this.dropdownCreateNewOptionController = dropdownCreateNewOptionController;\n    }\n\n    getDropdownCreateNewOptionController() : DropdownCreateNewOptionController{\n        return this.dropdownCreateNewOptionController;\n    }\n}\n","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport {CSSRegistry} from \"../../modules/CSSRegistry\";\n\n// const globalNameSpace = CSSRegistry.getNameSpaces();\n\nexport function getDropdownRootUtilityClass(slots: { slot: string, modifiers: string[] }): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('dropdown', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\nimport {DropdownContainerCompType} from \"./dropdownContainer.types\"\n// import { ISelectOptionHandler } from '../../../../select/src/core/model/select-option-handler.types';\nimport { AutoWired, BEAN_NAME } from '@dg/corecomponent';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\nimport { composeClasses } from '@dg/utils';\nimport { IDropdownOptionHandler } from '../model/dropdown-option-handler.types';\n\nconst useUtilityClasses = (_ownerState : any) =>{\n    // const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'container',\n            modifiers:[\n                // disabled && 'disabled',\n                // readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getDropdownRootUtilityClass);\n}\n\nexport class DropdownContainerController extends EventEmitter{\n\n    static DOM_KEY = '_DG_DROPDOWN_CONTAINER';\n\n    private domKey = `_DG_${Math.random().toString()}`;\n\n    comp!: DropdownContainerCompType;\n    searchComp!: HTMLElement; \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n\n\n\n    setComp(comp:DropdownContainerCompType){\n        this.comp = comp;\n        this.registerDropdownContainer();\n        this.applyClasses();\n        this.setAriaAttributes();\n\n        this.optionHandler.setDomData(comp.getElement(), DropdownContainerController.DOM_KEY, this.domKey);\n\n        this.addListener(this.comp.getElement(), 'focusout', (event : FocusEvent) => {\n            const elementWithFocus = event.relatedTarget as HTMLElement;\n\n            const focusInsideComponent = this.isElementFromParent(elementWithFocus);\n\n            const closeCallback = () => {\n                document.hasFocus() && this.optionHandler.onBeforeDropdownClose(false);\n            }\n\n            if(!focusInsideComponent) {\n                if(!this.isElementWithinCustomPopup(elementWithFocus)) {\n                    closeCallback();\n                }\n            }\n        })\n\n        // this.addListener(this.comp.getElement(), 'keydown', (event : KeyboardEvent) => {\n        //     if(event.key === ' ') {\n        //         this.optionHandler.onBeforeDropdownClose();\n        //     }\n        // })\n    }\n\n    setSearchComp(searchComp : HTMLElement){\n        this.searchComp = searchComp;\n    }\n\n    registerDropdownContainer(){\n        this.dropdownCtrlHandler.registerDropdownContainer(this);\n    }\n\n    private isElementWithinCustomPopup(element: HTMLElement): boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            if (pointer.classList.contains('ZG-has-popup')) {\n                return true;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n    private isElementFromParent(element : HTMLElement) : boolean {\n        let pointer: HTMLElement | null = element;\n        while (pointer) {\n            const uniqueKey = this.optionsHandler.getDomData(pointer, DropdownContainerController.DOM_KEY);\n            if(!!uniqueKey) {\n                const eventFromThisParent = uniqueKey === this.domKey;\n                return eventFromThisParent;\n            }           \n            pointer = pointer.parentElement;\n        }\n        return false;\n    }\n\n\n    private setAriaAttributes() {\n    }\n\n    private applyClasses() : void { \n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        let className = this.optionHandler.getClassName();\n        if (className) {\n            if (typeof className === 'string') {\n                this.comp.getElement().classList.add(className);\n            } else if (Array.isArray(className)) {\n                (className as string[]).forEach(c => this.comp.getElement().classList.add(c));\n            }\n        }\n    }\n\n    // private refresh() : void {\n    //     this.applyClasses();\n    // }\n\n    private getOwnerState() {\n        return {\n            // disabled: this.optionHandler.isDisabled(),\n            // readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n\n     getProperty(){\n        return {\n            options : this.optionHandler.getOptions(),\n            isSearchable : ()=>this.optionHandler.isSearchable(),\n            isSelectAll : ()=>this.optionHandler.isSelectAllButtonEnabled(),\n            isMultiple : ()=>this.optionHandler.isMultiple(),\n        }\n    }\n\n    focus(){\n        this.comp.getElement().focus({\n            preventScroll :true \n        });\n        this.optionHandler.onFocus();   \n    }\n\n    blur(){\n        this.comp.getElement().blur();\n        this.optionHandler.onBlur();\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct } from \"@dg/corecomponent\";\nimport { DropdownContainerCompType } from \"./dropdownContainer.types\";\nimport { DropdownContainerController } from \"./dropdownContainer-controller\"\n\nconst dropdownContainer = (_props: any) =>{\n    const DropdownContainer = document.createElement(\"div\");\n    DropdownContainer.tabIndex = 0;\n    // DropdownContainer.className ='select-dropdown-container'\n\n    // if(props.isSearchable()){\n    //     const searchComp = document.createElement(\"dropdown-search\");\n    //     DropdownContainer.appendChild(searchComp);\n    // }\n\n    // if(props.isSelectAll() && props.isMultiple()){\n    //     const selectall = document.createElement(\"select-all\");\n    //     DropdownContainer.appendChild(selectall);\n    // }\n \n    // const dropdownComp = document.createElement(\"dropdown\");\n    // DropdownContainer.appendChild(dropdownComp);\n\n    const dropdownHeaderComp =  document.createElement(\"dropdown-header-container\");\n    DropdownContainer.appendChild(dropdownHeaderComp);\n\n    const dropdownBodyComp =  document.createElement(\"dropdown-body-container\");\n    DropdownContainer.appendChild(dropdownBodyComp);\n\n    const dropdownFooterComp =  document.createElement(\"dropdown-footer-container\");\n    DropdownContainer.appendChild(dropdownFooterComp);\n\n    return DropdownContainer;\n}\n\n\nexport class DropdownContainerComponent extends Component {\n    @PostConstruct()\n    init(){\n        const comp:DropdownContainerCompType = {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n        }\n        const controller = this.createManagedBean(new DropdownContainerController());\n        const props = controller.getProperty();\n\n        const DropdownContainer =  dropdownContainer(props);\n        this.setTemplate(DropdownContainer);\n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n}","export const DROPDOWN_DROPDWON_BEAN_NAME = {\n\tDROPDOWN_API: 'dropdownApi',\n\tDROPDOWN_CONFIGURATION: 'configuration',\n\tCSSCLASSNAMEGENERATOR: 'CSSClassNameGenerator',\n\tDROPDOWN_OPTIONS_HANDLER: 'dropdownOptionsHandler',\n\tFORMATTER: 'formatter',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tDROPDOWN_EVENT_HANDLER: 'dropdownEventHandler',\n\tDROPDOWN_CONTROLLER_HANDLER: 'dropdownControllerHandler',\n};","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { dropdownController } from \"./dropdown-handler\";\nimport {IDropdownDataPart} from \"./dropdown-ds\";\nimport { DROPDOWN_DROPDWON_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { Intiator, DropdownOptionElementModel } from \"../../../dropdown_configuration\";\n\nexport interface IDropdownAPI{\n    destroy():void;\n    clear():void;\n    onSearch(value : string):void;\n    autoFocusSelectedOption() :void;\n\n    getElement():HTMLElement,\n    clear():void,\n    select(option : string  | DropdownOptionElementModel, initiator ?: Intiator):void,\n    deselect(option : string  | DropdownOptionElementModel, initiator ?: Intiator):void,\n    getSelectedOptions():DropdownOptionElementModel[],\n\n\n    destroy():void,\n    focus():void,\n    autoFocusSelectedOption():void,\n    blur():void\n\n    updateVirtualList():void,\n    updateSelectedOption(options:DropdownOptionElementModel[]):void,\n    addOptions(options:string[] | DropdownOptionElementModel[]):void,\n    removeOptions(options:string[] | DropdownOptionElementModel[]):void,\n    onSearch(value : string):void\n    disableOptions(optionIDs : string[]) : void;\n    enableOptions(optionIDs : string[]) : void;\n}\n@Bean(DROPDOWN_DROPDWON_BEAN_NAME.DROPDOWN_API)\nexport class DropdownAPI extends EventEmitter implements IDropdownAPI {\n\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") dropdownHandler !: dropdownController;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    \n\n    getElement():HTMLElement{\n        return this.dropdownHandler.getDropdownComponent().getElement();\n    }\n\n    clear():void{\n        this.dropdownHandler.getDropdown().clearAllSelectedOptions();\n    }\n\n    select(option : string  | DropdownOptionElementModel , initiator:Intiator =  \"API\"):void{\n        if (typeof option === 'string') {\n            this.dropdownDatapart.selectOption(option,initiator);\n        } else  if (typeof option === 'object')  {\n            this.dropdownDatapart.selectOption(option?.id, initiator);\n        }\n\n        this.dispatchEvent({\n            type : \"EVENT_OPTION_ADDED\"\n        })\n    }\n\n    deselect(option : string  | DropdownOptionElementModel, initiator:Intiator =  \"API\"):void{\n        if (typeof option === 'string') {\n            this.dropdownDatapart.deSelectOption(option,initiator);\n        } else  if (typeof option === 'object')  {\n            this.dropdownDatapart.deSelectOption(option?.id,initiator);\n        }\n         this.dispatchEvent({\n            type : \"EVENT_OPTION_REMOVED\"\n        })\n    }\n\n    getSelectedOptions():DropdownOptionElementModel[]{\n        return this.dropdownDatapart.getSelectedOptions();\n    };\n\n\n    //Common APIs\\\n    destroy():void{\n        const dropdownController =  this.dropdownHandler.getDropdownComponent();\n           if(dropdownController){\n               dropdownController.destroy();\n           }\n    }\n   \n   \n    focus():void{\n        const searchController = this.dropdownHandler.getSearch();\n        const isLoaded =this.dropdownDatapart.getIsLoaded();\n        if(searchController && isLoaded){\n            searchController.focus();\n        }\n        else{\n            this.dropdownHandler.getDropdownContainer()?.focus();\n        }\n    }\n\n    autoFocusSelectedOption():void{\n        this.dropdownDatapart.autoFocusSelectedOption();\n        const searchController = this.dropdownHandler.getSearch();\n        searchController?.focus();\n    }\n\n    blur():void{\n        const searchController = this.dropdownHandler.getSearch();\n        if(searchController){\n            searchController.blur();\n        }\n        else{\n            this.dropdownHandler.getDropdownContainer().blur();\n        }\n    }\n\n    updateVirtualList():void{\n\n        const dropdownController =  this.dropdownHandler.getDropdown();\n        if(dropdownController){\n            dropdownController.updateVirtualList();\n        }\n    }\n\n    updateSelectedOption(options:DropdownOptionElementModel[]):void{\n        this.dropdownDatapart.setSelectedOption(options);\n    }\n\n    addOptions(options:string[] | DropdownOptionElementModel[]):void{\n        options.forEach(option => {\n            (typeof option === 'object') ? this.dropdownHandler.getDropdown().addOption(option) : this.dropdownHandler.getDropdown().addOption({id : option, value : option});\n        });\n        // this.dropdownHandler.getDropdown()?.reRender();\n        // this.dropdownHandler.getSearch()?.focus();\n    }\n\n    removeOptions(options:string[] | DropdownOptionElementModel[]):void{\n        options.forEach(option => {\n            this.dropdownHandler.getDropdown().removeOption(option);\n        });\n        this.dropdownHandler.getDropdown().reRender();\n        this.dropdownHandler.getSearch()?.focus();\n    }\n\n    onSearch(value : string):void{\n        this.dropdownHandler.getSearch()?.onSearch(value)\n    }\n\n    disableOptions(optionIDs : string[]) : void {\n        this.dropdownDatapart.setOptionsDisabled(optionIDs, true);\n    }\n\n    enableOptions(optionIDs : string[]) : void {\n        this.dropdownDatapart.setOptionsDisabled(optionIDs, false);\n    }\n\n    hasOption(optionID : string) : boolean {\n        return this.dropdownDatapart.hasOption(optionID)\n    }\n}\n","import { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { SelectDropdownOptionController } from \"../dropdown-option/dropdown-option-controller\";\nimport { Intiator, DropdownOptionElementModel } from \"../../../dropdown_configuration\";\nimport { IDropdownOptionHandler } from \"./dropdown-option-handler.types\";\n\nexport interface IDropdownDataPart{\n    getOption()                                                               : any,\n    getAllOptions()                                                           : DropdownOptionElementModel[],\n    filterOptions(value:string)                                               : void,\n    getFilteredOptions()                                                      : DropdownOptionElementModel[],\n    getOptionController(index:number)                                         : SelectDropdownOptionController,\n    updateOptionsController(optionController : SelectDropdownOptionController): void,\n    getOptionIndex()                                                          : number,\n    setSelectedOption(options:DropdownOptionElementModel[])                   : void,\n    getSelectedOptions()                                                      : DropdownOptionElementModel[],\n    getAllOptionsIntance()                                                    : SelectDropdownOptionController[],\n    updateSelectedOptions(option:DropdownOptionElementModel)                  : void,\n    deleteSelectedOption(option:DropdownOptionElementModel)                   : void,\n    deleteAllSelectedOptions()                                                : void,\n    getDefaultSelectedOptions()                                               : string[],\n    selectOption (selectedOption:string,initiator ?:Intiator )                : void,\n    deSelectOption(selectedOption:string,initiator ?:Intiator )               : void,\n    updateFilteredOptions(option : DropdownOptionElementModel)                : void,\n    reset()                                                                   : void,\n    autoFocusSelectedOption()                                                 : void\n    getIsLoaded()                                                             : boolean;\n    isSelectAll()                                                             : boolean;\n    getOptions()                                                              : DropdownOptionElementModel[]\n    removeOptions(options: DropdownOptionElementModel[])                      : void;\n    addOptions(options: DropdownOptionElementModel[])                         : void;\n    setOptionsDisabled(optionIDs: string[], disabled: boolean)                : void\n    hasOption(optionID : string)                                              : boolean;\n\n}\n\n\n@Bean(\"Dropdown_Datapart\")\nexport class DropdownDataPart extends EventEmitter implements IDropdownDataPart{\n\n    optionsController    : SelectDropdownOptionController[] = [];\n    options              : DropdownOptionElementModel[] = [];\n    elementsValue        : number = 0;\n    filteredOptions      : DropdownOptionElementModel[] = [];\n    selectedOptions      : DropdownOptionElementModel[] = [];\n\n    \n    // options             !: DropdownOptionElementModel[];\n    // elementsValue       !: number;\n    // optionIds           !: string[];\n    // optionsController   !: any;\n    // filteredOptions     !: any;\n    // selectedOptions     !: any;\n\n    private isLoaded : boolean = false;\n\n\n\n\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected dropdownOptionHandler!: IDropdownOptionHandler;\n\n    sortByValueAscending = (a: { value?: string }, b: { value?: string }): number => {\n        if (!a?.value || !b?.value) return 0; \n        if (a.value.toLowerCase() < b.value.toLowerCase()) return -1;\n        if (a.value.toLowerCase() > b.value.toLowerCase()) return 1;\n        return 0;\n    };\n    sortByValueDescending = (a: { value?: string }, b: { value?: string }): number => {\n        if (!a?.value || !b?.value) return 0; \n        if (a.value.toLowerCase() > b.value.toLowerCase()) return -1;\n        if (a.value.toLowerCase() < b.value.toLowerCase()) return 1;\n        return 0;\n    };\n\n\n\n    @PostConstruct()\n    init(){\n        const model = this.optionsHandler.getDropdownModel();\n        const options = this.optionsHandler.getOptions()\n        if(model === 'remote' && typeof options === 'function') {\n            options({\n                onSuccess : (data : DropdownOptionElementModel[]) => {\n                    this.optionsController = [];\n                    this.options = data;\n                    this.elementsValue = 0;\n                    this.dropdownOptionHandler.isSortEnabled() && this.sortOptions(this.dropdownOptionHandler.getSortOrder() ??  \"asc\");\n                    this.options.forEach(opt => {\n                        opt.selected = this.selectedOptions.some(sel => sel.value === opt.value);\n                    });\n                    this.filteredOptions =  this.options.map((option:DropdownOptionElementModel)=> option);\n                    this.selectedOptions = [];\n\n                    this.isLoaded = true;\n\n                    this.dispatchEvent({\n                        type : \"EVENT_OPTION_LOADED\"\n                    })\n                },\n                onFailure : () => {\n\n                }\n            })\n        }else {\n            this.optionsController = [];\n            this.options = this.optionsHandler.getOptions();\n            this.elementsValue = 0;\n            this.dropdownOptionHandler.isSortEnabled() && this.sortOptions(this.dropdownOptionHandler.getSortOrder() ??  \"asc\");\n            this.options.forEach(opt => {\n                opt.selected = this.selectedOptions.some(sel => sel.value === opt.value);\n            });\n            this.filteredOptions =  this.options.map((option:DropdownOptionElementModel)=> option);\n            this.selectedOptions = [];\n            this.isLoaded = true;\n        }\n       \n    }\n\n    getOption(){\n        const option = this.filteredOptions[this.elementsValue];\n        this.elementsValue++;\n        return option;\n    }\n\n    getAllOptions():DropdownOptionElementModel[]{\n        return this.filteredOptions;\n    }\n\n    getOptionIndex():number{\n        return this.elementsValue;\n    }\n\n    filterOptions(value:string){\n        const options = this.options.map((option:any)=> option);\n        this.filteredOptions = options.filter((option:DropdownOptionElementModel) => option?.value?.toLowerCase().includes(value.toLowerCase()));\n        this.elementsValue = 0;\n        this.optionsController= [];\n        this.dispatchEvent({\n            type : \"EVENT_DATA_UPDATED\"\n        })\n    }\n\n    updateFilteredOptions(option : DropdownOptionElementModel):void {\n        this.filteredOptions.push(option);\n    }\n\n    getFilteredOptions(){\n        return this.filteredOptions;\n    }\n\n    getOptionController(index:number) : SelectDropdownOptionController{\n        return this.optionsController[index];\n    }\n\n    updateOptionsController(optionController : SelectDropdownOptionController) :  void{\n        this.optionsController.push(optionController);\n    }\n\n    setSelectedOption(options:DropdownOptionElementModel[]):void{\n        this.selectedOptions = options;\n    }\n\n    getSelectedOptions(): DropdownOptionElementModel[]{\n        return this.selectedOptions;\n    }\n\n    updateSelectedOptions(option:DropdownOptionElementModel):void{\n        if (!this.selectedOptions.find(({ id }) => id === option.id)) {\n            option.selected = true;\n            this.selectedOptions.push(option);\n            this.dispatchEvent({\n                type : 'EVENT_OPTION_SELECTION_UPDATED'\n            })\n        }\n    }\n\n    deleteSelectedOption(option:DropdownOptionElementModel):void{\n        const index = this.selectedOptions.indexOf(option);\n        if(index > -1){\n            option.selected = false;\n            this.selectedOptions.splice(index, 1);\n             this.dispatchEvent({\n                type : 'EVENT_OPTION_SELECTION_UPDATED'\n            })\n        }\n    }\n\n    deleteAllSelectedOptions():void{\n        this.selectedOptions = [];\n    }\n\n    getAllOptionsIntance():SelectDropdownOptionController[]{\n        return this.optionsController;\n    }\n\n    sortOptions(sortOrder:string){\n        let sortedOptions:any[];\n        if(sortOrder === 'none'){\n            this.options =  this.optionsHandler.getOptions();\n        }\n        else{\n            sortedOptions = (sortOrder==\"asc\") ? this.options.sort(this.sortByValueAscending) : this.options.sort(this.sortByValueDescending);\n            this.options = sortedOptions;\n        }\n    }\n\n    getDefaultSelectedOptions():string[]{\n        const selectedOptionsData  = this.dropdownOptionHandler.getSelectedData();\n        return selectedOptionsData ?? [];\n    }\n\n    // used for select and deselect option via api \n\n    getOptionControllerByOption(selectedOptionId: string): SelectDropdownOptionController | null {\n        const index = this.optionsController.findIndex(\n            controller => controller.getValue().id === selectedOptionId\n        );\n\n        return index >= 0 ? this.optionsController[index] : null;\n    }\n\n    selectOption (selectedOptionId:string, initiator :Intiator = \"API\"):void{\n        const selectedOptionController = this.getOptionControllerByOption(selectedOptionId);\n        selectedOptionController?.selectOption(initiator);\n        selectedOptionController?.refresh();\n    }\n    \n    deSelectOption(selectedOptionId: string, initiator: Intiator = \"API\"): void {\n        const selectedOptionController = this.getOptionControllerByOption(selectedOptionId);\n\n        if (selectedOptionController) {\n            // Case 1: Controller exists for this option\n            selectedOptionController.deSelectOption(initiator);\n            selectedOptionController.refresh();\n        } else {\n            const option = this.options.find(option => option.id === selectedOptionId);\n\n            if (!option) {\n                return;\n            }\n\n            const params = this.createParams(option, initiator, this.isBeforeSelectALL(-1), false);\n            const canDeselect = this.optionsHandler.onBeforeDeselect(params);\n\n            if (canDeselect) {\n                this.deleteSelectedOption(option);\n                this.optionsHandler.onAfterDeselect(params);\n            }\n        }\n    }\n\n    reset():void{\n        this.optionsController = [];\n        this.elementsValue = 0\n        this.dropdownOptionHandler.isSortEnabled() && this.sortOptions(this.dropdownOptionHandler.getSortOrder() ??  \"none\");\n        this.filteredOptions =  this.options.map((option:DropdownOptionElementModel)=> option);\n    }\n\n    autoFocusSelectedOption() : void{\n        if(this.selectedOptions.length > 0 &&  this.optionsHandler.isautoFocusSelectedOptionEnabled()){\n            const selectedOptionId = this.selectedOptions[0]?.id;\n            const optionController = this.getOptionControllerByOption(selectedOptionId);\n            optionController?.setHoveredOption();\n        }\n    }\n\n    getIsLoaded() : boolean {\n        return this.isLoaded;\n    }\n\n    isSelectAll(): boolean {\n        const enabledOptions = this.options.filter(opt => !opt.disabled);\n        const selectedEnabled = enabledOptions.filter(opt => this.selectedOptions.includes(opt));\n\n        return enabledOptions.length > 0 && enabledOptions.length === selectedEnabled.length;\n    }\n\n    getOptions() :DropdownOptionElementModel[] {\n        return this.options;\n    }\n\n    addOptions(options : DropdownOptionElementModel[]) : void {\n        this.options.push(...options);\n    }\n\n    removeOptions(options: DropdownOptionElementModel[]): void {\n        const idsToRemove = new Set(options.map(opt => opt.id));\n        this.options = this.options.filter(opt => !idsToRemove.has(opt.id));\n    }\n\n   setOptionsDisabled(optionIDs: string[], disabled: boolean): void {\n        this.options.forEach((option) => {\n            if (optionIDs.includes(option.id)) {\n                option.disabled = disabled;\n                const controller = this.getOptionControllerByOption(option.id);\n                if(controller) {\n                    controller.updateDisabled(disabled);\n                }\n            }\n        });\n    }\n\n    hasOption(optionID : string) : boolean {\n        if(this.filteredOptions.length !== 0) {\n            return this.filteredOptions.some((option) => option.id === optionID);\n        }\n\n        return false;\n    }\n\n    private isBeforeSelectALL(count:number) : boolean {\n        return this.getSelectedOptions().length + count === this.getOptions().length;\n    }\n\n    private createParams(option : DropdownOptionElementModel, initiator : Intiator, selectALL : boolean, selectAllTriggered : boolean):any {\n        return{\n            value : option,\n            initiator,\n            selectAll           : selectALL,\n            selectAllTriggered: selectAllTriggered\n        }\n    }\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { IDropdownUserComponentHandlerTypes } from './dropdown-user-component-handler.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER           = 'prefixRenderer',\n\tSUFFIX_RENDERER           = 'suffixRenderer',\n\tHELPER_TEXT_RENDERER      = 'helpTextRenderer',\n\tBUTTON_RENDERER           = 'buttonRenderer',\n\tDROPDOWN_OPTION_RENDERER  = 'dropdownOptionRenderer',\n\tSELECTED_VALUE_RENDERER   = 'selectedValueRenderer',\n\tDROPDOWN_RENDERER         = 'dropdownRenderer',\n\tCREATE_NEWOPTION_RENDERER = 'createNewOptionRenderer',\n\tDROPDOWN_FOOTER_RENDERER  = 'dropdownFooterRenderer',\n\tDROPDOWN_HEADER_RENDERER  = 'dropdownHeaderRenderer',\n\tNO_OPTION_RENDERER        = 'noOptionRenderer',\n\tLOADING_RENDERER          = 'loadingRenderer'\n\t\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class DropdownUserComponentHandler extends UserComponentHandler implements IDropdownUserComponentHandlerTypes{\n\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\t\n\tgetDropdownOptionRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.DROPDOWN_OPTION_RENDERER, params, PropertyName.DROPDOWN_OPTION_RENDERER)\n\t}\n\tgetSelectedValueRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SELECTED_VALUE_RENDERER, params, PropertyName.SELECTED_VALUE_RENDERER)\n\t}\n\n\tgetDropdownRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.DROPDOWN_RENDERER, params, PropertyName.DROPDOWN_RENDERER);\n\t}\n\n\tgetCreateNewOptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.CREATE_NEWOPTION_RENDERER, params, PropertyName.CREATE_NEWOPTION_RENDERER);\n\n\t}\n\n\tgetDropdownFooterRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.DROPDOWN_FOOTER_RENDERER, params, PropertyName.DROPDOWN_FOOTER_RENDERER);\n\t}\n\n\tgetDropdownHeaderRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.DROPDOWN_HEADER_RENDERER, params, PropertyName.DROPDOWN_HEADER_RENDERER);\n\t}\n\n\tgetNoOptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.NO_OPTION_RENDERER, params, PropertyName.NO_OPTION_RENDERER);\n\t}\n\n\tgetLoadingRendererDetails(item : any, params : any)  : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.LOADING_RENDERER, params, PropertyName.LOADING_RENDERER);\n\t}\n\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\t\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DROPDOWN_OPTION_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DROPDOWN_RENDERER:\n\t\t\t\t  return item.getRenderer();\n\t\t\tcase PropertyName.CREATE_NEWOPTION_RENDERER:\n\t\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DROPDOWN_FOOTER_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DROPDOWN_HEADER_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.NO_OPTION_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.LOADING_RENDERER:\n\t\t\t\treturn item.getRenderer();\n            \n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n                return this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.DROPDOWN_OPTION_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.DROPDOWN_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.CREATE_NEWOPTION_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.DROPDOWN_FOOTER_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.DROPDOWN_HEADER_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.NO_OPTION_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.LOADING_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n\tgetHelperTextRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\n\n}\n","\nexport class DefaultLabelRenderer{\n    params :any;\n    dom    !: HTMLElement;\n\tinit(params: any): void {\n        this.params = params;\n    }\n\tgetElement(): HTMLElement {\n        const label = document.createElement(\"label\");\n        label.classList.add(\"dg-dropdown__option-label\");\n    \n        const labelText = document.createElement(\"div\");\n        labelText.classList.add(\"dg-dropdown__option-label-text\");\n        if(this.params?.option?.label) {\n            labelText.textContent = this.params?.option?.label || \"\";\n\n        }else{\n            labelText.textContent = this.params?.option?.value || \"\";\n\n        }\n    \n        label.appendChild(labelText);\n    \n        this.dom = label;\n        return this.dom;\n    }\n    \n\tdestroy(): void {\n        this.dom.remove();\n    }\n}\n","\nexport class DefaultSingleSelectChipRenderer{\n    params :any;\n    dom    !: HTMLElement;\n\tinit(params: any): void {\n        this.params = params;\n    }\n\tgetElement(): HTMLElement {\n        const rootDiv = document.createElement(\"div\");\n        rootDiv.classList.add(\n            \"dg-chip__root\",\n            \"dg-chip__root--readonly\",\n            \"dg-chip--filled\",\n            \"dg-chip--default\"\n        );\n        rootDiv.setAttribute(\"tabindex\", \"-1\");\n        rootDiv.setAttribute(\"role\", \"status\");\n        rootDiv.setAttribute(\"aria-disabled\", \"false\");\n        rootDiv.setAttribute(\"aria-readonly\", \"true\");\n    \n        if (this.params?.option?.color) {\n            rootDiv.style.backgroundColor = this.params.option.color;\n        }\n    \n        const labelWrapper = document.createElement(\"div\");\n        labelWrapper.classList.add(\"dg-chip__label-wrapper\");\n        labelWrapper.setAttribute(\"ref\", \"chip-label\");\n    \n        const labelSpan = document.createElement(\"span\");\n        labelSpan.classList.add(\"dg-chip__label\");\n        labelSpan.textContent = this.params?.option?.value || \"\";\n    \n        labelWrapper.appendChild(labelSpan);\n        rootDiv.appendChild(labelWrapper);\n    \n        this.dom = rootDiv;\n        return this.dom;\n    }\n    \n\tdestroy(): void {\n        this.dom.remove();\n    }\n    \n}\n\n\nexport class DefaultMultiSelectChipRenderer{\n    params :any;\n    dom    !: HTMLElement;\n\tinit(params: any): void {\n        this.params = params;\n    }\n\tgetElement(): HTMLElement {\n        const label = document.createElement(\"label\");\n        label.classList.add(\"dg-dropdown__option-label\");\n    \n        // Checkbox Input\n        const checkbox = document.createElement(\"input\");\n        checkbox.setAttribute(\"tabindex\", \"-1\");\n        checkbox.setAttribute(\"type\", \"checkbox\");\n        checkbox.classList.add(\"dg-dropdown__option-checkbox-input\");\n        checkbox.setAttribute(\"role\", \"checkbox\");\n        checkbox.setAttribute(\"aria-disabled\", \"false\");\n        checkbox.setAttribute(\"aria-checked\", \"true\");\n        checkbox.setAttribute(\"aria-label\", \"checkbox\");\n    \n        // Custom Checkbox Styling Span\n        const customCheckbox = document.createElement(\"span\");\n        customCheckbox.classList.add(\"dg-dropdown__option-checkbox-input--custom\");\n        customCheckbox.style.setProperty(\"--checked-border-color\", \"black\");\n        customCheckbox.style.setProperty(\"--checked-fill-color\", \"red\");\n        customCheckbox.style.setProperty(\"--unchecked-border-color\", \"green\");\n    \n        // Chip Root\n        const chipRoot = document.createElement(\"div\");\n        chipRoot.classList.add(\n            \"dg-chip__root\",\n            \"dg-chip__root--readonly\",\n            \"dg-chip--filled\",\n            \"dg-chip--default\"\n        );\n        chipRoot.setAttribute(\"tabindex\", \"-1\");\n        chipRoot.setAttribute(\"role\", \"status\");\n        chipRoot.setAttribute(\"aria-disabled\", \"false\");\n        chipRoot.setAttribute(\"aria-readonly\", \"true\");\n    \n        if (this.params?.option?.color) {\n            chipRoot.style.backgroundColor = this.params.option.color;\n        }\n    \n        // Chip Label Wrapper\n        const labelWrapper = document.createElement(\"div\");\n        labelWrapper.classList.add(\"dg-chip__label-wrapper\");\n        labelWrapper.setAttribute(\"ref\", \"chip-label\");\n    \n        // Chip Label\n        const chipLabel = document.createElement(\"span\");\n        chipLabel.classList.add(\"dg-chip__label\");\n\n        \n        if(this.params?.option?.label) {\n            chipLabel.textContent = this.params?.option?.label || \"\";\n        chipLabel.setAttribute(\"title\", this.params?.option?.label || \"\");\n        }else{\n        chipLabel.setAttribute(\"title\", this.params?.option?.value || \"\");\n        chipLabel.textContent = this.params?.option?.value || \"\";\n\n        }\n    \n        // Build the structure\n        labelWrapper.appendChild(chipLabel);\n        chipRoot.appendChild(labelWrapper);\n        label.appendChild(checkbox);\n        label.appendChild(customCheckbox);\n        label.appendChild(chipRoot);\n    \n        this.dom = label;\n        return this.dom;\n    }\n    \n\tdestroy(): void {\n        this.dom.remove();\n    }\n    \n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { SelectDropdownOptionCompType } from \"./dropdown-option.types\";\n\n\nimport { AutoWired, BEAN_NAME, setAriaDisabled, setAriaLabel, setAriaRole, setAriaSelected } from \"@dg/corecomponent\";\n\nimport { IDropdownDataPart } from \"../model/dropdown-ds\";\nimport { dropdownController } from \"../model/dropdown-handler\";\nimport { getDropdownRootUtilityClass } from \"../dropdown-root/dropdown-root-classes\";\nimport { composeClasses } from \"@dg/utils\";\nimport { DROPDOWN_DROPDWON_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { IDropdownAPI } from \"../model/dropdown-api\";\nimport { Intiator, DropdownOptionElementModel } from \"../../../dropdown_configuration\";\n// import { Chip } from \"../../../../chip/chip\";\n// import { IChipConfiguration } from \"../../../../chip/chip-configuration.types\";\nimport { IDropdownOptionHandler } from \"../model/dropdown-option-handler.types\";\nimport { DropdownUserComponentHandler } from \"../model/dropdown-user-component-handler\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { DefaultLabelRenderer } from \"../../component/DefaultLabelRenderer\";\nimport { DefaultMultiSelectChipRenderer, DefaultSingleSelectChipRenderer } from \"../../component/DefaultChipRenderer\";\n// import { DropdownUserComponentHandler } from \"../model/dropdown-user-component-handler\";\n\nconst useUtilityClasses = (ownerState : any) =>{\n    const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'option',\n            modifiers:[\n                disabled && 'disabled',\n                readonly &&'readonly',\n            ],\n        },\n    };\n    return composeClasses(slots, getDropdownRootUtilityClass);\n}\n\n\n\nexport class SelectDropdownOptionController extends EventEmitter{\n    comp !: SelectDropdownOptionCompType;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: IDropdownOptionHandler;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart!: IDropdownDataPart;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") dropdownHandler !: dropdownController;\n    @AutoWired(DROPDOWN_DROPDWON_BEAN_NAME.DROPDOWN_API) dropdownAPI!: IDropdownAPI;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n    // @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) private UserComponentHandler!: DropdownUserComponentHandler;\n\n    index = 0;\n    option!: DropdownOptionElementModel;\n    checkbox !:any;\n    item !:any;\n\n    setValue(){\n        this.option = this.dropdownDatapart.getOption();\n        this.index = this.dropdownDatapart.getOptionIndex()-1;\n    }\n\n    setComp(comp:SelectDropdownOptionCompType){\n        this.comp = comp;\n        // this.setRenderer();\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n        this.setRendererDetails();\n        this.setOptionHidden();\n        this.dropdownDatapart.updateOptionsController(this);\n        this.isSelected() && this.focus();\n\n    }\n\n    private setOptionHidden() {\n        const element = this.comp.getElement();\n        const isHidden = this.option.dropdownHidden ?? false;\n        element.classList.toggle(\"ZG-hidden\", isHidden);\n    }\n\n    registerCheckboxElement(checkbox:any){\n        this.checkbox = checkbox;\n    }\n\n\n\n    private setAriaAttributes() {\n        const element = this.comp.getElement();\n        setAriaRole(element ,'option');\n        setAriaLabel(element,this.option?.value ?? '');\n        setAriaSelected(element ,this.isSelected());\n        setAriaDisabled(element ,this.option.disabled ?? false);\n    }\n\n    private applyClasses() : void {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        const isSelected = this.isSelected();\n        isSelected ?this.comp.getElement().classList.add('dg-dropdown__option--selected') : this.comp.getElement().classList.remove('dg-dropdown__option--selected');\n    }\n\n     refresh() : void {\n        this.applyClasses();\n        this.setAriaAttributes();\n    }\n\n    private getOwnerState() {\n        return {\n            disabled: this.option.disabled ?? false,\n            readonly: this.option.readonly ?? false,\n        }\n\t}\n\n\n\n    private registerEventHandler(){\n        const element = this.comp.getElement();\n        const searchComp =  this.dropdownHandler.getSearch();\n        const ownerState = this.getOwnerState();\n\n        if(ownerState.disabled || ownerState.readonly){\n            return ;\n        }\n\n        element.addEventListener(\"mouseover\",(_event)=>{\n            this.setHoveredOption();\n        });\n         element.addEventListener(\"mouseout\",(_event)=>{\n            this.cleatHoverOptions();\n        });\n\n\n        element.addEventListener(\"click\",(event)=>{\n            event.preventDefault()\n            this.clickOption(event,  this.dropdownDatapart.isSelectAll());\n        });\n\n        this.addListener(element, 'keydown', (event: KeyboardEvent) => {\n\n            const isCharacter = event.key.length === 1 && /[a-zA-Z0-9]/.test(event.key);\n            // let focusedIndex = -1;\n            if (isCharacter || event.key === \"Backspace\") {\n                searchComp.focus();\n                event.stopPropagation();\n                return;\n              }\n\n            switch(event.key){\n\n                case 'Enter' :\n                    case ' ' :\n                    event.preventDefault();\n                    const focusedOptionContrl = this.dropdownDatapart.getOptionController(this.index);\n                    if(focusedOptionContrl){\n                        focusedOptionContrl.clickOption(event,  this.dropdownDatapart.isSelectAll());\n                        focusedOptionContrl.focus();\n                    }\n                    event.stopPropagation();\n                    break;\n\n                case 'Escape' : \n                //     this.dropdownAPI.destroy();\n                    this.optionsHandler.onBeforeDropdownClose();\n                     break;\n                case ' ':\n                    this.optionHandler.onBeforeDropdownClose();\n\n                default : break;\n\n            }\n            // searchComp?.focus();\n        })\n        \n    }\n\n    setHoveredOption(){\n        this.dropdownHandler.getDropdownComponent().setHoveredOption(null, this.index);\n    }\n\n    cleatHoverOptions(){\n        this.dropdownHandler.getDropdownComponent().resetFocuesdOption();\n    }\n\n    isBeforeSelectALL(count:number) : boolean {\n        return this.dropdownDatapart.getSelectedOptions().length + count === this.dropdownDatapart.getOptions().length;\n    }\n\n    clickOption(event: Event, selectALL : boolean, force : boolean = false, selectAllTriggered : boolean = false){\n\n        if(this.option.disabled) {\n            return;\n        }\n\n        const isSelected = this.isSelected();\n\n        const isMultiple = this.optionHandler.isMultiple();\n        const params =  this.createParams(\"UI\", force ? selectALL : this.isBeforeSelectALL(isSelected ? -1 : 1), selectAllTriggered);\n\n        if(!isMultiple && isSelected) {\n            const closeOnSelect = this.optionHandler.isCloseOnSelect();\n            if(closeOnSelect) {\n                this.optionHandler.onBeforeDropdownClose();\n            }\n            return;\n        }\n        \n        if(!isSelected){\n            const value = this.optionHandler.onBeforeSelect(params);\n            if(value) {\n                this.dropdownDatapart.updateSelectedOptions(this.option);\n                this.optionHandler.onAfterSelect(params);\n            }\n        }\n        else{\n            const value = this.optionHandler.onBeforeDeselect(params);\n            if(value) {\n                this.dropdownDatapart.deleteSelectedOption(this.option);\n                this.optionHandler.onAfterDeselect(params);\n            }\n        }\n        // this.optionHandler.isMultiple() && this.updateCheckBox(isSelected);\n\n        (this.dropdownDatapart?.selectOption?.length != this.optionHandler?.getOptions()?.length) && this.dropdownHandler?.getSelectAllController()?.clearSelectAllCheckbox();  \n\n        this.refresh();\n\n        this.dropdownHandler.getDropdownComponent().applyFocusToActiveOption();\n        event.stopPropagation();\n    }\n\n    // updateCheckBox(isSelected : boolean){\n    //     this.comp.getCheckbox() && (this.comp.getCheckbox().checked = isSelected);\n    // }\n\n    selectOption(initiator : Intiator = \"API\"):void{\n        const isSelected = this.isSelected();\n        if(isSelected){\n            return;\n        }\n        else{\n            const params =  this.createParams(initiator, this.isBeforeSelectALL(1), false);\n            const value = this.optionHandler.onBeforeSelect(params);\n            if(value) {\n                this.dropdownDatapart.updateSelectedOptions(this.option);\n                this.optionHandler.onAfterSelect(params);\n                this.dropdownHandler.getDropdownComponent().applyFocusToActiveOption();\n            }\n            \n        }\n    }\n\n    deSelectOption(initiator : Intiator = \"API\"):void{\n        const isSelected = this.isSelected();\n        if(isSelected){ \n            const params =  this.createParams(initiator, this.isBeforeSelectALL(-1), false);\n            const value = this.optionHandler.onBeforeDeselect(params);\n            if(value) {\n                this.dropdownDatapart.deleteSelectedOption(this.option );\n                this.optionHandler.onAfterDeselect(params);\n            }  \n        }\n    }\n\n    private createParams(initiator : Intiator, selectALL : boolean, selectAllTriggered : boolean):any {\n        return{\n            value : this.option,\n            initiator,\n            selectAll           : selectALL,\n            selectAllTriggered: selectAllTriggered\n        }\n    }\n\n    private isSelected(){\n        return (this.dropdownDatapart.getDefaultSelectedOptions().includes(this.option?.id)) ? true : false;\n    }\n\n    getProperty():any{\n        return {\n            isMultiple   : ()=>this.optionHandler.isMultiple(),\n            selectedOptions : ()=>this.dropdownDatapart.getDefaultSelectedOptions(),\n            onAfterSelect : ()=>this.optionHandler.onAfterSelect(this.option),\n            id : this.option?.id,\n            // getOption : (optionDom: HTMLElement)=>this.getOption(optionDom),\n            getCheckboxConfig : ()=>{\n                const checkboxConfiguration = {\n                    readonly : false,\n                    checkboxSize : 20,\n                    borderRadius : 5,\n                    checkedFillColor : 'red',   \n                    checkedBorderColor : 'black',\n                    uncheckedBorderColor : 'green',\n                    uncheckedboxFillColor : 'grey',\n                    uncheckedBorderWidth : 1,\n                    checkedBorderWidth : 1,\n                    ariaLabel : 'checkbox',\n                    onclick : (event : Event)=>{\n                        this.clickOption(event,  this.dropdownDatapart.isSelectAll());\n                    }\n                }\n                return checkboxConfiguration;\n            },\n           value :  this.option.label ?? this.option.value,\n        };\n    }\n\n    // getOption(optionDom : HTMLElement):any{\n    //     if(this.option?.dropdownOptionRenderer){\n    //         const customOptionRenderer =  new this.option.dropdownOptionRenderer;\n    //         customOptionRenderer.init(this.createRendererParams());\n    //         optionDom.appendChild(customOptionRenderer.createElement());\n    //     }\n    //     else if(this.optionsHandler.isOptionAsChip()){\n\n    //         const chipConfig : IChipConfiguration= {\n    //             appendTo: optionDom,\n    //             label: this.option.label ?? this.option.value,\n    //             readOnly : true,\n    //             chipColor: this.option.color,\n    //         };\n\n    //         if(this.optionHandler.shouldShowTooltip()){\n    //             chipConfig.tooltip = this.optionHandler.shouldShowTooltip();\n    //             chipConfig.tooltipAppendto = this.optionHandler.getTooltipAppendto();\n    //             chipConfig.tooltipMessage = this.option.value;\n    //             chipConfig.tooltipRegex = this.optionHandler.getTooltipRegex();\n    //             chipConfig.tooltipPosition = this.optionHandler.getTooltipPosition();\n    //             chipConfig.tooltipHideDelay = this.optionHandler.getTooltipHideDelay();\n    //         }\n\n    //         new Chip(chipConfig);\n    //     }\n    //     else{\n    //         optionDom.innerText = `${this.option.label ??  this.option.value}`;\n    //     }\n    // }\n\n\n\n    updateSelectedOptions(){\n        this.dropdownDatapart.updateSelectedOptions(this.option);\n    }\n\n    getValue(){\n        return this.option;\n    }\n\n    // setRenderer(): void {\n    //     const componentDetails = this.UserComponentHandler.getDropdownOptionRendererDetails( this.item, this.createRendererParams() );\n    //     // this.comp.setRenderer(componentDetails);\n    // }\n\n    // private createRendererParams(): any {\n    //     return {\n    //         option :  this.option,\n    //         readonly : this.optionHandler.isReadOnly()\n    //     };\n    // }\n\n\n    focus():void{\n        this.comp.getElement().focus();\n        this.optionHandler.onFocus();\n    }\n\n    blur():void{\n        this.comp.getElement().blur();\n        this.optionHandler.onBlur();\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createOptionRendererWrapper();\n        const params          = this.createRendererParam();\n        const  userDetails    = this.userComponentHandler.getDropdownOptionRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.comp.setRendererDetails(userDetails);\n    }\n\n    updateDisabled(disabled : boolean) : void {\n        this.option.disabled = disabled;\n        this.refresh();\n    }\n    private createOptionRendererWrapper() {\n        let renderer:any = DefaultLabelRenderer;\n        if(this.optionHandler.isOptionAsChip()){\n            renderer  = this.optionHandler.isMultiple()? DefaultMultiSelectChipRenderer : DefaultSingleSelectChipRenderer;\n        }\n        if(this.option.dropdownOptionRenderer){\n            renderer = this.option.dropdownOptionRenderer;\n        }\n        return {\n\t\t\tgetRenderer          : () => renderer,\n\t\t\tgetUserRendererParams: () => this.option.dropdownOptionRendererParams,\n\n\t\t};\n    }\n    private createRendererParam() {\n        return {\n\t\t\toption: this.option,\n            optionParams : this.option.dropdownOptionRendererParams, \n\t\t};\n    }\n\n}","const CheckboxBeanConstants = {\n    CHECKBOX_CONFIGURATION : 'configuration',\n    CHECKBOX_API : 'checkboxApi',\n    CHECKBOX_STATE : 'checkboxState',\n    CHECKBOX_CONTROLLER_HANDLER : 'checkboxControllerHandler',\n    CHECKBOX_EVENT_HANDLER : 'checkboxEventHandler'\n}\n\nexport {\n    CheckboxBeanConstants\n}","import { RendererClassType } from \"./core/model/checkbox-options-handler\";\n\n\nexport interface IRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\ninterface ICustomRenderer{\n    checkedElement: HTMLElement;\n    uncheckedElement ?: HTMLElement;\n}\ntype CheckboxEventOrigin = 'api' | 'ui';\ntype CheckboxOnChangeHandler =\n    | ((params: { oldValue: boolean; newValue: boolean; eventOrigin?: CheckboxEventOrigin }) => void)\n    | ((oldValue: boolean, newValue: boolean, eventOrigin?: CheckboxEventOrigin) => void);\ninterface ICheckboxConfiguration {\n    appendTo ?                        : HTMLElement;\n    value ?                           : boolean;\n    label  ?                          : string;\n    readonly ?                        : boolean;\n    ariaLabel ?                       : string;\n    instanceID ?                      : string;\n    checkboxRenderer ?                : RendererClassType;\n    onclick ?                         : CallableFunction;\n    onblur ?                          : CallableFunction;\n    onfocus ?                         : CallableFunction;\n    onChange ?                        : CheckboxOnChangeHandler;\n    required ?                        : boolean;\n    ariaLabelledBy ?                  : string;\n    description ?                     : string;\n    descriptionRenderer ?             : {};\n    descriptionRendererParams       ? : object,\n    ariaDescribedby  ?                : string ,\n    customRenderer ?                  : ICustomRenderConstructor,\n    onKeydown ?                       : CallableFunction,\n    onMousedown ?                     : CallableFunction,\n    coreLabel ?                       : string,\n    ignoreEmptyDOM ?                : boolean,\n    disabled ?: boolean\n\n    showErrorState                 ?: boolean;\n    status                         ?: 'error' | \"none\";\n    validationMessage              ?: string;\n    validationMessageRenderer      ?: { new(): ICheckboxErrorRenderer };\n    validationMessageRendererParams?: object;\n    labelRenderer ?: { new(): IRenderer } | undefined;\n    labelRendererParams ?: object;\n}\n\nconst chekBoxConfigurationArray = [\n    'appendTo', \n    'value', \n    'label',  \n    'readonly', \n    'ariaLabel', \n    'instanceID', \n    'checkboxRenderer', \n    'onclick', \n    'onblur', \n    'onfocus', \n    'onChange', \n    'required', \n    'ariaLabelledBy', \n    'description', \n    'descriptionRenderer', \n    'descriptionRendererParams',       \n    'ariaDescribedby',  \n    'customRenderer',\n    'coreLabel',\n    'disabled'\n]\n\ntype listenerCallback = (event : Event) => void;\n\ninterface ICustomRender{\n    init(state : boolean ) : void;\n    getGUI() : HTMLElement |  null;\n    destroy() : void;\n    onChange(state :  boolean) : void;\n}\ninterface ICustomRenderConstructor {\n    new (state: boolean, span: HTMLElement): ICustomRender;\n}\n\n\nexport interface ICheckboxErrorRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\n\nexport {\n    ICheckboxConfiguration,\n    listenerCallback,\n    ICustomRenderer,\n    ICustomRender,\n    ICustomRenderConstructor,\n    chekBoxConfigurationArray,\n    CheckboxEventOrigin,\n    CheckboxOnChangeHandler\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { CheckboxBeanConstants } from \"../../constants/checkbox-constants\";\nimport { CheckboxEventOrigin, CheckboxOnChangeHandler, chekBoxConfigurationArray, ICheckboxConfiguration, ICheckboxErrorRenderer, ICustomRenderConstructor } from \"../../checkbox-configuration.types\";\nimport { CheckboxOptionHandlerTypes } from \"./checkbox-option-handler.types\";\nimport { IClickEventMeta } from \"../../checkbox-core-component\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n@Bean(BEAN_NAME.OPTION_HANDLER)\nclass CheckboxOptionHandler extends EventEmitter implements CheckboxOptionHandlerTypes{\n\n    @AutoWired(CheckboxBeanConstants.CHECKBOX_CONFIGURATION) configuration !: ICheckboxConfiguration;\n\n    getAppendTo() : HTMLElement |null{\n        return this.configuration.appendTo ?? null;\n    }\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n\n    getLabel(): string {\n        return this.configuration.label ?? '';\n    }\n\n    getAriaLabel(): string {\n        return this.configuration.ariaLabel ?? '';\n    }\n    getAriaDescribedby(): string {\n        return this.configuration.ariaDescribedby ?? '';\n    }\n    getReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n    getDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n    getAriaLabelledby(){\n        return this.configuration.ariaLabelledBy ?? \"\";\n    }\n\n    getDefaultValue() : boolean {\n        return this.configuration.value ?? false;\n    }\n\n    getCheckBoxLabel(): string | null {\n        return this.configuration?.coreLabel ||  null;\n    }\n\n    getCheckBoxRenderer() : RendererClassType | undefined {\n        return this.configuration?.checkboxRenderer;\n    }\n\n\n    getDescription() :string {\n        return this.configuration.description ?? \"\";\n    }\n    onClick(params:IClickEventMeta): void {\n        this.configuration?.onclick?.(params);\n    }\n\n    onKeydown(params: any): void {\n        this.configuration?.onKeydown?.(params);\n    }\n\n    onFocus(params: any): void {\n        this.configuration?.onfocus?.(params);\n    }\n\n    onBlur(params: any): void {\n        this.configuration?.onblur?.(params);\n    }\n\n    onChange(oldValue: boolean, newValue: boolean, eventOrigin?: CheckboxEventOrigin): void {\n        const onChangeHandler = this.configuration?.onChange as CheckboxOnChangeHandler | undefined;\n        if (!onChangeHandler) return;\n\n        // const params = { oldValue, newValue, eventOrigin };\n        if (onChangeHandler.length === 1) {\n            (onChangeHandler as (oldValue: boolean, newValue: boolean, eventOrigin?: CheckboxEventOrigin) => void)(oldValue, newValue, eventOrigin);\n  \n        } else {\n            (onChangeHandler as (oldValue: boolean, newValue: boolean, eventOrigin?: CheckboxEventOrigin) => void)(oldValue, newValue, eventOrigin);\n        }\n    }\n\n    onMousedown(params: any): void {\n        this.configuration?.onMousedown?.(params);\n    }\n\n    getDescriptionRenderer() {\n        return this.configuration.descriptionRenderer ?? '';\n    }\n    getDescriptionRendererParams() {\n        return this.configuration.descriptionRendererParams ?? '';\n    }\n\n    isCustomRenderer(): boolean {\n        return Boolean(this.configuration.customRenderer) ?? false;\n    }\n\n    getCustomRenderer(): ICustomRenderConstructor | null {\n        return this.configuration.customRenderer?? null;\n    }\n\n    getCheckedRenderer(): HTMLElement | null {\n        return null;\n        // return this.configuration.customRenderer?.checkedElement ?? null;\n    }\n\n    getUnCheckedRenderer(): HTMLElement | null {\n        return null;\n        // return this.configuration.customRenderer?.uncheckedElement ?? null;\n    }\n    updateProperties(options : ICheckboxConfiguration){\n        const userProperty = Object.keys(options);\n        for(let i = 0; i < userProperty.length; i++){\n            const userKey = userProperty[i];\n            const isValidProperty = chekBoxConfigurationArray.includes(userKey);\n            if(isValidProperty){\n                if (userKey === 'value' && typeof (options as any)[userKey] !== 'boolean') {\n                    console.warn(`Invalid value for checkbox: expected boolean, received ${typeof (options as any)[userKey]}. Ignoring.`);\n                    continue;\n                }\n                (this.configuration as any)[userKey] = (options as any)[userKey];\n            }  else {\n                console.warn(`Invalid property ${userKey} in options. Ignoring.`);\n            }\n        }\n    }\n\n    shouldGenerateEmptyDom(): boolean {\n        // return this.configuration?.ignoreEmptyDOM ?? false;\n        return this.configuration?.ignoreEmptyDOM !== undefined\n            ? !this.configuration.ignoreEmptyDOM\n            : false;\n    }\n\n    showErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getValidationMessage(): string {\n        return this.configuration.validationMessage ?? '';\n    }\n\n    getValidationMessageRenderer(): { new(): ICheckboxErrorRenderer } | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n}\n\ninterface RendererClassType {\n    getElement() : HTMLElement\n}\n\nexport {\n    CheckboxOptionHandler,\n    RendererClassType\n}","import { AutoWired, BEAN_NAME, setAriaLabel, setAriaRole } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../utility/abstract-controller\";\nimport { CheckboxComponentType } from \"./checkbox-root-types\";\nimport { CheckboxOptionHandler } from \"../model/checkbox-options-handler\";\nimport { CheckboxBeanConstants } from \"../../constants/checkbox-constants\";\nimport { CheckboxControllerHandlerType } from \"./checkbox-controller-handler.types\";\nimport { CheckboxStateHandlerType } from \"../model/checkbox-state-handler.types\";\nimport { CheckboxEventOrigin, ICheckboxConfiguration } from \"../../checkbox-configuration.types\";\nimport type { CheckBoxStateManager } from \"../model/checkbox-state-manager\";\n\nfunction svgReturner(){\n    const svgNS = \"http://www.w3.org/2000/svg\";\n    const svg = document.createElementNS(svgNS, \"svg\");\n    svg.setAttribute(\"width\", \"16\");\n    svg.setAttribute(\"height\", \"16\");\n    svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n    svg.style.setProperty(\"--ratingChecked\", \"#9277e7\");\n\n    const g1 = document.createElementNS(svgNS, \"g\");\n    g1.setAttribute(\"data-name\", \"Layer 2\");\n\n    const g2 = document.createElementNS(svgNS, \"g\");\n    g2.setAttribute(\"data-name\", \"Fill Icon\");\n\n    const path = document.createElementNS(svgNS, \"path\");\n    path.setAttribute(\"class\", \"FieldCheckboxTickRemove\");\n    path.setAttribute(\"d\", \"M10.56 17.75a1.28 1.28 0 01-.87-.35l-4.17-4a1.25 1.25 0 011.74-1.8l3.17 3.06 6.19-7.91a1.26 1.26 0 011.76-.21 1.24 1.24 0 01.21 1.75l-7 9a1.26 1.26 0 01-.9.48z\");\n\n    g2.appendChild(path);\n    g1.appendChild(g2);\n    svg.appendChild(g1);\n\n    return svg;\n}\n\nclass CheckboxRootController extends AbstractController<CheckboxComponentType> {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: CheckboxOptionHandler;\n    @AutoWired(CheckboxBeanConstants.CHECKBOX_CONTROLLER_HANDLER) private controllerHandler !: CheckboxControllerHandlerType;\n    @AutoWired(CheckboxBeanConstants.CHECKBOX_STATE) private stateHandler !: CheckboxStateHandlerType;\n    @AutoWired('stateManager') private stateManager !: CheckBoxStateManager;\n    \n    private userClass : any;\n\n    init() : void {\n        this.initState();\n        this.registerEvent();\n        this.refresh(true);\n        this.controllerHandler.registerCtrl(this);\n        this.customDomHandler();\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n        this.addErrorClassName();\n    }\n\n     private addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.component!.getElement().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n\n    private customDomHandler(){\n        if (this.optionsHandler.isCustomRenderer()){\n            const newState = this.stateHandler.getSelection();\n            const span = this.component?.getContainer()?.querySelector('label .dg-checkbox__input--custom');\n            const container=  this.component?.getContainer();\n            if (!span || !container) return;\n            const userRenderClass = this.optionsHandler.getCustomRenderer();\n            if(userRenderClass){\n                this.userClass =  new userRenderClass(newState,span as HTMLElement);\n            }\n        }\n    }\n\n    private initState() : void {\n        const isSelected = this.optionsHandler.getDefaultValue() ?? false;\n        this.stateHandler.setSelection(isSelected);\n    }\n\n    registerEvent() : void {\n        \n        const container =this.component?.getContainer();\n        const state = this.stateHandler.getSelection();\n        const element=container?.querySelector('label');\n        this.addInputEventListener();\n        this.addClassList();\n        this.customRenderHandler(state);\n        element && this.addListener(element, 'change', this.onClick.bind(this));\n        element &&  this.addListener(element, 'focus', this.onfocus.bind(this));\n        element && this.addListener(element, 'blur', this.onblur.bind(this));\n        element && this.addListener(element, 'keydown', this.onKeydown.bind(this));\n        element && this.addListener(element,'mousedown', this.onMouseDown.bind(this));\n    }\n    private addInputEventListener(): void {\n        const input = this.component?.getInputElement();\n        if (input) {\n            input.addEventListener('focus', this.inputFocus.bind(this));\n            input.addEventListener('blur', this.inputBlur.bind(this));\n        }\n    }\n    private inputFocus() : void {\n        const rootElement = this.component?.getElement();\n        if (rootElement) {\n            rootElement.classList.add('dg-checkbox__status--focus');\n        }\n    }\n    private inputBlur() : void {\n        const rootElement = this.component?.getElement();\n        if (rootElement) {\n            rootElement.classList.remove('dg-checkbox__status--focus');\n        }\n    }\n\n    private addClassList(){\n        const state =  this.optionsHandler.isCustomRenderer();\n        const element = this.component?.getContainer();\n        const wrapper =  this.component?.getElement();\n\n        if(!state && element && wrapper){\n           wrapper.classList.add('dg-checkbox-default-style');\n        }\n    }\n\n    onfocus(event : FocusEvent) : void {\n        this.optionsHandler.onFocus(event);\n    }\n\n    onblur(event : MouseEvent) : void {\n        this.optionsHandler.onBlur(event);\n    }\n\n    onClick(event: MouseEvent): void {\n        const isReadonly = this.optionsHandler.getReadOnly();\n        const isDisabled = this.optionsHandler.getDisabled();\n        \n        if(isReadonly || isDisabled) return;\n        \n        const newState = !this.stateHandler.getSelection();\n        this.applyStateChange(newState, 'ui');\n        this.optionsHandler.onClick({ state: newState, event });\n    }\n\n    onKeydown(event : KeyboardEvent) : void {\n        this.optionsHandler.onKeydown({event});\n    }\n\n    onMouseDown(event : MouseEvent) : void {\n        this.optionsHandler.onMousedown({event});\n    }\n\n    toggleValue(eventOrigin: 'api' | 'ui' = 'ui') {\n        const isReadonly = this.optionsHandler.getReadOnly();\n        const isDisabled = this.optionsHandler.getDisabled();\n        \n        if (isReadonly || isDisabled) return;\n        \n        const newState = !this.stateHandler.getSelection();\n        this.applyStateChange(newState, eventOrigin);\n    }\n    \n    \n    private customRenderHandler(state: boolean): void {\n        const container = this.component?.getContainer();\n        if (!container) return;\n    \n        const span = container.querySelector('label .dg-checkbox__input--custom') as HTMLElement;\n        const input = container.querySelector('.dg-checkbox__input') as HTMLElement;\n        if (!span) return;\n    \n        input?.setAttribute('aria-checked', String(state));\n    \n        if (this.optionsHandler.isCustomRenderer()) {\n            if (this.userClass) {\n                this.userClass.onChange(state);\n            }\n        } else {\n            // span.textContent = '';\n            // const parser = new DOMParser();\n            // const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');\n            // const svgElement = svgDoc.documentElement;\n            // span.appendChild(svgElement);\n\n\n            span.textContent = '';\n            span.appendChild(svgReturner());\n\n            // span.textContent = '';\n            // span.innerHTML = svgString;\n        }\n    }\n    \n\n    updateProperty(options : ICheckboxConfiguration, force ?:  boolean){\n        const hasValueUpdate = Object.prototype.hasOwnProperty.call(options, 'value');\n        const isValidBooleanValue = !hasValueUpdate || typeof options.value === 'boolean';\n\n        if (hasValueUpdate && !isValidBooleanValue) {\n            console.warn(`Checkbox value must be a boolean. Received ${typeof options.value}. Ignoring value update.`);\n        }\n\n        this.optionsHandler.updateProperties(options);\n\n        if (hasValueUpdate && isValidBooleanValue) {\n            const newValue = this.optionsHandler.getDefaultValue();\n            this.applyStateChange(newValue, 'api', { triggerChange: true, forceUpdate: false });\n        }\n\n        this.refresh(false, force, hasValueUpdate);\n    }\n    \n    private refresh(init : boolean = false, force ?: boolean, suppressOnChange: boolean = false) : void { \n        this.applyClassNames();\n        this.setAccessibility();\n       \n        const isReadonly =this.optionsHandler.getReadOnly();\n        if(!isReadonly || force){\n            this.updateValue(force)\n            this.updateLabel();\n            this.updateDescription();\n            this.updateCoreLabel();\n            this.updateReadOnly();\n            this.updateDisabled();\n        }\n        this.updateRequired();\n\n        if (!suppressOnChange) {\n            this.setValue(this.stateHandler.getSelection(), init);\n        }\n\n    }\n\n    private updateRequired() : void {\n        const isRequired = this.optionsHandler.isRequired();\n        const element = this.component?.getRequiredElement();\n        element!.classList.toggle(\"dg-hide\", !isRequired)\n    }\n\n    private updateReadOnly(){\n\n    }\n\n    private updateDisabled(){\n        const isDisabled =  this.optionsHandler.getDisabled();\n        const element =  this.component?.getElement();\n        const readOnly =  this.optionsHandler.getReadOnly();\n        const input = this.component?.getContainer()?.querySelector('input');\n        if(element){\n            if(isDisabled || readOnly){\n                if(isDisabled){\n                    element.classList.add('dg-input__status--disabled');\n                    element.classList.add('dg-checkbox__container--disabled');\n                }\n                input && (input.disabled = true);\n\n            }else{\n                element.classList.remove('dg-input__status--disabled');\n                element.classList.remove('dg-checkbox__container--disabled');\n\n                input && (input.disabled = false);\n                // if(!readOnly && input){\n                //     input.disabled = false;\n                // }\n            }\n        }\n\n    }\n\n    private updateValue(force ?: boolean){\n        const state =  this.stateHandler.getSelection();\n        const newState =  this.optionsHandler.getDefaultValue()\n        if(state  !==  newState && force){\n            this.toggle(force);\n        }\n    }\n    getLabelValue(): string | HTMLElement | undefined{\n        const label = this.component?.getElement()?.querySelector('label');\n        const span = label?.querySelector('span');\n        const labelValue = this.optionsHandler.getCheckBoxLabel();\n        if(span && labelValue){\n            return labelValue;\n        }\n        return undefined\n    }\n\n    private updateCoreLabel(){\n        const label = this.component?.getContainer()?.querySelector('label');\n        const span = label?.querySelector('.dg-checkbox__input-label');\n        const coreLabel = this.optionsHandler.getCheckBoxLabel() ?? '';\n        if(span){\n            span.textContent = coreLabel;\n        }\n    }\n\n    private updateLabel() {\n        const label =  this.getElement()?.querySelector('.dg-field__label');\n        const spanElement =  label?.querySelector('.dg-field__label__title');\n        if(label && spanElement) {\n            const labelText =  this.optionsHandler.getLabel();\n            spanElement.textContent =  labelText\n        }\n    }\n    hide(): void {\n        const element =  this.component?.getElement();\n        element && (element.style.display = 'none');\n     }\n     show(): void {\n        const element =  this.component?.getElement();\n        element && (element.style.display = 'block');\n\n     }\n\n    private updateDescription(){\n        const description =  this.getElement()?.querySelector('.dg-field__description');\n        if(description) {\n            const descriptionText =  this.optionsHandler.getDescription();\n            description.textContent =  descriptionText\n        }\n    }\n\n    private applyClassNames(){\n\t\t// const ownerState = this.getOwnerState();\n\t\t// const classes = useUtilityClasses(ownerState);\n\t\t// this.component.addOrRemoveCssClass(classes.checkbox);\n\t}\n    \n    private setAccessibility() : void {\n        //states\n        const readOnly = this.optionsHandler.getReadOnly();\n        const defaultValue = this.optionsHandler.getDefaultValue();\n        const rootElement = this.component?.getElement()\n        if(!rootElement) return;\n        const inputElement = this.component?.getInputElement() as HTMLInputElement;\n        const ariaRole = 'checkbox';\n        setAriaRole(inputElement, ariaRole);\n        readOnly != undefined && (inputElement.setAttribute('aria-disabled', readOnly+\"\"))\n        defaultValue != undefined && (inputElement.setAttribute('aria-checked', defaultValue+\"\"))\n        const ariaLabel = this.optionsHandler.getAriaLabel();\n        ariaLabel && setAriaLabel(inputElement, ariaLabel);\n    }\n\n    getProperty() {\n        const checkboxProperties = {\n            label                 : this.optionsHandler.getLabel(),\n            defaultValue          : this.optionsHandler.getDefaultValue(),\n            readOnly              : this.optionsHandler.getReadOnly(),\n            helper                : this.optionsHandler.getDescription(),\n            checkboxLabel         : this.optionsHandler.getCheckBoxLabel(),\n            shouldGenerateEmptyDom: this.optionsHandler.shouldGenerateEmptyDom(),\n            disabled              : this.optionsHandler.getDisabled(),\n            error                 : this.optionsHandler.showErrorState()\n        }\n        return checkboxProperties;\n    }\n\n    focus(){\n        const inputElement = this.component?.getInputElement();\n        if (inputElement) {\n            inputElement.focus();\n        }\n        // this.component?.getElement().focus()\n    }\n    blur(){\n        const inputElement = this.component?.getInputElement();\n        if (inputElement) {\n            inputElement.blur();\n        }\n        // this.component?.getElement().blur()\n    }\n\n    toggle(force ?: boolean) {\n        const isReadonly = this.optionsHandler.getReadOnly();\n        const isDisabled = this.optionsHandler.getDisabled();\n        \n        if((!isReadonly && !isDisabled) || force){\n            if (this.optionsHandler.isCustomRenderer()) {\n                this.toggleValue('api');\n            } else {\n                this.inputToggle('api');\n            }\n        }\n    }\n    setValue(value: boolean, init : boolean = false): void {\n        const isReadonly = this.optionsHandler.getReadOnly();\n        const isDisabled = this.optionsHandler.getDisabled();\n        \n        if(!isReadonly && !isDisabled) {\n            this.applyStateChange(value, 'api', { triggerChange: !init, forceUpdate: true });\n        }\n    }\n    inputToggle(eventOrigin: 'api' | 'ui' = 'api') {\n        const newState = !this.stateHandler.getSelection();\n        this.applyStateChange(newState, eventOrigin);\n    }\n\n    getElement(){\n        return this.component?.getElement();\n    }\n\n    reset() :  void{\n        const defaultValue = this.optionsHandler.getDefaultValue();\n        const currentState = this.stateHandler.getSelection();\n        const readOnly = this.optionsHandler.getReadOnly();\n        const isDisabled = this.optionsHandler.getDisabled();\n        \n        if(defaultValue != currentState && !readOnly && !isDisabled) {\n            this.updateValue(true);\n        }\n    }\n\n    clear()  : void {\n        const currentState = this.stateHandler.getSelection();\n        const readOnly = this.optionsHandler.getReadOnly();\n        const isDisabled = this.optionsHandler.getDisabled();\n        \n        if(!readOnly && !isDisabled && currentState != false) {\n            this.setValue(false);\n        }\n    }\n\n    private applyStateChange(newState: boolean, eventOrigin: CheckboxEventOrigin, options: { triggerChange?: boolean; forceUpdate?: boolean } = {}) {\n        const { triggerChange = true, forceUpdate = false } = options;\n        const previousState = this.stateHandler.getSelection();\n        const hasChanged = previousState !== newState;\n\n        if (!hasChanged && !forceUpdate) return;\n\n        this.stateHandler.setSelection(newState);\n        this.customRenderHandler(newState);\n\n        const inputElement = this.component?.getInputElement();\n        if (inputElement) {\n            inputElement.checked = newState;\n        }\n\n        if (triggerChange) {\n            this.optionsHandler.onChange(previousState, newState, eventOrigin);\n        }\n    }\n\n     getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-checkbox__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-checkbox__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses: ()=>  \"dg-checkbox__validation-message\",\n\t\t\t\tgetDescriptionClasses      : ()=> \"dg-checkbox__description\"\n\t\t\t}\n\t\t};\n    }\n}\n\n\nexport {\n    CheckboxRootController\n}","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\"\nimport { composeClasses } from \"@dg/utils\";\nimport { CheckboxRootController } from \"../controller/checkbox-root-controller\";\nimport { getCheckboxUtilityClass } from \"../checkbox-root-classes\";\nimport { CheckboxComponentType } from \"../controller/checkbox-root-types\";\n\n\nexport const useUtilityClasses = (ownerState : any = {}) => {\n    const readonly = ownerState?.readonly\n\tconst slots = {\n\t\tlabel    : {\n            slot     : 'label',\n            modifiers: []\n        },\n        root : {\n            slot : 'root',\n            modifiers : []\n        },\n        checkbox : {\n            slot : 'checkbox-input',\n            modifiers : [\n                readonly && 'readonly'\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots, getCheckboxUtilityClass);\n};\n\n\n\nconst rootTemplate = (props : any) => {\n\n    const rootDiv    = document.createElement('div');\n    const wrapperDiv = document.createElement('div');\n    const input      = document.createElement('input');\n    const span       = document.createElement('span');\n    const customSpan = document.createElement('span');\n    const label      = document.createElement('label');\n    const required   = document.createElement('span');\n    required.setAttribute('ref', 'required');\n    required.textContent = \"*\"\n    \n\n    input.type = 'checkbox';\n    if (props.defaultValue != undefined) input.checked = props.defaultValue;\n    if (props.readOnly != undefined) input.disabled = props.readOnly;\n\n    if (props.checkedBorderColor) span.style.setProperty('--checked-border-color', props.checkedBorderColor);\n    if (props.checkedFillColor) span.style.setProperty('--checked-fill-color', props.checkedFillColor);\n    if (props.uncheckedBorderColor) span.style.setProperty('--unchecked-border-color', props.uncheckedBorderColor);\n    if (props.uncheckedboxFillColor) span.style.setProperty('--unchecked-fill-color', props.uncheckedboxFillColor);\n\n    input.classList.add('dg-checkbox__input');\n\n    input.setAttribute('ref', 'checkbox');\n    customSpan.classList.add('dg-checkbox__input--custom');\n    span.classList.add('dg-checkbox__input-label');\n    required.classList.add('dg-field__label--required');\n    label.classList.add('dg-checkbox__input-wrapper', 'dg-field__input-wrapper');\n    wrapperDiv.classList.add('dg-checkbox__container');\n    props?.disabled ? rootDiv.classList.add('dg-checkbox__container--disabled'): null;\n    rootDiv.classList.add('dg-checkbox__root', 'dg-field__root');\n\n\n    label.append(input, customSpan, span, required);\n    wrapperDiv.appendChild(label);\n    if (props?.checkboxLabel) span.textContent = props.checkboxLabel;\n    if (props?.shouldGenerateEmptyDom || props.label.length > 0){\n        const textLabel = document.createElement(\"checkbox-label\");\n        textLabel.setAttribute(\"ref\", 'label');\n        rootDiv.appendChild(textLabel);\n    }\n    rootDiv.append(wrapperDiv);\n    if (props?.shouldGenerateEmptyDom || props.helper.length > 0){\n        const checkboxHelper = document.createElement(\"checkbox-helper\");\n        checkboxHelper.setAttribute(\"ref\", 'description');\n        rootDiv.appendChild(checkboxHelper);\n    }\n\n    if(props.shouldGenerateEmptyDom || props.error) {\n        const errorElement = document.createElement(\"checkbox-error\");\n        errorElement.setAttribute(\"ref\", 'error');\n        rootDiv.appendChild(errorElement);\n    }\n    return rootDiv;\n};\n\nclass CheckboxRootView extends Component{\n\n    @queryAssignedNodes('required') private requiredElement !: HTMLSpanElement;\n    @queryAssignedNodes('checkbox') private checkbox !: HTMLInputElement;\n    appendTo : HTMLElement |null;\n\n    constructor(appendTo ?: HTMLElement) {\n        super();\n        this.appendTo = appendTo ?? null;\n    }\n\n    @PostConstruct()\n    init() : void {\n\n        const component : CheckboxComponentType = {\n            addOrRemoveCssClass : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement : () => this.getGui(),\n            getContainer : () => this.getGui().querySelector('.dg-checkbox__container'),\n            getRequiredElement : () => this.requiredElement,\n            getInputElement : () => this.checkbox\n            // getWrapperElement : () => this.getGui().querySelector('.dg-checkbox__container')?.querySelector('label')\n            // destroy : () => this.destroy()\n        }\n\n        const controller = this.createBean(new CheckboxRootController());\n        \n        \n        const props = controller.getProperty();\n        const properties = controller.getParamsProperty();\n\n\n        this.setTemplate(rootTemplate(props), {\n            label      : properties.label,\n            description: properties.description,\n            error      : properties.description\n        });\n\n        controller.setComponent(component);\n\n        this.appendElementIntoUserDom();\n    }\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo && this.appendTo.removeChild(eGui);\n\t\t\tthis.appendTo = null;\n\t\t});\n\t}\n\n}\n\nexport {\n    CheckboxRootView\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { CheckboxBeanConstants } from \"../../constants/checkbox-constants\";\nimport { CheckboxAPITypes } from \"./checkbox-api.types\";\nimport { CheckboxControllerHandlerType } from \"../controller/checkbox-controller-handler.types\";\nimport { CheckboxStateHandlerType } from \"./checkbox-state-handler.types\";\nimport { ICheckboxConfiguration } from \"../../checkbox-configuration.types\";\nimport { CheckboxOptionHandlerTypes } from \"./checkbox-option-handler.types\";\n\n\n\n@Bean(CheckboxBeanConstants.CHECKBOX_API)\nclass CheckboxAPI extends EventEmitter implements CheckboxAPITypes {\n    @AutoWired(CheckboxBeanConstants.CHECKBOX_CONTROLLER_HANDLER) private controllerHandler !: CheckboxControllerHandlerType;\n    @AutoWired(CheckboxBeanConstants.CHECKBOX_STATE) private stateHandler !:CheckboxStateHandlerType ;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: CheckboxOptionHandlerTypes;\n\n    getValue() : boolean { \n       return this.stateHandler.getSelection()\n\n    }\n\n    getElement():HTMLElement{\n        return this.controllerHandler.getCheckboxCtrl().getElement() as HTMLElement;\n    }\n\n    focus():void{\n        this.controllerHandler.getCheckboxCtrl().focus()\n\n    }\n\n    blur():void{\n        this.controllerHandler.getCheckboxCtrl().blur()\n\n    }\n\n    toggle(force ?: boolean) : void {\n        this.controllerHandler.getCheckboxCtrl().toggle(force);\n    }\n    updateProperties(options: ICheckboxConfiguration , force ?: boolean): void {\n        this.controllerHandler.getCheckboxCtrl().updateProperty(options, force);\n    }\n\n    hide(): void {\n        this.controllerHandler.getCheckboxCtrl().hide(); \n    }\n\n    show(): void {\n        this.controllerHandler.getCheckboxCtrl().show();\n    }\n\n    getFormattedValue(): string {\n        return this.stateHandler.getSelection().toString();\n    }\n\n    getLabelValue(): string | HTMLElement | undefined {\n        return this.controllerHandler.getCheckboxCtrl().getLabelValue();\n    }\n\n    reset(): void {\n        this.controllerHandler.getCheckboxCtrl().reset()\n    }\n\n    clear(): void {\n        this.controllerHandler.getCheckboxCtrl().clear();\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}\n\nexport {\n    CheckboxAPI\n}","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { CheckboxBeanConstants } from \"../../constants/checkbox-constants\";\nimport { CheckboxControllerHandlerType } from \"./checkbox-controller-handler.types\";\nimport { CheckboxRootController } from \"./checkbox-root-controller\";\n\n@Bean(CheckboxBeanConstants.CHECKBOX_CONTROLLER_HANDLER)\nclass CheckboxControllerHandler extends EventEmitter implements CheckboxControllerHandlerType {\n    private checkboxControl !: CheckboxRootController;\n    registerCtrl(checkboxControl : CheckboxRootController) : void {\n        this.checkboxControl = checkboxControl;\n    }\n\n    getCheckboxCtrl() : CheckboxRootController {\n        return this.checkboxControl;\n    }\n}\n\nexport {\n    CheckboxControllerHandler\n}\n\n\n","import { IComponentMeta, UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { ComponentItemType, IComponentDetails } from \"./component-detail.types\";\nimport { BEAN_NAME } from \"@dg/corecomponent\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry\";\n\nexport abstract class AbstractUserComponentHandler extends UserComponentHandler {\n    protected getComponentDetails<T, P>( item: ComponentItemType<T>, propertyName: string, params?: P, defautName?: string, ): | IComponentDetails| undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta<T,P>(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstance( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams<T, P>(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance<T,P>( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta<T, P>( item: ComponentItemType<T>, propertyName: string, _params?: P, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: T | null= null;\n\t\tlet frameworkComponent: T | null = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: T | undefined) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent =\n\t\t\t\t\tthis.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass(\n\t\t\tthis.getComponent<T>(item, propertyName),\n\t\t);\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent<T>(_item: ComponentItemType<T>, _propertyName: string): T | undefined {\n        return undefined;\n\t}\n    protected newInstance<T, P>( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: string, params?: P, ) {\n\t\tlet instance: T;\n\t\tconst frameworkComponentWrapper = this.getBeanInstance( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstance( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise === undefined) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n        \n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | undefined {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    protected getMergeParams<T, P>(item : ComponentItemType<T>, propertyName : string, params : any) : any {\n        return {...params, ...this.getUserParams<T, P>(item, propertyName, params)};\n    }\n\n    protected getUserParams<T, _P>(_item : ComponentItemType<T>, _propertyName : string, _params : any) : any {\n        \n\n    }\n\n    protected getUserRendererParams<T, P>(item : ComponentItemType<T>, params : P) : any {\n        const rendererParams = item.getRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { AbstractUserComponentHandler } from \"../../../utility/abstract-user-component-handler\";\nimport { ComponentItemType, IComponentDetails } from \"../../../utility/component-detail.types\";\nimport { CheckboxUserComponentHandlerType } from \"./checkbox-user-component-handler.types\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ILabelUserComponentHandler } from \"../../../label/label.types\";\n\nconst PROPERTY_NAME = {\n    CHECKED_RENDERER : 'checkboxRenderer',\n}\nexport const enum PropertyName {\n\tDESCRIPTION_RENDERER = 'descriptionRenderer',\n\tERROR_RENDERER = 'errorRenderer',\n\tLABEL_RENDERER = 'labelRenderer'\n}\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nclass CheckboxUserComponentHandler extends AbstractUserComponentHandler implements CheckboxUserComponentHandlerType, ILabelUserComponentHandler {\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\n    getCheckboxRendererDetails<T, P>(rendererWrapper: ComponentItemType<T>, params: P): IComponentDetails | undefined{\n        return this.getComponentDetails(rendererWrapper, PROPERTY_NAME.CHECKED_RENDERER, params);\n    }\n\n    getDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.DESCRIPTION_RENDERER, params, PropertyName.DESCRIPTION_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n    protected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n    getComponent<T>(item: ComponentItemType<T>, propertyName: string): T {\n        switch(propertyName) {\n            case PROPERTY_NAME.CHECKED_RENDERER:\n                return item.getRenderer();\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\tcase PropertyName.DESCRIPTION_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n        }\n        return item.getRenderer();\n    }\n\n    getUserParams<T, P>(item: ComponentItemType<T>, propertyName: string, params: any) {\n        switch(propertyName) {\n            case PROPERTY_NAME.CHECKED_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return  this.getUserRendererParams<T, P>(item, params);\n        }\n    }\n}\n\nexport {\n    CheckboxUserComponentHandler\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { CheckboxStateHandlerType } from \"./checkbox-state-handler.types\";\nimport { CheckboxOptionHandlerTypes } from \"./checkbox-option-handler.types\";\nimport { CheckboxBeanConstants } from \"../../constants/checkbox-constants\";\n\n@Bean(CheckboxBeanConstants.CHECKBOX_STATE)\nclass CheckBoxStateHandler extends EventEmitter implements CheckboxStateHandlerType {\n    private selected : boolean  = false;\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) checkboxOptionHandler !: CheckboxOptionHandlerTypes;\n\n    setSelection(isSelected: boolean): void {\n        this.selected = isSelected;\n    }\n\n    getSelection(): boolean {\n        return this.selected;\n    }\n\n    toggleSelection(): void {\n        this.selected = !this.selected;\n    }\n\n}\n\nexport {\n    CheckBoxStateHandler\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nexport function getDescriptionUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field__description', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\nexport function getValidationUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field__validation-message', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IHelperTextComp, IHelperTextUserComponentHandler } from \"./description-view.types\";\nimport { AutoWired, BEAN_NAME, toggleAttribute } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getDescriptionUtilityClass } from \"./description-classes\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: '',\n\t\t\tmodifiers: [\n\n            ],\n\t\t},\n\t};\n    \n    return composeClasses(slots, getDescriptionUtilityClass);\n\n};\nexport class DescriptionController extends EventEmitter {\n    private component!: IHelperTextComp;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IHelperTextUserComponentHandler;\n\n    \n    setComp(component : IHelperTextComp) {\n        this.component = component;\n\n        this.setRendererDetails();\n\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_FOCUS_OUT\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_VISIBILITY_CHANGED', (params) => this.addHideClassName(params.description));\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.setRendererDetails.bind(this));\n\n    }\n\n    private addHideClassName(hide : boolean = false) : void {\n        const element  = this.component.getElement();\n        hide != undefined && element.classList.toggle('dg-hide', hide);\n    }\n\n    setRendererDetails() : void {\n\n\n        const classes = useUtilityClasses();\n    \n        const componentParams = this.component?.getParams();\n        const descriptionClasses = componentParams?.getDescriptionClasses()\n        descriptionClasses ? classes.root = classes.root + \" \" + descriptionClasses : \"\";\n\n\t\tthis.component.addOrRemoveCSSClass(classes.root, true);\n        \n        const rendererWrapper = this.createHelperTextRendererWrapper();\n        const params          = this.createHelperTextRendererParams();\n        const userDetails     = this.userComponentHandler.getDescriptionRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.component.setRendererDetails(userDetails, params.value);\n\n        this.setAccessibility();\n        \n    }\n\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n\n        toggleAttribute(element, 'id', this.optionsHandler.getAriaDescribedby())\n    }\n\n    private createHelperTextRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionsHandler.getDescriptionRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionsHandler.getDescriptionRendererParams()\n\t\t}\n    }\n\n    private createHelperTextRendererParams() {\n        const componentParams = this.component?.getParams();\n        const isInvalid = componentParams?.invalid?.() || false;\n        const invalidText = componentParams?.invalidText?.() || '';\n        \n        return {\n            value : isInvalid && invalidText ? invalidText : this.optionsHandler.getDescription(),\n            invalid : isInvalid,\n            invalidText : invalidText,\n            helperText : this.optionsHandler.getDescription()\n        }\n    }\n\n    refresh() {\n        this.setRendererDetails();\n    }\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DescriptionController } from \"./description-controller\";\nimport { IHelperTextComp } from \"./description-view.types\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\n\n\nconst descriptionTextTemplate = () => {\n\t// const div = document.createElement(\"div\");\n\t// div.innerHTML = `<div></div>`;\n\t// return div.firstChild as HTMLElement;\n\treturn document.createElement(\"div\");\n}\nexport function loadTemplate(template: string): HTMLElement {\n\tconst tempDiv = document.createElement('div');\n\ttempDiv.innerHTML = (template || '').trim();\n\n\treturn tempDiv.firstChild as HTMLElement;\n}\n\nexport function escapeString(toEscape?: string | null, skipHtmlChars?: boolean): string | null {\n\n\t const escapeMap: { [key: string]: string } = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;', \n\t\t};\n\n    if (toEscape == null) {\n        return null;\n    }\n\n    const stringResult = toEscape.toString().toString();\n\n    if (skipHtmlChars) {\n\t\treturn stringResult;\n\t}\n\n    return stringResult.replace(/[&<>\"']/g, (chr) => escapeMap[chr]);\n}\nexport class DescriptionComponent extends Component {\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\tprivate params : any;\n\n\tconstructor(params: any){\n\t\tsuper();\n        this.params = params;\n\t}\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst template = descriptionTextTemplate();\n\t\tthis.setTemplate(template);\n\n\t\tconst comp: IHelperTextComp = {\n\t\t\tsetRendererDetails: (rendererDetails: IComponentDetails, value ?: string) => this.setRendererDetails(rendererDetails , value),\n\t\t\taddOrRemoveCSSClass : (className : string, addOrRemove : boolean) => this.addOrRemoveCssClass(className, addOrRemove),\n\t\t\tgetElement : () => this.getGui(),\n\t\t\tgetParams : () => this.params\n\t\t};\n\n\t\tconst controller = this.createBean(new DescriptionController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className\n\t}\n\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails, value ?: string): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tif(value != undefined){\n\t\t\t\tthis.insertValueWithoutCellRenderer(value)\n\t\t\t}else if(value === null){\n\t\t\t\tthis.insertValueWithoutCellRenderer('')\n\n\n\t\t\t}\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer(value : string) {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n\n        // const escapedValue = value != null ? escapeString(value) : null;\n        if (value != null) {\n            parentElement.textContent = value;\n        }\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n}\n","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nexport function getFormLabelUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field__label', slots.slot, slots.modifiers,globalNameSpace as string[]);\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IFormLabelComp, ILabelUserComponentHandler } from \"./label.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getFormLabelUtilityClass } from \"./form-label-classes\";\nimport { AutoWired, BEAN_NAME, toggleAttribute } from \"@dg/corecomponent\";\nimport { IComponentDetails } from \"@dg/corecomponent/UserComponentHandler\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot    : {\n            slot     : '',\n            modifiers: []\n        }\n\t};\n\n\treturn composeClasses(slots, getFormLabelUtilityClass);\n};\n\nconst useUtilityClassesForTitle = () => {\n\tconst slots = {\n\t\troot    : {\n            slot     : 'title',\n            modifiers: []\n        }\n\t};\n\n\treturn composeClasses(slots, getFormLabelUtilityClass);\n};\nexport class FormLabelController extends EventEmitter {\n    private component !: IFormLabelComp;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: ILabelUserComponentHandler;\n\n    // private params :any;\n    setComp(comp : IFormLabelComp) : void {\n        this.component = comp;\n        this.init();\n\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_VISIBILITY_CHANGED', (params) => this.addHideClassName(params.label))\n\n    }\n\n    private init() : void{\n        this.setRendererDetails();\n        this.applyClasses();\n        this.setAccessibility();\n    }\n\n    private addHideClassName(hide : boolean = false) : void {\n        const element  = this.component.getElement();\n        hide != undefined && element.classList.toggle('dg-hide', hide);\n    }\n\n    private applyClasses(){\n        const classes = useUtilityClasses();\n        const titleClasses = useUtilityClassesForTitle();\n        const params = this.component.getParams();\n        if(params){\n            const labelClasses = typeof params.getLabelClasses === \"function\" ? params.getLabelClasses() : \"\";\n        const labelTitleClasses = typeof params.getLabelTitleClasses === \"function\" ? params.getLabelTitleClasses() : \"\";\n        labelClasses ? classes.root = classes.root + \" \" + labelClasses : \"\";\n        labelTitleClasses ? titleClasses.root = titleClasses.root + \" \" + labelTitleClasses : \"\";\n\n        }\n        \n        this.component.addClassName(classes.root);\n        // this.component.getTitleElement().className = titleClasses.root;\n        if(this.component.getTitleElement() && titleClasses?.root){\n            this.component.getTitleElement().className = titleClasses.root;\n        }\n\n    }\n\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n        toggleAttribute(element, 'for', this.optionsHandler.getAriaLabelledby());\n    }\n\n    private setRendererDetails() : void {\n        const props =this.createProps();\n        const isLabel = props.label.length > 0;\n\n        if(isLabel) {\n            this.addHideClassName(false);\n        }else {\n            this.addHideClassName(true);\n        }\n        const rendererWrapper = this.createRendererWrapper();\n        const userDetails     = this.userComponentHandler.getLabelRendererDetails(rendererWrapper, props) as IComponentDetails;\n        this.component.setRendererDetails(userDetails, props)\n\n    }\n\n    private createProps() : any {\n        // const parmas = this.component?.getParams();\n        return {\n            label : this.optionsHandler.getLabel() || \"\",\n            required : this.optionsHandler.isRequired(),\n            ariaLabelledby : this.optionsHandler.getAriaLabelledby(),\n        }\n    }\n\n    private createRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionsHandler.getLabelRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionsHandler.getLabelRendererParams()\n\t\t}\n    }\n}","import { PostConstruct, clearElement, queryAssignedNodes, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { FormLabelController } from \"./label-controller\";\nimport { IFormLabelComp } from \"./label.types\";\nimport { getFormLabelUtilityClass } from \"./form-label-classes\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IComponentDetails } from \"@dg/corecomponent/UserComponentHandler.js\";\n\nconst LabelTamplate = () => {\n    // const div = document.createElement(\"div\");\n    // div.innerHTML = `<div></div>`    \n    // return div.firstChild as HTMLElement;\n    return document.createElement(\"div\");\n}\nconst TITLE_CLASS_NAME = 'dg-field__label__title';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n        label : {\n            slot : '',\n            modifiers : []\n        },\n\t\tasterisk: {\n            slot     : 'asterisk',\n            modifiers: []\n        },\n\t};\n\n\treturn composeClasses(slots, getFormLabelUtilityClass);\n};\n\nexport function loadTemplate(template: HTMLElement): HTMLElement {\n\tconst tempDiv = document.createElement('div');\n    template && tempDiv.appendChild(template);\n\t// tempDiv.innerHTML = \n\n\treturn tempDiv as HTMLElement;\n}\n\nexport function escapeString(toEscape?: string | null, skipHtmlChars?: boolean): string | null {\n\n\t const escapeMap: { [key: string]: string } = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;', \n\t\t};\n\n    if (toEscape == null) {\n        return null;\n    }\n\n    const stringResult = toEscape.toString().toString();\n\n    if (skipHtmlChars) {\n\t\treturn stringResult;\n\t}\n\n    return stringResult.replace(/[&<>\"']/g, (chr) => escapeMap[chr]);\n}\nexport class Label extends Component {\n\t@queryAssignedNodes('span-title') titleElement !      : any;\n\n    private requiredElement ! : HTMLElement|null;\n    private params: any;\n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    constructor(params: any){\n        super();\n        this.params = params;\n        \n    }\n\n\t@PostConstruct()\n\tinit(): void {\n        const template = LabelTamplate();\n        this.setTemplate(template);\n\n\t\tconst comp : IFormLabelComp = {\n            addOrRemoveClassName: (className : string, force : boolean) => this.addOrRemoveCssClass(className, force),\n            addClassName        : (className : string) => this.addOrRemoveCssClass(className, true),\n            removeClassName     : (className : string) => this.addOrRemoveCssClass(className, false),\n            setRendererDetails  : (componentDetails : IComponentDetails ,props : any) => this.setRendererDetails(componentDetails,props),\n            getElement : () => this.getGui(),\n            getParams :()=> this.params,\n            getTitleElement : () => this.titleElement,\n            updateLabelProperties : (props: any) => this.updateLabelProperties(props),\n            loadRequiredElement : (required : boolean, classes : string) => this.loadRequiredElement(required, classes),\n        };\n\n        const controller = this.createBean(new FormLabelController());\n        controller.setComp(comp);\n\t}\n\n    private setRendererDetails(componentDetails : IComponentDetails, props : any): void {\n        if (componentDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = componentDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutRenderer(props);\n\t\t}\n\t}\n\n    private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n    private updateLabelProperties(props: any): void {\n        const {label, required, ariaLabelledby} = props;\n        const classes = useUtilityClasses();\n\n        if(label == null) {\n            this.setDisplayed(false);\n            return;\n        }\n\n        this.setDisplayed(true);\n\n        this.loadLabelElement(label,ariaLabelledby);\n\t\t\n\t\tthis.loadRequiredElement(required, classes.asterisk)\n\n    }\n\n    private insertValueWithoutRenderer(props : any) : void {\n\n\t\tconst {label, required, ariaLabelledby} = props;\n\n        const classes = useUtilityClasses();\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\n\n        // if(label == null) {\n        //     this.setDisplayed(false);\n        //     return;\n        // }\n\n        this.setDisplayed(true);\n\n        this.loadLabelElement(label,ariaLabelledby);\n\t\t\n\t\tthis.loadRequiredElement(required, classes.asterisk)\n\t}\n\n    private loadLabelElement(label: string,ariaLabelledby : string) : void {\n        if(label == null || label === undefined) {\n            label = \"\"\n\n        }\n            let labelElement = document.createElement('label');\n            labelElement.setAttribute('ref', 'span-title');\n            labelElement.classList.add(TITLE_CLASS_NAME);\n            labelElement.setAttribute('id',ariaLabelledby) ;\n            labelElement.innerText = label;\n\n        //    const template = loadTemplate(labelElement);\n\n            // this.setTemplate(template);\n            this.appendChild(labelElement);\n    }\n\n    private loadRequiredElement(required : boolean , _classes : string) : void {\n\t\t\t// let requiredElement = loadTemplate(`<span class=\"dg-number__label--required\">*</span>`);\n\t\t\t// this.appendChild(requiredElement);\n            // !required ? requiredElement.style.display = 'none' : null;\n\n        if (required) {\n            this.requiredElement = document.createElement('span');\n            this.requiredElement.className = 'dg-field__label--required';\n            this.requiredElement.textContent = '*';\n\t\t\tthis.appendChild(this.requiredElement);\n\t\t}else if(!required) {\n            this.requiredElement && this.requiredElement.remove();\n            this.requiredElement = null\n\n        }\n    }\n}\n","\nimport {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { CheckboxOptionHandlerTypes } from \"./checkbox-option-handler.types\";\n\n@Bean('stateManager')\n class CheckBoxStateManager extends EventEmitter {\n\n    isInValid() : boolean {\n        return (this.optionsHandler as CheckboxOptionHandlerTypes).isValid();\n    }\n}\nexport {\n    CheckBoxStateManager\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nexport function getValidationUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field__validation-message', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IErrorComp, IStateManager, IErrorUserComponentHandler } from \"./error-view.types\";\nimport { AutoWired, BEAN_NAME, toggleAttribute } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getValidationUtilityClass } from \"./error-classes\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\n\nconst useUtilityClasses = (ownerState : any) => {\n    const {inValid} = ownerState;\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: '',\n\t\t\tmodifiers: [\n                inValid && 'error'\n            ],\n\t\t},\n\t};\n\treturn composeClasses(slots, getValidationUtilityClass);\n\n};\nexport class ErrorController extends EventEmitter {\n    private component!: IErrorComp;\n\n    private isInValid : boolean = false;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IErrorUserComponentHandler;\n\n    @AutoWired('stateManager') stateManager !: IStateManager;\n    \n    setComp(component : IErrorComp) {\n        this.component = component;\n\n        this.setRendererDetails();\n\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_FOCUS_OUT\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_VALUE_UPDATE\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_VISIBILITY_CHANGED', (params) => this.addHideClassName(params.error))\n\n    }\n\n    private addHideClassName(hide : boolean = false) : void {\n        const element  = this.component.getElement();\n        hide != undefined && element.classList.toggle('dg-hide', hide);\n    }\n\n    setRendererDetails(event : {force : boolean} = { force: false }) : void {\n\n        const force = event.force ?? false;\n\n        const inValid = this.stateManager.isInValid(); \n\n        if(!force  && this.isInValid === inValid) {\n            return;\n        }\n\n        this.isInValid = inValid;\n\n\n        const classes = useUtilityClasses({ inValid });\n        const showErrorState = this.optionsHandler.showErrorState ? this.optionsHandler.showErrorState(): false;\n\n        if(inValid && showErrorState){\n            const params = this.component?.getParams();\n            const validationMessageClasses = params.getValidationMessageClasses()\n            validationMessageClasses ? classes.root = classes.root + \" \" + validationMessageClasses : \"\";\n            this.addHideClassName(false);\n    \t\tthis.component.addOrRemoveCSSClass(classes.root, true);\n        }else {\n            this.addHideClassName(true);\n        }\n\n        \n        let userDetails: IComponentDetails;\n\n\n        let params : any = {};\n        if(inValid) {\n            const rendererWrapper = this.createInvalidTextRendererWrapper();\n                  params          = this.createInvalidTextRendererParams();\n                  userDetails     = this.userComponentHandler.getErrorRendererDetails(rendererWrapper, params) as IComponentDetails;\n        }\n\n        this.component.setRendererDetails(userDetails!, params.value);\n\n        this.setAccessibility();\n        \n    }\n\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n\n        toggleAttribute(element, 'id', this.optionsHandler.getAriaDescribedby())\n    }\n\n     private createInvalidTextRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionsHandler.getValidationMessageRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionsHandler.getValidationMessageRendererParams(),\n\t\t};\n    }\n\n    private createInvalidTextRendererParams() {\n        return {\n\t\t\tvalue: this.optionsHandler.getValidationMessage(),\n\t\t};\n    }\n\n    refresh() {\n        this.setRendererDetails();\n    }\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IErrorComp } from \"./error-view.types\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\nimport { ErrorController } from \"./error-controller\";\n\n\nconst errorTextTemplate = () => {\n\t// const div = document.createElement(\"div\");\n\t// div.innerHTML = `<div></div>`;\n\t// return div.firstChild as HTMLElement;\n\treturn document.createElement(\"div\");\n}\nexport function loadTemplate(template: string): HTMLElement {\n\tconst tempDiv = document.createElement('div');\n\ttempDiv.innerHTML = (template || '').trim();\n\n\treturn tempDiv.firstChild as HTMLElement;\n}\n\nexport function escapeString(toEscape?: string | null, skipHtmlChars?: boolean): string | null {\n\n\t const escapeMap: { [key: string]: string } = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;', \n\t\t};\n\n    if (toEscape == null) {\n        return null;\n    }\n\n    const stringResult = toEscape.toString().toString();\n\n    if (skipHtmlChars) {\n\t\treturn stringResult;\n\t}\n\n    return stringResult.replace(/[&<>\"']/g, (chr) => escapeMap[chr]);\n}\nexport class ErrorComponent extends Component {\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\tprivate params : any;\n\n\tconstructor(params: any){\n\t\tsuper();\n        this.params = params;\n\t}\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst template = errorTextTemplate();\n\t\tthis.setTemplate(template);\n\n\t\tconst comp: IErrorComp = {\n\t\t\tsetRendererDetails: (rendererDetails: IComponentDetails, value ?: string) => this.setRendererDetails(rendererDetails , value),\n\t\t\taddOrRemoveCSSClass : (className : string, addOrRemove : boolean) => this.addOrRemoveCssClass(className, addOrRemove),\n\t\t\tgetElement : () => this.getGui(),\n\t\t\tgetParams : () => this.params\n\t\t};\n\n\t\tconst controller = this.createBean(new ErrorController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className\n\t}\n\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails, value ?: string): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer(value!)\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer(value : string) {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n\n        const escapedValue = value != null ? escapeString(value) : null;\n        if (escapedValue != null) {\n            parentElement.innerHTML = escapedValue;\n        }\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME } from \"@dg/corecomponent\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { CheckboxAPI } from \"./core/model/checkbox-api\";\nimport { CheckboxOptionHandler } from \"./core/model/checkbox-options-handler\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { CheckboxControllerHandler } from \"./core/controller/checkbox-controller-handler\";\nimport { CheckboxUserComponentHandler } from \"./core/model/checkbox-user-component-handler\";\nimport { CheckBoxStateHandler } from \"./core/model/checkbox-state-handler\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { ICheckboxConfiguration } from \"./checkbox-configuration.types\";\nimport { DescriptionComponent } from \"../description/description-view\";\nimport { Label } from \"../label/label-view\";\nimport { CheckBoxStateManager } from \"./core/model/checkbox-state-manager\";\nimport { ErrorComponent } from \"../error/error-view\";\n\n\ninterface IUserConfigurationMergedParams {\n    configuration: any;\n    frameWorkOverrides: IFrameworkOverrides | null;\n    globalEventListener: Function | null;\n    frameworkComponentWrapper: any | null;\n    instanceID : string;\n}\ninterface IClickEventMeta {\n    state : boolean,\n    event : MouseEvent\n}\nlet nextInstanceId = 1;\n\nclass CheckboxCoreComponent {\n\n    initialize(configuration : ICheckboxConfiguration, params : IUserParams = {}, createUI : CallableFunction) {\n\n        const instanceID          = configuration.instanceID ?? String(nextInstanceId++);\n        const beanClasses         = this.createBeanClasses();\n        const context             = new Context();\n        const userConfiguration   = this.createuserConfiguration(configuration, params, instanceID);\n\n        context.registerBeanClasses(beanClasses, userConfiguration);\n        this.registerCoreComponent(context);\n        createUI(context);\n\n        (window as any).linkContext = context;\n\n    }\n\n    createBeanClasses() : Set<any> {\n        let beanClassList = [\n            CheckboxAPI,\n            CheckboxOptionHandler,\n            CheckboxControllerHandler,\n            CheckBoxStateHandler,\n            CheckboxUserComponentHandler,\n\n            ComponentsRegistry,\n            EventHandler,\n            ComponentMetadataProvider,\n            CheckBoxStateManager,\n            UserComponentRegistry\n        ];\n        const beanClassSet = new Set(beanClassList);\n        return beanClassSet;\n    }\n\n    private createuserConfiguration(configuration : any, params : IUserParams, instanceID : string) : IUserConfigurationMergedParams {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n    }\n\n    private registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = this.createComponentList();\n        registry.setupComponents(components);\n    }\n\n    private createComponentList() : ComponentMeta[] {\n        let components: ComponentMeta[] = [\n            {\n                componentName: 'checkbox-label',\n\t\t\t    componentClass: Label\n            },\n            {\n                componentName: 'checkbox-helper',\n                componentClass : DescriptionComponent\n            },\n            {\n                componentName : 'checkbox-error',\n                componentClass: ErrorComponent\n            }\n\n        ]\n\n        return components\n    }\n}\n\n\n\nexport {\n    CheckboxCoreComponent,\n    IClickEventMeta\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { CheckboxAPITypes } from \"./core/model/checkbox-api.types\"\nimport { IFrameworkOverrides } from \"@dg/corecomponent/FrameWork.js\";\nimport { IModule } from \"../core/modules.types\";\nimport { ICheckboxConfiguration } from \"./checkbox-configuration.types\";\nimport { CheckboxBeanConstants } from \"./constants/checkbox-constants\";\nimport { CheckboxRootView } from \"./core/view/checkbox-root-view\";\nimport { CheckboxCoreComponent } from \"./checkbox-core-component\";\n\ninterface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IModule[];\n}\n\nclass Checkbox {\n\n    public api !: CheckboxAPITypes;\n\n    constructor(configuration : ICheckboxConfiguration, params ?: IUserParams) {\n\n        const createUI = (context : Context) => {\n            this.api = context.getBean(CheckboxBeanConstants.CHECKBOX_API) as CheckboxAPITypes;\n            // configuration.appendTo && context.createBean(new CheckboxRootView(configuration.appendTo));\n            context.createBean(new CheckboxRootView(configuration?.appendTo));\n        }\n\n        const checkboxCoreComponent = new CheckboxCoreComponent();\n        checkboxCoreComponent.initialize(configuration, params, createUI);\n    }\n\n}\n\nexport {\n    Checkbox\n}","import { PostConstruct,clearElement,queryAssignedNodes, removeFromParent} from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { SelectDropdownOptionCompType } from \"./dropdown-option.types\";\nimport { SelectDropdownOptionController } from \"./dropdown-option-controller\";\nimport { Checkbox } from \"../../../../Checkbox/checkbox\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nexport interface IRenderer<T = any>{\n    init?(param : T):void;\n    getGui():HTMLElement;\n    destroy?():void\n}\n\nconst optionTemplate = (_props:any): HTMLElement => {\n    const li = document.createElement(\"li\");\n    li.tabIndex = 0;\n\n//     const option_label = document.createElement(\"label\");\n//     option_label.className = \"dg-dropdown__option-label\";\n\n//    option_label.innerHTML = `\n//    <div class=\"dg-dropdown__option-label-text\" > ${prop.getOption()}</div>\n//    `;\n\n    // const option_label_text = document.createElement(\"div\");\n    // option_label_text.className = \"dg-dropdown__option-label-text\"\n    // option_label_text.textContent = props.value\n    // // prop.getOption(option_label_text);\n    // li.appendChild(option_label_text);\n\n//     if(prop.isMultiple()){\n//         checkbox(option_label);\n//     }   \n\n//     option_label.appendChild(option_label_text);\n// li.appendChild(option_label);\n    return li as HTMLElement;\n};\n\n// const checkbox = (appendTo: HTMLElement) => {\n//     const innerHtmlContent = `\n//     <input tabindex=\"-1\" type=\"checkbox\"  ref = \"checkbox\" class=\"dg-dropdown__option-checkbox-input\" role=\"checkbox\" aria-disabled=\"false\" aria-checked=\"true\" aria-label=\"checkbox\">\n//     <span class=\"dg-dropdown__option-checkbox-input--custom\" style=\"\n//                     --checked-border-color: black;\n//                     --checked-fill-color: red;\n//                     --unchecked-border-color: green;\n//                     \"></span>\n//     `;\n//     appendTo.insertAdjacentHTML(\"beforeend\", innerHtmlContent); // Append the inner HTML directly\n// };\n\n\n// function clearElement(el: HTMLElement): void {\n//     while (el && el.firstChild) { el.removeChild(el.firstChild); }\n// }\n\nexport class SelectDropdownOptionComponent extends Component{\n    @queryAssignedNodes('checkbox') checkbox !: any;\n    \n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    @PostConstruct()\n    init(){\n        const comp:SelectDropdownOptionCompType = {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n            getCheckbox: ()=>this.getCheckbox(),\n            getParentComp : ()=>this.getParentComponent(),\n            setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n            destroy : () => this.destroy()\n          \n        }\n        const controller = this.createBean(new SelectDropdownOptionController());\n        controller.setValue();\n        const props = controller.getProperty();\n        this.setTemplate(optionTemplate(props));\n\n        controller.setComp(comp); \n        // if(props.isMultiple()){\n            if(props.selectedOptions().includes(props.id)){\n                // props.isMultiple() && controller.updateCheckBox(true);\n                controller.updateSelectedOptions(); \n            }\n        // }\n\n        \n    }\n    private addOrRemoveCSSClass(className: string): void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    loadAfterRenderOption(defaultValue:boolean,props:any) {\n      const checkboxConfiguration =  props.getCheckboxConfig();\n      checkboxConfiguration.appendTo = this.getGui();\n      checkboxConfiguration.defaultValue = defaultValue;\n      return  new Checkbox(checkboxConfiguration);\n    }\n\n    getCheckbox(){\n        return this.checkbox;\n    }\n\n    getElement(): HTMLElement {\n        return this.getGui();\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n\t\t// this.setTemplate(RootownDropdowntTemplate());\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n    \n    destroy(): void {\n        this.getGui().remove();\n    }\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DROPDOWN_DROPDWON_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { IDropdownOptionHandler } from \"./dropdown-option-handler.types\";\nimport {  DropdownOptionElementModel, IDropdownConfiguration, SelectAllEventParams } from \"../../../dropdown_configuration\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class DropDownOptionHandler extends EventEmitter implements IDropdownOptionHandler {\n    onCreateCustomOption(_option: any) {\n        throw new Error(\"Method not implemented.\");\n    }\n\n\t@AutoWired(DROPDOWN_DROPDWON_BEAN_NAME.DROPDOWN_CONFIGURATION)\n\tconfiguration!: IDropdownConfiguration;\n\n    private domKey = `_DG_${Math.random().toString()}`;\n\n\n    getDomKey(): string {\n\t\treturn this.domKey;\n\t}\n\n\tgetDomData(element: Node | null, key: string): any {\n        if(!element) {\n            return;\n        }\n        const domData = (element as any)[this.getDomKey()];\n\t\treturn domData ? domData[key] : undefined;\n\t}\n\n\tsetDomData(element: Element, key: string, value: any): any {\n\t\tconst domKey = this.getDomKey();\n\t\tlet domData = (element as any)[domKey];\n\n\t\tif (!domData) {\n\t\t\tdomData = {};\n\t\t\t(element as any)[domKey] = domData;\n\t\t}\n\n\t\tdomData[key] = value;\n\t}\n\n    // Getter methods for configuration properties\n    getOptions(): DropdownOptionElementModel[] | ((params : any) => void) | undefined {\n        return this.configuration.options;\n    }\n\n    isMultiple(): boolean {\n        return this.configuration.multiple ?? false;\n    }\n\n    getSelectedData(): string[] | undefined {\n        return this.configuration.selectedData?.();\n    }\n\n    getSelectionLimit(): number | undefined {\n        return this.configuration.selectionLimit;\n    }\n\n    isCloseOnSelect(): boolean {\n        return this.configuration.closeOnSelect ?? true;\n    }\n\n    getDropdownAppendTo(): HTMLElement {\n        return this.configuration.dropdownAppendTo ?? document.body;\n    }\n\n    isSearchable(): boolean {\n        return this.configuration.searchable ?? false;\n    }\n    \n    getSearchBoxPlaceholder(): string {\n        return this.configuration.searchBoxPlaceholder?? '';\n    }\n\n    isVirtualListEnabled(): boolean {\n        return this.configuration.virtualList ?? false;\n    }\n\n    isSortEnabled(): boolean {\n        return this.configuration.sort ?? false;\n    }\n\n    getSortOrder(): 'asc' | 'desc' | undefined {\n        return this.configuration.sortOrder;\n    }\n\n    isGroupByEnabled(): boolean {\n        return this.configuration.groupBy ?? false;\n    }\n\n    isSelectAllButtonEnabled(): boolean {\n        return this.configuration.selectAllButton ?? false;\n    }\n\n    isClearableEnabled(): boolean {\n        return this.configuration.clearable ?? false;\n    }\n\n    isAcceptNewValuesEnabled(): boolean {\n        return this.configuration.acceptNewValues ?? false;\n    }\n\n    getNewValuePattern(): RegExp | undefined {\n        return this.configuration.newValuePattern;\n    }\n\n    getValidation(): ((value: any) => boolean) | undefined {\n        return this.configuration.validation;\n    }\n\n    // Event handlers\n    onBeforeDropdownOpen(): void {\n        this.configuration.onBeforeDropdownOpen?.();\n    }\n\n    onAfterDropdownOpen(): void {\n        this.configuration.onAfterDropdownOpen?.();\n    }\n\n    onBeforeDropdownClose(focus?:boolean): void {\n        this.configuration.onBeforeDropdownClose?.(focus);\n    }\n\n    onAfterDropdownClose(): void {\n        this.configuration.onAfterDropdownClose?.();\n    }\n\n    onBeforeSelect(params : any): boolean {\n        return this.configuration.onBeforeSelect?.(params) ?? true;\n    }\n\n    onAfterSelect(params :any): void {\n        this.configuration.onAfterSelect?.(params);\n    }\n\n    onBeforeDeselect(params : any): boolean {\n        return this.configuration.onBeforeDeselect?.(params ) ?? true;\n    }\n\n    onAfterDeselect(params: any): void {\n        this.configuration.onAfterDeselect?.(params);\n    }\n\n    onChange(params:any): void {\n        this.configuration.onChange?.(params);\n    }\n    onCreateOption(newOption:any){\n        this.configuration.onCreateOption?.(newOption);\n    }\n\n    onBeforeCreateOption(option:any): any{\n        return this.configuration.onBeforeCreateOption?.(option)?? true;\n    }\n\n    onAfterCreateOption(option:any): any{\n        return this.configuration.onAfterCreateOption?.(option)?? true;\n    }\n\n    onKeydown(event:KeyboardEvent):void{\n        this.configuration.onKeydown?.(event);\n    }\n\n    addOption(newOption : DropdownOptionElementModel): void {\n        this.configuration.options?.push(newOption);\n    }\n\n    removeOption(newOption : DropdownOptionElementModel):void{\n        this.configuration.options = this.configuration.options?.filter((option:DropdownOptionElementModel) => option.value!== newOption.id);\n    }\n\n    isOptionAsChip():boolean{\n        return this.configuration.isOptionAsChip ?? false;\n    }\n\n    isCreateNewOptionEnabled():boolean{\n        return this.configuration.enableCreateNewOption?? false;\n    }\n\n    // isAddCollaboratorEnabled(): boolean {\n    //     return this.configuration.enableAddCollaborator ?? false;\n    // }\n\n    isNoneOptionEnabled():boolean{\n        return this.configuration.enableNoneOption ?? false;\n    }\n\n    isReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n\n\n    getClassName(): string | string[] {\n        return this.configuration.classname?? '';\n    }\n\n    getDropdownRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.dropdownRenderer;\n    }\n\n    getDropdownRendererParams(): object | undefined {\n        return this.configuration.dropdownRendererParams;\n    }\n\n    getDropdownFooterRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.dropdownFooterRenderer;\n    }\n\n    getDropdownFooterRendererParams(): object | undefined {\n        return this.configuration.dropdownFooterRendererParams;\n    }\n\n    getDropdownHeaderRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.dropdownHeaderRenderer;\n    }\n\n    getDropdownHeaderRendererParams(): object | undefined {\n        return this.configuration.dropdownHeaderRendererParams;\n    }\n\n    getCreateNewOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.createNewOptionRenderer;\n    }\n\n    getCreateNewOptionRendererParams(): object | undefined {\n        return this.configuration.createNewOptionRendererParams;\n    }\n    getNoOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.noOptionRenderer;\n    }\n\n    getNoOptionRendererParams(): object | undefined {\n        return this.configuration.noOptionRendererParams;\n    }\n\n    isautoFocusSelectedOptionEnabled(): boolean { \n        return this.configuration.autoFocusSelectedOption ?? false;\n    }\n\n    getDropdownModel() : 'remote' | 'local' {\n        return this.configuration.model ?? 'local';\n    }\n    \n    // tool tip  based api started//\n    shouldShowTooltip(): boolean {\n    return this.configuration.tooltip ?? false;\n    }\n\n    getTooltipMessage(): string  {\n    return this.configuration.tooltipMessage ?? \"please enter a number\";\n    }\n\n    getTooltipRegex(): RegExp | undefined {\n    return this.configuration.tooltipRegex;\n    }\n\n    getTooltipPosition(): Position  {\n    return this.configuration.tooltipPosition ?? Position.bottomRight;\n    }\n\n    getTooltipAppendto(): HTMLElement | undefined {\n    return this.configuration.tooltipAppendto ?? document.body;\n    }\n\n    getTooltipHideDelay(): number  {\n    return this.configuration.tooltipHideDelay?? 700;\n    }\n\n    // tool tip  based api ended//\n\n    onFocus():any{\n        return this.configuration.onFocus?.() ?? true;\n    }\n\n    onBlur():any{\n        return this.configuration.onBlur?.() ?? true;\n    }\n\n\n    getLoadingRenderer() : { new (...args: any[]): ICustomRenderer }| undefined {\n        return this.configuration.loadingRenderer;\n    }\n        \n    getLoadingRendererParams() : Record<string, any> {\n        return this.configuration.loadingRendererParams ?? {};\n    }\n\n    onSelectAll(params : SelectAllEventParams) : void {\n        this.configuration.onSelectAll && this.configuration.onSelectAll(params);\n    }\n\n    onBeforeSelectAll(params : SelectAllEventParams) : boolean {\n        return (this.configuration.onBeforeSelectAll && this.configuration.onBeforeSelectAll(params)) ?? true;\n    }\n\n    onAfterSelectAll(params : SelectAllEventParams) : void {\n        this.configuration.onAfterSelectAll && this.configuration.onAfterSelectAll(params);\n    }\n}","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\nimport {SearchCompType} from \"./dropdown-search.types\"\nimport { AutoWired, BEAN_NAME, setAriaControls, setAriaDisabled, setAriaLabel } from '@dg/corecomponent';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { IDropdownOptionHandler } from '../model/dropdown-option-handler.types';\n// import { composeClasses } from '@dg/utils';\n// import { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\n\n// const useUtilityClasses =  (_ownerState : any) =>{\n//     // const {disabled, readonly} = ownerState;\n//     const slots ={\n//         root : {\n//             slot : 'search',\n//             modifiers:[\n//             ],\n//         },\n//     };\n//     return composeClasses(slots,getDropdownRootUtilityClass);\n// }\n\nexport class SearchController extends EventEmitter{\n    comp!: SearchCompType;\n    dropdown:any;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n    \n\n\n    setComp(comp:SearchCompType){\n        this.comp = comp;\n        this.registerSearch();\n        // this.applyClasses();\n        this.registerEvents();\n        this.setAriaAttributes();\n        this.setDisableState();\n        this.addListener(this.eventHandler, 'EVENT_OPTION_LOADED', this.setDisableState.bind(this));\n        // this.createOptions();\n    }\n\n    private registerSearch(){\n        this.dropdownCtrlHandler.registerSearch(this);\n    }\n\n    setDisableState() : void {\n        const element = this.comp.getElement();\n        const isLoaded = this.dropdownDatapart.getIsLoaded();\n        setAriaDisabled(element, !isLoaded);\n        element.classList.toggle('dg-dropdown__search--disables', !isLoaded);\n\n        element.disabled = !isLoaded;\n    }\n\n    private setAriaAttributes() {\n        const element = this.comp.getElement();\n        setAriaLabel(element,\"search options\")\n        setAriaControls(element,\"dropdown-listbox\")\n    }\n\n    // private applyClasses() : void {\n    //     const ownerState = this.getOwnerState();\n    //     const classes = useUtilityClasses(ownerState);\n    //     this.comp.addOrRemoveCSSClass(classes.root);\n    // }\n\n    // private getOwnerState() {\n    //     return {\n    //     }\n\t// }\n\n    // private refresh() : void {\n    //     this.applyClasses();\n\n    // }\n\n     getProperty(){\n        return {\n            options : this.optionHandler.getOptions(),\n            searchBoxPlaceholder : this.optionHandler.getSearchBoxPlaceholder(),\n        }\n    }\n\n    private registerEvents() : void {\n        this.addListener(this.comp.getElement(),'input', (event:any) => {\n            this.optionHandler.onKeydown(event);\n            this.searchInput();\n        });\n\n        this.addListener(this.comp.getElement(),'click', (event) => {\n            this.focus();\n            event.stopPropagation();\n        });\n        this.addListener(this.comp.getElement(),'keydown', (event:any) => {\n            if(event.key === ' ') {\n                event.stopPropagation();\n            }\n        });\n    }\n\n    searchInput():void{\n        const searchComp =  this.comp.getElement() as HTMLInputElement;\n        this.dropdownDatapart.filterOptions(searchComp.value);\n        this.dropdownCtrlHandler.getDropdown().updateDropdownOption(searchComp.value);\n\n        this.dropdownCtrlHandler.getDropdownComponent().resetActiveElement();\n        if(searchComp.value){\n            this.dropdownCtrlHandler.getDropdownComponent().resetFocuesdOption();\n            this.dropdownCtrlHandler.getDropdownComponent().moveNextOption();\n        }\n    }\n\n    focus(){\n        this.comp.getElement().focus({\n            preventScroll :true \n        });\n        this.optionHandler.onFocus();  \n    }\n\n\n    blur(){\n        this.comp.getElement().blur();\n        this.optionHandler.onBlur();\n    }\n\n    clearsearch(){\n        this.comp.getElement().value = '';\n    }\n\n    onSearch(value : string){\n        this.comp.getElement().value = value;\n        this.searchInput();\n    }\n    \n    getValue():string{\n        const searchComp =  this.comp.getElement() as HTMLInputElement;\n        return   searchComp.value;\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { SearchCompType } from \"./dropdown-search.types\";\nimport {SearchController} from \"./dropdown-search-controller\"\n\nconst search = (props: any): HTMLElement => {\n    const searchBlock = document.createElement(\"label\");\n    searchBlock.style.position = \"relative\";\n    searchBlock.classList.add(\"dg-dropdown__search-wrapper\");\n\n    \n    const searchInput = document.createElement(\"input\");\n    // Assigning ref property to the element (not an actual HTML attribute)\n    (searchInput as any).setAttribute('ref', \"search-input\");\n    searchInput.type = \"text\";\n    searchInput.tabIndex = 0;\n    searchInput.classList.add(\"dg-dropdown__search\");\n    searchInput.placeholder = props.searchBoxPlaceholder || \"Find the option\";\n    searchInput.setAttribute(\"aria-label\", \"Search options\");\n    searchInput.setAttribute(\"aria-controls\", \"dropdown-listbox\");\n\n    const searchIcon = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    searchIcon.setAttribute(\"width\", \"14\");\n    searchIcon.setAttribute(\"height\", \"14\");\n    searchIcon.setAttribute(\"viewBox\", \"4 3 21 21\");\n    searchIcon.classList.add(\"dg-dropdown__search-icon\");\n\n    const gLayer2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n    gLayer2.setAttribute(\"data-name\", \"Layer 2\");\n\n    const gLayer11 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n    gLayer11.setAttribute(\"data-name\", \"Layer 11\");\n\n    const path1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    path1.setAttribute(\n        \"d\",\n        \"M20.53 19.47l-1.9-1.91a7.26 7.26 0 10-1.07 1.07l1.91 1.9a.75.75 0 001.06 0 .75.75 0 000-1.06zM13 18.75A5.75 5.75 0 1118.75 13 5.76 5.76 0 0113 18.75z\"\n    );\n\n    const path2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    path2.setAttribute(\"fill\", \"none\");\n    path2.setAttribute(\"d\", \"M0 0h26v26H0z\");\n\n    gLayer11.append(path1, path2);\n    gLayer2.appendChild(gLayer11);\n    searchIcon.appendChild(gLayer2);\n\n    // Append elements\n    searchBlock.append(searchInput, searchIcon);\n\n    return searchBlock;\n};\n \n\n\n\nexport class SearchComponent extends Component {\n\n    @queryAssignedNodes('search-input') searchInputComp !: any;\n\n    @PostConstruct()\n    init(){\n\n        const controller = this.createManagedBean(new SearchController());\n        const props = controller.getProperty();\n        const searchInput = search(props);\n        const comp:SearchCompType = {\n            getElement :()=>this.getSearchInputComp() as HTMLInputElement,\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n        }\n        this.setTemplate(searchInput);\n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    getSearchInputComp():HTMLElement{\n        return this.searchInputComp;\n    }\n\n\n}","import {DropdownCompType} from \"./dropdown.types\"\nimport { AutoWired, BEAN_NAME, setAriaRole } from '@dg/corecomponent';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\nimport { composeClasses } from '@dg/utils';\nimport { IDropdownOptionHandler } from '../model/dropdown-option-handler.types';\nimport { AbstractController } from '../../../../utility/abstract-controller';\nimport { DropdownOptionElementModel } from \"../../../dropdown_configuration\";\n\nconst useUtilityClasses = (_ownerState : any) =>{\n    // const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'options-listbox',\n            modifiers:[\n                // disabled && 'disabled',\n                // readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getDropdownRootUtilityClass);\n}\n\nexport class DropdownController extends AbstractController<DropdownCompType>{\n    comp!: DropdownCompType;\n    dropdown:any;\n    parentComp :any;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n    \n\n\n    setComp(comp:DropdownCompType){\n        this.comp = comp;\n        this.registerDropdownElement(this.comp.getElement());\n        this.registerParentComp();\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.registerEvents();\n        // this.registerCreateNewOptionEvent();\n        this.registerNoneOptionEvent();\n\n        this.addListener(this.eventHandler, 'EVENT_OPTION_LOADED', this.reRender.bind(this));\n    }\n    registerDropdownElement(_dropdown:any):void{\n        this.dropdownCtrlHandler.registerDropdown(this);\n    }\n\n    registerParentComp():void{\n        this.parentComp =  this.comp.getParentComp();\n    }\n\n    private setAriaAttributes() {\n        const element = this.comp.getElement();\n        setAriaRole(element,\"listbox\");\n    }\n\n    private applyClasses() : void {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n    }\n\n    refresh() : void {\n        this.applyClasses();\n        // this.registerNoneOptionEvent();\n    }\n\n    private getOwnerState() {\n        return {\n        //     disabled: this.optionHandler.isDisabled(),\n        //     readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n     getProperty(){\n        return {\n            options : this.dropdownDatapart.getAllOptions(),\n            isVirtualList : this.optionHandler.isVirtualListEnabled(),\n            isNoneOptionEnabled : this.optionHandler.isNoneOptionEnabled(),\n            isCreateNewOptionEnabled : this.optionHandler.isCreateNewOptionEnabled(),\n            // isAddCollaboratorEnabled : this.optionHandler.isAddCollaboratorEnabled(),\n            isMultiple                : this.optionHandler.isMultiple(),\n            isLoaded : this.dropdownDatapart.getIsLoaded()\n        }\n    }\n\n    registerEvents():void{\n        this.addListener(this.eventHandler,\"clearAllSelectedOptions\", ()=>{this.clearAllSelectedOptions()});\n        this.addListener(this.eventHandler,\"clearOptions\", ()=>{this.clearOptions()});\n    }  \n\n    // registerCreateNewOptionEvent():void{\n    //     const newOptionButton  =  this.dropdownCtrlHandler.getDropdownCreateNewOptionController()?.getElement();\n    //     newOptionButton && newOptionButton.addEventListener('click',(event)=>{\n    //         this.addNewOption();\n    //         this.dropdownCtrlHandler.getSearch().focus();\n    //         event.stopPropagation();\n    //     })\n\n    //     newOptionButton && newOptionButton.addEventListener(\"mouseover\",(_event)=>{\n    //         this.dropdownCtrlHandler.getDropdownComponent().setHoveredOption('new', -1)\n    //      });\n    // }\n\n    registerNoneOptionEvent():void{\n        const noneOptionComp = this.comp.getNoneOptionComp();\n        noneOptionComp && noneOptionComp.addEventListener('click',(event)=>{\n            this.noneOption();\n            event.stopPropagation();\n        })\n        noneOptionComp && noneOptionComp.addEventListener(\"mouseenter\",(_event)=>{\n            this.dropdownCtrlHandler.getDropdownComponent().setHoveredOption('none', -1)\n         });\n    }\n\n    noneOption():void{\n        if(this.optionHandler.isMultiple()){\n            const selectedOption :  DropdownOptionElementModel[] = this.dropdownDatapart.getSelectedOptions();\n            for(let index = 0;index < selectedOption.length; index++){\n                this.optionHandler.onAfterDeselect(selectedOption[index]);\n            }\n            this.clearAllSelectedOptions();\n        \n        }\n        else{\n            const selectedOption :  DropdownOptionElementModel[] = this.dropdownDatapart.getSelectedOptions();\n            this.optionHandler.onAfterDeselect(selectedOption[0]);\n            this.clearAllSelectedOptions();\n            this.optionHandler.onBeforeDropdownClose();\n        }\n    }\n\n    updateDropdownOption(newOption:string){\n        this.comp.renderFilteredOptions(this.parentComp,this,newOption);\n        this.registerNoneOptionEvent();\n    }\n\n    updateVirtualList(){\n        this.comp.updateVirtualList();\n    }\n\n    clearAllSelectedOptions(){\n        this.dropdownDatapart.deleteAllSelectedOptions();\n        const optionsInstance = this.dropdownDatapart.getAllOptionsIntance();\n        if(this.optionHandler.isMultiple()){\n            for(let index = 0; index < optionsInstance.length; index++){\n                // optionsInstance[index].updateCheckBox(false);\n                optionsInstance[index].refresh();\n            }\n            this.dispatchEvent({\n                type : \"unCheckSelectAll\"\n            });\n        }\n        else{\n            for(let index = 0; index < optionsInstance.length; index++){\n                optionsInstance[index].deSelectOption();\n                optionsInstance[index].refresh();\n\n            }\n        }\n\n    }\n\n    clearOptions(){\n        // this.dropdownDatapart.deleteAllSelectedOptions();\n        const optionsInstance = this.dropdownDatapart.getAllOptionsIntance();\n        for(let index = 0; index < optionsInstance.length; index++){\n            // optionsInstance[index].updateCheckBox(false);\n            optionsInstance[index].refresh();\n            this.optionHandler.onAfterSelect(optionsInstance[index].getValue());\n        }\n        this.dispatchEvent({\n            type : \"unCheckSelectAll\"\n        });\n    }\n\n    addNewOption() {\n\n        let newValue : string | DropdownOptionElementModel= this.dropdownCtrlHandler.getSearch().getValue();\n    \n        if (!newValue || newValue === '') {\n            return; // Exit if no value\n        }\n\n        const onBeforeCreateOptionHook = this.optionHandler?.onBeforeCreateOption?.({ value: newValue });\n    \n        if (typeof onBeforeCreateOptionHook === 'boolean') {\n            if (!onBeforeCreateOptionHook) {\n                // this.dropdownDatapart.reset();\n                // this.comp.rerenderer(this.comp.getParentComp(), this);\n                // this.dropdownCtrlHandler.getSearch().clearsearch();\n                return;\n            }\n        } else if (typeof onBeforeCreateOptionHook === 'object' || onBeforeCreateOptionHook) {\n            newValue = onBeforeCreateOptionHook;\n        }\n    \n        this.optionHandler?.onCreateOption?.(newValue);\n        (typeof newValue === 'object') ?  this.addOption(newValue) : this.addOption({id : newValue, value : newValue});\n        this.dropdownCtrlHandler.getSearch().searchInput();\n        this.optionHandler?.onAfterCreateOption?.(newValue);\n    }\n\n    selectOption(newValue :string | DropdownOptionElementModel){\n        if (typeof newValue === 'string') {\n            this.dropdownDatapart.selectOption(newValue);\n        } else  if (typeof newValue === 'object')  {\n            this.dropdownDatapart.selectOption(newValue?.id);\n        }\n    }\n\n    addOption(option : DropdownOptionElementModel){\n        // if (typeof option === 'string') {\n        //     this.optionHandler.addOption({ id: option,value : option});\n        // } else if (typeof option === 'object') {\n        //     this.optionHandler.addOption(option);\n        // }\n        this.dropdownDatapart.addOptions([option]);\n        this.reRender();\n        this.selectOption(option.id);\n        this.dropdownCtrlHandler.getSearch().searchInput();\n        this.dropdownCtrlHandler.getSearch().focus();\n    }\n\n    removeOption(option : string | DropdownOptionElementModel){\n        \n        if (typeof option === 'string') {\n            this.dropdownDatapart.removeOptions([{ id: option}]);\n        } else if (typeof option === 'object') {\n            this.dropdownDatapart.removeOptions([option]);\n        }\n        this.reRender();\n        this.dropdownCtrlHandler.getSearch().searchInput();\n    }\n    \n    reRender(){\n        const searchElement = this.dropdownCtrlHandler.getSearch();\n        if(searchElement) {\n            searchElement.focus();\n        };\n        this.dropdownDatapart.reset();\n        this.comp.rerenderer(this.comp.getParentComp(), this);\n    }\n    \n\n    getNoneOption(): HTMLElement | undefined{\n        return this.comp.getNoneOptionComp();\n    }\n\n    // getNewOption(): HTMLElement | undefined{\n    //     return this.comp.getNewOptionButton();\n    // }\n\n\n}","import { IContainerHeightModel, IContainerHeightService, IContainerPosition } from \"./Interface/IContainerHeightHandler\";\nimport { getMaxDivHeight } from \"./utils/browser\";\n\nexport class ContainerHeightService implements IContainerHeightService {\n\tprivate maxDivHeight!: number;\n\tprivate stretching  !: boolean;\n\n\tprivate modelHeight      !: number | null;\n\tprivate uiContainerHeight!: number | null;\n\tprivate pixelsToShave    !: number;\n\tprivate divStretchOffset !: number;\n\tprivate maxScrollY       !: number;\n\n\tprivate scrollY      = 0;\n\tprivate uiBodyHeight = 0;\n\n    private model !: IContainerHeightModel;\n\n    setModel(model : IContainerHeightModel) {\n        this.model = model;\n        this.maxDivHeight = getMaxDivHeight();\n    }\n\n\tpublic setModelHeight(modelHeight: number | null): void {\n\t\tthis.modelHeight = modelHeight;\n\t\tthis.stretching = modelHeight != null && this.maxDivHeight > 0 && modelHeight! > this.maxDivHeight;\n\t\tif (this.stretching) {\n\t\t\tthis.calculateOffset();\n\t\t} else {\n\t\t\tthis.clearOffset();\n\t\t}\n\t}\n\n    public isStretching(): boolean {\n        return this.stretching;\n    }\n\n    public getDivStretchOffset(): number {\n        return this.divStretchOffset;\n    }\n\n    public updateOffset(): void {\n        if (!this.stretching) { return; }\n\n        const position = this.getContainerPosition();\n        const newScrollY = position.top;\n        const newBodyHeight = this.getUiBodyHeight();\n\n        const atLeastOneChanged = newScrollY !== this.scrollY || newBodyHeight !== this.uiBodyHeight;\n        if (atLeastOneChanged) {\n            this.scrollY = newScrollY;\n            this.uiBodyHeight = newBodyHeight;\n            this.calculateOffset();\n        }\n    }\n\n    public getContainerPosition() : IContainerPosition {\n        const container = this.model.getContainer();\n\t\tconst position = {\n\t\t\ttop: container.scrollTop,\n\t\t\tbottom: container.scrollTop + container.offsetHeight,\n\t\t};\n\n        return position;\n    }\n\n    public getScrollPositionForPixel(rowTop: number): number {\n        if (this.pixelsToShave <= 0) { return rowTop; }\n\n        const modelMaxScroll = this.modelHeight! - this.getUiBodyHeight();\n        const scrollPercent = rowTop / modelMaxScroll;\n        const scrollPixel = this.maxScrollY * scrollPercent;\n        return scrollPixel;\n    }\n\n    public getPixelPosition(modelPixel: number): number {\n        return modelPixel - this.divStretchOffset;\n    }\n\n    public getUiContainerHeight(): number | null {\n        return this.uiContainerHeight;\n    }\n\n    private getUiBodyHeight(): number {\n        const position = this.getContainerPosition();\n        return position.bottom - position.top;\n    }\n\n    private calculateOffset(): void {\n        this.setUiContainerHeight(this.maxDivHeight);\n        this.pixelsToShave = this.modelHeight! - this.uiContainerHeight!;\n\n        this.maxScrollY = this.uiContainerHeight! - this.uiBodyHeight;\n        const scrollPercent = this.scrollY / this.maxScrollY;\n\n        const divStretchOffset = scrollPercent * this.pixelsToShave;\n\n        this.setDivStretchOffset(divStretchOffset);\n    }\n\n    private setUiContainerHeight(height: number | null): void {\n        if (height !== this.uiContainerHeight) {\n            this.uiContainerHeight = height;\n            this.model.onHeightChanged?.(this.uiContainerHeight as number);\n        }\n    }\n\n    private setDivStretchOffset(newOffset: number): void {\n        const newOffsetFloor = typeof newOffset === 'number' ? Math.floor(newOffset) : null;\n        if (this.divStretchOffset === newOffsetFloor) { return; }\n        this.divStretchOffset = newOffsetFloor!;\n        this.model.onHeightScaleChanged?.();\n    }\n\n    private clearOffset(): void {\n        this.setUiContainerHeight(this.modelHeight);\n        this.pixelsToShave = 0;\n        this.setDivStretchOffset(0);\n    }\n}","export function getMaxDivHeight(): number {\n    if (!document.body) { return -1; }\n\n    let res = 1000000;\n\n    const testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\n    const div = document.createElement('div');\n    document.body.appendChild(div);\n\n    while (true) {\n        const test = res * 2;\n        div.style.height = test + 'px';\n\n        if (test > testUpTo || div.clientHeight !== test) {\n            break;\n        } else {\n            res = test;\n        }\n    }\n\n    document.body.removeChild(div);\n\n    return res;\n}","\nfunction createArrayOfNumbers(first: number, last: number): number[] {\n\tconst result: number[] = [];\n\n\tfor (let i = first; i <= last; i++) {\n\t\tresult.push(i);\n\t}\n\n\treturn result;\n}\n\nfunction traverseObject<T>(object: { [p: string]: T; } | T[] | null | undefined, callback: (key: string, value: T) => void) {\n    if (object == null) { return; }\n\n    if (Array.isArray(object)) {\n        for (let i = 0; i < object.length; i++) {\n            callback(i.toString(), object[i]);\n        }\n        return;\n    }\n\n    for (const [key, value ] of Object.entries(object)) {\n        callback(key, value);\n    }\n}\n\n\nexport {\n    createArrayOfNumbers,\n    traverseObject\n}","import { ContainerHeightService } from \"./ContainerHeightHandler\";\nimport { IContainerHeightService } from \"./Interface/IContainerHeightHandler\";\nimport { IVirtualList } from \"./Interface/IVirtualList\";\nimport { IController, IControllerMap, INode, IRefreshParams, IViewPort, IVirtualListModel } from \"./Interface/IVirtualListModel\";\nimport { createArrayOfNumbers, traverseObject } from \"./utils/object\";\n\n\nexport interface IAbstractVirtualListModel {\n\t//CRUD methods\n\tremoveRows(rowsToRemove: number[]): void;\n\taddRows(rowsToAdd: number[]): void;\n\n\t//check methods\n    getIndexesToDraw(indexToDraw: number[])                         : number[];\n    keepRowVirtualized(index: number)                               : boolean;\n    isRowToDraw(index: number)                                      : boolean;\n    getBufferSize()                                                 : number;\n    getDefaultHeight()                                              : number;\n    scrollToTop()                                                   : void;\n    getHeight()                                                     : number;\n    isHeightAsNull()                                                : boolean;\n    isSuppressScrollOnNewData()                                     : boolean;\n    isSuppressVirtualisation()                                      : boolean;\n    getFirstRow()                                                   : number;\n    getLastRow()                                                    : number;\n    getIndexByPosition(pixel : number, position ?: 'first' | 'last'): number;\n    isLoading(index : number)                                       : boolean;\n    getContainer()                                                  : HTMLElement;\n\n\t//events\n\tonViewPortChange(viewPort: IViewPort): void;\n\tonDisplayChanged()                   : void;\n\tonHeightChanged?(height: number)     : void;\n\tonHeightScaleChanged?()              : void;\n}\n\nexport interface IAbstractVirtualList {\n setModel(model: IAbstractVirtualListModel)     : void;\n refresh()                                      : void;\n refreshAfterModelUpdate(params: IRefreshParams): void;\n getLastScrollPixel()                           : number;\n getFirstScrollPixel()                          : number;\n getIndecies()                                  : number[];\n getPixelPosition(pixel  : number)              : number;\n}\nexport class AbstractVirtualList implements IAbstractVirtualList {\n\tprivate model!: IAbstractVirtualListModel;\n\tprivate containerHeightService!: IContainerHeightService;\n\n\tprivate firstRenderIndex!: number;\n\tprivate lastRenderIndex!: number;\n\n\tprivate refreshInProgress!: boolean;\n\n\tprivate firstPixel!: number;\n\tprivate lastPixel!: number;\n\n\tprivate rowIndecies: number[] = [];\n\n\tpublic setModel(model: IAbstractVirtualListModel): void {\n\t\tthis.model = model;\n\t\tthis.containerHeightService = new ContainerHeightService();\n\n\t\tthis.containerHeightService.setModel({\n\t\t\tgetContainer: () => this.model.getContainer(),\n\t\t\tonHeightChanged: (height: number) =>\n\t\t\t\tthis.model.onHeightChanged?.(height),\n\t\t\tonHeightScaleChanged: () => this.model.onHeightScaleChanged?.(),\n\t\t});\n\t}\n\n\tpublic refresh(): void {\n\t\tconst previousFirstRenderIndex = this.firstRenderIndex;\n\t\tconst previousLastRenderIndex = this.lastRenderIndex;\n\n\t\tthis.findFirstAndLastRowsToRender();\n\n\t\tconst viewPortchange =\n\t\t\tthis.firstRenderIndex !== previousFirstRenderIndex ||\n\t\t\tthis.lastRenderIndex !== previousLastRenderIndex;\n\n\t\tif (!viewPortchange) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.recycleRows(null);\n\n\t\tthis.model.onDisplayChanged();\n\t}\n\n\tpublic refreshAfterModelUpdate(params: IRefreshParams): void {\n\t\tthis.getRefresh();\n\n\t\tthis.updateContainerHeights();\n\n\t\tthis.scrollToTop(params);\n\n\t\tconst recycleRows: boolean =\n\t\t\t!params.domLayoutChanged && !!params.recycleRows;\n\n\t\tconst rowsToRecycle = recycleRows ? this.getRowsToRecycle() : null;\n\n\t\tif (!recycleRows) {\n\t\t\tthis.removeRows(this.rowIndecies);\n\t\t}\n\n\t\tthis.findFirstAndLastRowsToRender();\n\n\t\tthis.recycleRows(rowsToRecycle);\n\n\t\tthis.model.onDisplayChanged();\n\t}\n\n\tpublic getLastScrollPixel(): number {\n\t\treturn this.lastPixel;\n\t}\n\n\tpublic getFirstScrollPixel(): number {\n\t\treturn this.firstPixel;\n\t}\n\n\tpublic getIndecies(): number[] {\n\t\treturn this.rowIndecies;\n\t}\n\n\tpublic getPixelPosition(pixel: number): number {\n\t\treturn this.containerHeightService.getPixelPosition(pixel);\n\t}\n\n\tprivate recycleRows(rowsToRecycle?: number[] | null): void {\n\t\tconst indexesToDraw = this.findIndexesToDraw(rowsToRecycle);\n\t\tthis.removeRowComponents(indexesToDraw);\n\n\t\tthis.addRows(indexesToDraw);\n\n\t\tif (rowsToRecycle) {\n\t\t\tthis.removeRows(rowsToRecycle);\n\t\t}\n\n\t\tthis.rowIndecies.sort((a, b) => a - b);\n\t}\n\n\tprivate addRows(rowsToAdd?: number[] | null): void {\n\t\tif (!rowsToAdd) return;\n\n\t\tconst existingRowsSet = new Set(this.rowIndecies);\n\t\tconst newRows = rowsToAdd.filter((row) => !existingRowsSet.has(row));\n\n\t\tthis.rowIndecies = [...this.rowIndecies, ...newRows].sort(\n\t\t\t(a, b) => a - b,\n\t\t);\n\t\tthis.model.addRows(newRows);\n\t}\n\n\tprivate removeRowComponents(indexesToDraw: number[]): void {\n\t\tconst indexesToDrawSet = new Set(indexesToDraw);\n\n\t\tconst indexesNotToDraw = this.rowIndecies.filter(\n\t\t\t(index) => !indexesToDrawSet.has(index),\n\t\t);\n\n\t\tthis.removeRows(indexesNotToDraw);\n\t}\n\n\tprivate removeRows(rowsToRemove: number[]): void {\n\t\tconst rowIndeciesSet = new Set(this.rowIndecies);\n\t\trowsToRemove.forEach((row) => rowIndeciesSet.delete(row));\n\n\t\tthis.rowIndecies = Array.from(rowIndeciesSet).sort((a, b) => a - b);\n\t\tthis.model.removeRows(rowsToRemove);\n\t}\n\n\tprivate findIndexesToDraw(rowsToRecycle?: number[] | null) {\n\t\tconst indexesViewportToDraw = createArrayOfNumbers(\n\t\t\tthis.firstRenderIndex,\n\t\t\tthis.lastRenderIndex,\n\t\t);\n\n\t\tconst indexesToDraw = this.model.getIndexesToDraw(\n\t\t\tindexesViewportToDraw,\n\t\t);\n\t\tconst checkRowsToDraw = (_indexStr: string, index: number) => {\n\t\t\tif (index == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (index < this.firstRenderIndex || index > this.lastRenderIndex) {\n\t\t\t\tif (this.model.keepRowVirtualized(index)) {\n\t\t\t\t\tindexesToDraw.push(index);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\ttraverseObject(this.rowIndecies, checkRowsToDraw);\n\n\t\ttraverseObject(rowsToRecycle, checkRowsToDraw);\n\n\t\tindexesToDraw.sort((a: number, b: number) => a - b);\n\n\t\tconst rowIndex: number[] = [];\n\n\t\tfor (let i = 0; i < indexesToDraw.length; i++) {\n\t\t\tconst currentRow = indexesToDraw[i];\n\t\t\tconst isRowToDraw = this.model.isRowToDraw(currentRow);\n\t\t\tif (isRowToDraw) {\n\t\t\t\trowIndex.push(currentRow);\n\t\t\t}\n\t\t}\n\n\t\treturn rowIndex;\n\t}\n\n\tprivate findFirstAndLastRowsToRender(): void {\n\t\tthis.containerHeightService.updateOffset();\n\n\t\tconst bufferPixels = this.getRowBufferInPixels();\n\n\t\tconst scrollPosition =\n\t\t\tthis.containerHeightService.getContainerPosition();\n\n\t\tconst totalHeight = this.model.getHeight();\n\n\t\tconst suppressRowVirtualisation = this.model.isSuppressVirtualisation();\n\n\t\tconst divStretchOffset =\n\t\t\tthis.containerHeightService.getDivStretchOffset();\n\n\t\tlet firstPixel: number = 0;\n\t\tlet lastPixel: number = 0;\n\t\tif (suppressRowVirtualisation) {\n\t\t\tfirstPixel = 0 + divStretchOffset;\n\t\t\tlastPixel = totalHeight + divStretchOffset;\n\t\t} else {\n\t\t\tfirstPixel =\n\t\t\t\tMath.max(scrollPosition.top - bufferPixels, 0) +\n\t\t\t\tdivStretchOffset;\n\t\t\tlastPixel =\n\t\t\t\tMath.min(scrollPosition.bottom + bufferPixels, totalHeight) +\n\t\t\t\tdivStretchOffset;\n\t\t}\n\n\t\tconst pageFirstRow = this.model.getFirstRow();\n\t\tconst pageLastRow = this.model.getLastRow();\n\n\t\tlet firstRowIndex = this.model.getIndexByPosition(firstPixel, 'first');\n\t\tlet lastRowIndex = this.model.getIndexByPosition(lastPixel, 'last');\n\n\t\tif (firstRowIndex < pageFirstRow) {\n\t\t\tfirstRowIndex = pageFirstRow;\n\t\t}\n\n\t\tif (lastRowIndex > pageLastRow) {\n\t\t\tlastRowIndex = pageLastRow;\n\t\t}\n\n\t\tconst firstDiffers = firstRowIndex !== this.firstRenderIndex;\n\t\tconst lastDiffers = lastRowIndex !== this.lastRenderIndex;\n\n\t\tif (firstDiffers || lastDiffers) {\n\t\t\tthis.firstRenderIndex = firstRowIndex;\n\t\t\tthis.lastRenderIndex = lastRowIndex;\n\n\t\t\tthis.dispatchViewPortChangeEvent();\n\t\t}\n\n\t\tthis.firstPixel = firstPixel;\n\t\tthis.lastPixel = lastPixel;\n\t}\n\n\tprivate dispatchViewPortChangeEvent(): void {\n\t\tconst viewPort: IViewPort = {\n\t\t\tfromIndex: this.firstRenderIndex,\n\t\t\ttoIndex: this.lastRenderIndex,\n\t\t};\n\n\t\tthis.model.onViewPortChange(viewPort);\n\t}\n\n\tprivate getRowBufferInPixels() {\n\t\tconst rowsToBuffer = this.model.getBufferSize();\n\t\treturn rowsToBuffer * this.model.getDefaultHeight();\n\t}\n\n\tprivate getRefresh(): void {\n\t\tif (this.refreshInProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refreshInProgress = true;\n\t}\n\n\tprivate updateContainerHeights(): void {\n        //print case dont need model height\n\t\tif (this.model.isHeightAsNull()) {\n\t\t\tthis.containerHeightService.setModelHeight(null);\n\t\t\treturn;\n\t\t}\n\n\t\tlet containerHeight = this.model.getHeight();\n\t\tif (containerHeight === 0) {\n\t\t\tcontainerHeight = 1;\n\t\t}\n\n\t\tthis.containerHeightService.setModelHeight(containerHeight);\n\t}\n\n\tprivate scrollToTop(params: IRefreshParams): void {\n\t\tconst scrollToTop = params.newData || params.newPage;\n\t\tconst suppressScrollToTop = this.model.isSuppressScrollOnNewData();\n\n\t\tif (scrollToTop && !suppressScrollToTop) {\n\t\t\tthis.model.scrollToTop();\n\t\t}\n\t}\n\n\tprivate getRowsToRecycle(): number[] {\n\t\tconst stubNodeIndexes: number[] = [];\n\t\tconst checkLoadingIndex = (_indexString: string, index: number) => {\n\t\t\tconst studIndex = this.model.isLoading(index);\n\t\t\tif (!studIndex) {\n\t\t\t\tstubNodeIndexes.push(index);\n\t\t\t}\n\t\t};\n\n\t\ttraverseObject(this.rowIndecies, checkLoadingIndex);\n\n\t\tthis.removeRows(stubNodeIndexes);\n\n\t\tconst rowIndecies: number[] = [];\n\n\t\ttraverseObject(\n\t\t\tthis.rowIndecies,\n\t\t\t(_indexString: string, index: number) => {\n\t\t\t\trowIndecies.push(index);\n\t\t\t},\n\t\t);\n\n\t\tthis.rowIndecies = [];\n\n\t\treturn rowIndecies;\n\t}\n}\n\nexport class MainVirtualList<N extends INode, T extends IController<N>>\n\timplements IVirtualList<N, T>\n{\n\tprivate controllerByIndex: IControllerMap<T> = {};\n\tprivate model!: IVirtualListModel<N, T>;\n\n\tprivate abstractVirtualList!: IAbstractVirtualList;\n\n\tsetModel(model: IVirtualListModel<N, T>): void {\n\t\tthis.model = model;\n\n\t\tthis.abstractVirtualList = new AbstractVirtualList();\n\n\t\tthis.abstractVirtualList.setModel({\n\t\t\tgetBufferSize: () => this.model.getBufferSize?.(),\n\t\t\tgetContainer: () => this.model.getContainer?.(),\n\t\t\tgetFirstRow: () => this.model.getFirstRow?.(),\n\t\t\tgetLastRow: () => this.model.getLastRow?.(),\n\t\t\tgetDefaultHeight: () => this.model.getDefaultHeight?.(),\n\t\t\tgetHeight: () => this.model.getHeight?.(),\n\t\t\tgetIndexByPosition: (pixel: number, position: 'first' | 'last') =>\n\t\t\t\tthis.model.getIndexByPosition(pixel, position),\n\t\t\tgetIndexesToDraw: (indexToDraw: number[]) =>\n\t\t\t\tthis.model.getIndexesToDraw(indexToDraw),\n\t\t\taddRows: (rowIndexes: number[]) => this.addRows(rowIndexes),\n\t\t\tremoveRows: (rowIndexes: number[]) => this.removeRows(rowIndexes),\n\t\t\tisHeightAsNull: () => this.model.isHeightAsNull(),\n\t\t\tisLoading: (index: number) => this.isLoading(index),\n\t\t\tisRowToDraw: (index: number) => this.model.isRowToDraw?.(index),\n\t\t\tisSuppressScrollOnNewData: () =>\n\t\t\t\tthis.model.isSuppressScrollOnNewData(),\n\t\t\tisSuppressVirtualisation: () =>\n\t\t\t\tthis.model.isSuppressVirtualisation(),\n\t\t\tkeepRowVirtualized: (index: number) =>\n\t\t\t\tthis.keepRowVirtualized(index),\n\t\t\tonDisplayChanged: () => this.model.onDisplayChanged(),\n\t\t\tonViewPortChange: (viewPort: IViewPort) =>\n\t\t\t\tthis.model.onViewPortChange(viewPort),\n\t\t\tscrollToTop: () => this.model.scrollToTop(),\n\t\t\tonHeightChanged: (height: number) =>\n\t\t\t\tthis.model.onHeightChanged && this.model.onHeightChanged(height),\n\t\t\tonHeightScaleChanged: () => this.model.onHeightScaleChanged && this.model.onHeightScaleChanged(),\n\t\t});\n\t}\n\n\tprivate addRows(rowIndexes: number[]): void {\n\t\trowIndexes.forEach((rowIndex) => {\n\t\t\tthis.createOrUpdateRowController(rowIndex);\n\t\t});\n\t}\n\n\tprivate removeRows(rowIndexes: number[]): void {\n\t\trowIndexes.forEach((indexToRemove) => {\n\t\t\tconst controller = this.controllerByIndex[indexToRemove];\n\t\t\tif (controller) {\n\t\t\t\tcontroller.destroy();\n\t\t\t}\n\t\t\tdelete this.controllerByIndex[indexToRemove];\n\t\t});\n\t}\n\n\tprivate isLoading(_index: number): boolean {\n\t\treturn false;\n\t}\n\n\tprivate keepRowVirtualized(index: number): boolean {\n\t\tconst controller = this.controllerByIndex[index];\n\t\treturn this.model.keepRowVirtualized(index, controller);\n\t}\n\n\tprivate createOrUpdateRowController(\n\t\trowIndex: number,\n\t): T | null | undefined {\n\t\tlet node: N | undefined;\n\t\tlet controller: T | null = this.controllerByIndex[rowIndex];\n\n\t\tif (!controller) {\n\t\t\tif (!node) {\n\t\t\t\tnode = this.model.getRow(rowIndex);\n\t\t\t}\n\n\t\t\tif (node) {\n\t\t\t\tcontroller = this.model.createController(node);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (node) {\n\t\t\tnode.updateRendered(true);\n\t\t}\n\n\t\tthis.controllerByIndex[rowIndex] = controller as T;\n\n\t\treturn controller;\n\t}\n\n\trefresh(): void {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.abstractVirtualList.refresh();\n\t}\n\n\trefreshAfterModelUpdate(params: IRefreshParams): void {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.abstractVirtualList.refreshAfterModelUpdate(params);\n\t}\n\n\tgetController(): IControllerMap<T> {\n\t\treturn this.controllerByIndex;\n\t}\n\n\tgetFirstScrollPixel(): number|void {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this.abstractVirtualList.getFirstScrollPixel();\n\t}\n\n\tgetLastScrollPixel(): number|void {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this.abstractVirtualList.getFirstScrollPixel();\n\t}\n\n\tpublic getPixelPosition(pixel: number): number {\n\t\treturn this.abstractVirtualList.getPixelPosition(pixel);\n\t}\n}\n","import { ElementVirtualList } from \"../../../../VirtualList/ElementVirtualList\";\n\nexport interface IElementVirtualListModel {\n    //CRUD methods\n\tgetElement(index : Number) : HTMLElement;\n    appendTo(): HTMLElement;\n\n\t//check methods\n    getIndexesToDraw(indexToDraw: number[])                         : number[];\n    keepRowVirtualized(index: number)                               : boolean;\n    isRowToDraw(index: number)                                      : boolean;\n    getBufferSize()                                                 : number;\n    getDefaultHeight()                                              : number;\n    scrollToTop()                                                   : void;\n    getHeight()                                                     : number;\n    isHeightAsNull()                                                : boolean;\n    isSuppressScrollOnNewData()                                     : boolean;\n    isSuppressVirtualisation()                                      : boolean;\n    getFirstRow()                                                   : number;\n    getLastRow()                                                    : number;\n    getIndexByPosition(pixel : number, position ?: 'first' | 'last'): number;\n    isLoading(index : number)                                       : boolean;\n    getContainer()                                                  : HTMLElement;\n\n\t//events\n\tonViewPortChange(viewPort: IViewPort): void;\n\tonDisplayChanged()                   : void;\n\tonHeightChanged?(height: number)     : void;\n\tonHeightScaleChanged?()              : void;\n}\n\ninterface IViewPort {\n    fromIndex : number;\n    toIndex : number;\n}\n\nexport class List implements IElementVirtualListModel{\n    axis : DropdownAxis;\n    appendContainer : HTMLElement;\n    selectDropdown !: HTMLElement;\n    constructor(axis : DropdownAxis, appendContainer : HTMLElement, parentContainer : HTMLElement) {\n        this.axis = axis;\n        this.appendContainer = appendContainer;\n        this.selectDropdown = parentContainer;\n        parentContainer.addEventListener('scroll', () => {\n            dummy.refresh();\n        })\n    }\n    getElement(index: number): HTMLElement {\n        const top = this.axis.getTop(index);\n        const height = this.axis.getDefaultHeight();\n        const data = this.axis.getData(index);\n        data.style.position = \"absolute\";\n        data.style.top = `${top}px`;\n        data.style.left = `0px`;    \n        data.style.height = `${height}px`;\n        return data;\n    }\n    appendTo(): HTMLElement {\n        return this.appendContainer;\n    }\n    getIndexesToDraw(indexToDraw: number[]): number[] {\n        return indexToDraw;\n    }\n    keepRowVirtualized(_index: number): boolean {\n        return false;\n    }\n    isRowToDraw(_index: number): boolean {\n        return true;\n    }\n    getBufferSize(): number {\n        return 2;\n    }\n    getDefaultHeight(): number {\n        return this.axis.getDefaultHeight();\n    }\n    // Need to change as refresh\n    scrollToTop(): void {\n        // onScroll\n\n        // New Data changes\n        // \n    }\n    // getTotalContainerHeight\n    getHeight(): number {\n        return this.axis.getTotalHeight();\n    }\n    isHeightAsNull(): boolean {\n        return false;\n    }\n    isSuppressScrollOnNewData(): boolean {\n        return false;\n    }\n    isSuppressVirtualisation(): boolean {\n        return false;\n    }\n    getFirstRow(): number {\n        return 0;\n    }\n    getLastRow(): number {\n        return this.axis.getLastRow();\n    }\n    getIndexByPosition(pixel: number, position?: \"first\" | \"last\"): number {\n        return this.axis.getIndexByPosition(pixel, position);\n    }\n    // check if needed\n    isLoading(_index: number): boolean {\n        return false;\n        throw new Error(\"Method not implemented.\");\n    }\n    getContainer(): HTMLElement {\n        return this.selectDropdown;\n    }\n    onViewPortChange(_viewPort: IViewPort): void {\n        // console.log(\"onViewPortChange\", viewPort)\n    }\n    onDisplayChanged(): void {\n        // throw new Error(\"Method not implemented.\");\n    }\n    onHeightChanged(height: number): void {\n        this.appendContainer.style.height = `${height}px`;\n    }\n    onHeightScaleChanged(): void {\n        // throw new Error(\"Method not implemented.\");\n    }\n}\n\nclass DropdownAxis{\n    data : Array<HTMLElement>\n    height : number\n    constructor(data : Array<HTMLElement>, {height} :{height:number}){\n        this.data = data;\n        this.height = height;        \n    }\n    getTotalHeight(){\n        return this.data.length * this.height\n    }\n    getData(index : number) : HTMLElement{\n        return this.data[index];\n    }\n    getLastRow(){\n        return this.data.length-1;\n    }\n    getDefaultHeight() : number{\n        return this.height;\n    }\n    getIndexByPosition(pixel: number, _position?: \"first\" | \"last\"): number {\n        return Math.floor(pixel / this.height);\n    }\n    getTop(index : number) : number{\n        return (index) * this.height;\n    }\n}\n\n\nconst dummy = new ElementVirtualList();\nexport function createVirtualList(data:HTMLElement[],selectDropdown:HTMLElement){\n    const axis = new DropdownAxis(data, {height:50});\n\n    // const dummyelement = document.createElement('ul');\n    // selectDropdown.appendChild(dummyelement);\n    // dummyelement.style.position = \"absolute\";\n    // dummyelement.style.width = \"100%\";\n    // dummyelement.className = \"dg-dropdown__options-listbox\";\n\n    // selectDropdown.style.position = \"relative\";\n    selectDropdown.style.width = \"100%\";\n    selectDropdown.classList.add(\"dg-dropdown__virtual-scroll\");\n\n    const list = new List(axis,selectDropdown, selectDropdown);\n    dummy.setModel(list);\n    dummy.refreshAfterModelUpdate({});\n    return dummy;\n}   ","import { AbstractVirtualList, IAbstractVirtualList } from \"./AbstractVirtualList\";\nimport { IElementVirtualList, IRowComponent } from \"./Interface/IElementVirtualList\";\nimport { IElementVirtualListModel } from \"./Interface/IElementVirtualListModel\";\nimport { IRefreshParams, IViewPort } from \"./Interface/IVirtualListModel\";\n\nexport class ElementVirtualList implements IElementVirtualList {\n\tprivate controllerByIndex: IRowComponent = {};\n\tprivate model!: IElementVirtualListModel;\n\n\tprivate abstractVirtualList!: IAbstractVirtualList;\n\n\tsetModel(model: IElementVirtualListModel): void {\n\t\tthis.model = model;\n\n\t\tthis.abstractVirtualList = new AbstractVirtualList();\n\n\t\tthis.abstractVirtualList.setModel({\n\t\t\tgetBufferSize: () => this.model.getBufferSize?.(),\n\t\t\tgetContainer: () => this.model.getContainer?.(),\n\t\t\tgetFirstRow: () => this.model.getFirstRow?.(),\n\t\t\tgetLastRow: () => this.model.getLastRow?.(),\n\t\t\tgetDefaultHeight: () => this.model.getDefaultHeight?.(),\n\t\t\tgetHeight: () => this.model.getHeight?.(),\n\t\t\tgetIndexByPosition: (pixel: number, position: 'first' | 'last') =>\n\t\t\t\tthis.model.getIndexByPosition(pixel, position),\n\t\t\tgetIndexesToDraw: (indexToDraw: number[]) =>\n\t\t\t\tthis.model.getIndexesToDraw(indexToDraw),\n\t\t\taddRows: (rowIndexes: number[]) => this.addRows(rowIndexes),\n\t\t\tremoveRows: (rowIndexes: number[]) => this.removeRows(rowIndexes),\n\t\t\tisHeightAsNull: () => this.model.isHeightAsNull(),\n\t\t\tisLoading: (index: number) => this.isLoading(index),\n\t\t\tisRowToDraw: (index: number) => this.model.isRowToDraw?.(index),\n\t\t\tisSuppressScrollOnNewData: () =>\n\t\t\t\tthis.model.isSuppressScrollOnNewData(),\n\t\t\tisSuppressVirtualisation: () =>\n\t\t\t\tthis.model.isSuppressVirtualisation(),\n\t\t\tkeepRowVirtualized: (index: number) =>\n\t\t\t\tthis.keepRowVirtualized(index),\n\t\t\tonDisplayChanged: () => this.model.onDisplayChanged(),\n\t\t\tonViewPortChange: (viewPort: IViewPort) =>\n\t\t\t\tthis.model.onViewPortChange(viewPort),\n\t\t\tscrollToTop: () => this.model.scrollToTop(),\n\n\t\t});\n\t}\n\n\tprivate addRows(rowIndexes: number[]): void {\n\t\trowIndexes.forEach((rowIndex) => {\n\t\t\tconst element = this.model.getElement(rowIndex);\n\t\t\tthis.insertAtIndex(rowIndex, element);\n\t\t});\n\t}\n\n\tprivate appendElement(element: HTMLElement): void {\n\t\tconst container = this.model.appendTo();\n\t\tcontainer && container.appendChild(element);\n\t}\n\n\tprivate removeElement(element: HTMLElement): void {\n\t\tconst container = this.model.appendTo();\n\t\tcontainer && container.removeChild(element);\n\t}\n\n\tprivate insertAtIndex(index: number, element: HTMLElement): void {\n\t\tthis.controllerByIndex[index] = {\n\t\t\tcontainer: element,\n\t\t\tindex,\n\t\t};\n\n\t\tthis.appendElement(element);\n\t}\n\n\tprivate removeIndex(index: number): void {\n\t\tconst component = this.controllerByIndex[index];\n\n\t\tdelete this.controllerByIndex[index];\n\n\t\tthis.removeElement(component.container);\n\t}\n\n\tprivate removeRows(rowIndexes: number[]): void {\n\t\trowIndexes.forEach((indexToRemove) => {\n\t\t\tthis.removeIndex(indexToRemove);\n\t\t});\n\t}\n\n\tprivate isLoading(_index: number): boolean {\n\t\treturn false;\n\t}\n\n\tprivate keepRowVirtualized(index: number): boolean {\n\t\treturn this.model.keepRowVirtualized(index);\n\t}\n\n\trefresh(): void {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.abstractVirtualList.refresh();\n\t}\n\n\trefreshAfterModelUpdate(params: IRefreshParams): void {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.abstractVirtualList.refreshAfterModelUpdate(params);\n\t}\n\n\tgetComponent(): IRowComponent {\n\t\treturn this.controllerByIndex;\n\t}\n\n\tgetFirstScrollPixel(): number {\n\t\tif (!this.abstractVirtualList) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn this.abstractVirtualList.getFirstScrollPixel();\n\t}\n\n\tgetLastScrollPixel(): number {\n\t\tif (!this.abstractVirtualList) {\n\n\t\t}\n\n\t\treturn this.abstractVirtualList.getFirstScrollPixel();\n\t}\n\n\tpublic getPixelPosition(pixel: number): number {\n\t\treturn this.abstractVirtualList.getPixelPosition(pixel);\n\t}\n}\n","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct } from \"@dg/corecomponent\";\nimport { DropdownCompType } from \"./dropdown.types\";\nimport {DropdownController} from \"./dropdown-controller\"\nimport { createVirtualList } from \"./dropdown-list\";\nimport { DropdownOptionElementModel } from \"../../../dropdown_configuration\";\n\n\n\n\n\n\nconst dropdown = (props: any,newOption ?: string) =>{\n    const selectDropdown = document.createElement(\"ul\");\n    selectDropdown.tabIndex = 0;\n\n    if(!props.isLoaded) {\n        const element = document.createElement('dropdown-loading');\n        selectDropdown.appendChild(element);\n    }else {\n\n        if(props.isNoneOptionEnabled && !(newOption)){\n            selectDropdown.appendChild(createNoneOptionComp());\n        }\n\n        (props.options.length <=0 && !newOption && props.isMultiple) &&  selectDropdown.appendChild(createNoResultFoundComp());\n\n        for(let i = 0; i < props.options.length; i++) {\n            const option = document.createElement('select-option'); \n            selectDropdown.appendChild(option);\n        }\n\n        const typedValue = newOption;\n        if (typedValue) {\n\n            const matchWithoutCase = props.options.some(\n                (option: DropdownOptionElementModel) =>\n                    option.value?.toLowerCase().trim() === typedValue.toLowerCase().trim()\n            );\n\n            // Always allow create-new if typed doesn't exactly match any option (case-sensitive or case-insensitive)\n            if (props.isCreateNewOptionEnabled && !matchWithoutCase) {\n                const dropdownCreateNewOption = document.createElement('dropdown-create-newoption');\n                selectDropdown.appendChild(dropdownCreateNewOption);\n            }else if(newOption && (!props.options.some((option: DropdownOptionElementModel) => option.value!.toLowerCase().includes(newOption.toLowerCase()) ))){\n                selectDropdown.appendChild(createNoResultFoundComp());\n            }\n        }\n\n        \n    }\n    return selectDropdown as HTMLElement;\n}\n\n\n// const createNewOptionComp = (newOption : string): HTMLElement =>{\n//     const createNewOption =  document.createElement(\"li\");\n//     createNewOption.setAttribute(\"ref\", \"createNewOption\");\n//     createNewOption.classList.add(\"dg-dropdown__option\");\n//     createNewOption.classList.add(\"dg-dropdown__option-create\");\n//     createNewOption.innerHTML = \n//     `<button class=\"dg-dropdown__option-label\">\n//             <span class=\"dg-dropdown__option-create-icon\">+</span>\n//             Create a option named \n//             <span class=\"dg-dropdown__option-create-text\">${newOption}</span>\n//     </button>\n//     `;\n//     return createNewOption as HTMLElement;\n// }\n\n// const addCollaboratorComp = (_newOption : string): HTMLElement =>{\n//     const createNewOption =  document.createElement(\"li\");\n//     createNewOption.setAttribute(\"ref\", \"createNewOption\");\n//     createNewOption.classList.add(\"dg-dropdown__option\");\n//     createNewOption.classList.add(\"dg-dropdown__option-create\");\n//     createNewOption.classList.add(\"dg-dropdown__option-create--collaborator\");\n//     createNewOption.innerHTML = \n//     `<button class=\"dg-dropdown__option-label\">\n//             <span class=\"dg-dropdown__option-label-text\">+ Add Collaborator</span>\n//     </button>\n//     `;\n//     return createNewOption as HTMLElement;\n// }\n\nconst createNoneOptionComp = (): HTMLElement => {\n    const li = document.createElement(\"li\");\n    li.setAttribute(\"ref\", \"noneOption\");\n    li.classList.add(\"dg-dropdown__option\", \"dg-dropdown__option-none\");\n\n    const label = document.createElement(\"label\");\n    label.classList.add(\"dg-dropdown__option-label\");\n\n    const labelText = document.createElement(\"div\");\n    labelText.classList.add(\"dg-dropdown__option-label-text\");\n    labelText.textContent = \"None\";\n\n    label.appendChild(labelText);\n    li.appendChild(label);\n\n    return li;\n};\n\n\nconst createNoResultFoundComp = ()=>{\n    // const noResultFoundComp =  document.createElement(\"li\");\n    // noResultFoundComp.setAttribute(\"ref\", \"noResultFound\");\n    // noResultFoundComp.classList.add(\"dg-dropdown__option\");\n    // noResultFoundComp.classList.add(\"dg-dropdown__option-no-result-found\");\n    // noResultFoundComp.innerHTML = \n    // `<label class=\"dg-dropdown__option-label\">\n    //   <div class=\"dg-dropdown__option-label-text\">No Option</div>\n    // </label>\n    // `;\n\n    const noOptionComp = document.createElement('dropdown-no-option');\n    return noOptionComp as HTMLElement;\n}\n\nexport class DropdownComponent extends Component {\n\n    @PostConstruct()\n    init(){\n        const comp:DropdownCompType = this.getComponent();\n        const controller = this.createManagedBean(new DropdownController());\n        const props = controller.getProperty();\n        const dropdownComp = dropdown(props);  \n        this.setTemplate(dropdownComp);\n        controller.setComp(comp);\n    }\n\n    updateVirtualList(){\n        const dropdownElement = this.getGui();\n        const optionElements :HTMLElement[] = [];\n        while (dropdownElement.firstChild) {\n            optionElements.push(dropdownElement.firstChild as HTMLElement) ;\n            dropdownElement.removeChild(dropdownElement.firstChild);\n        }\n        createVirtualList(optionElements,dropdownElement);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    getComponent():DropdownCompType{\n        return {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n            renderFilteredOptions : (parentComp:any,controller:DropdownController,newOption:string) => this.renderFilteredOptions(parentComp,controller,newOption),\n            getParentComp : ()=>this.getParentComponent(),\n            rerenderer :(parentComp:any,controller:DropdownController)=> this.rerenderer(parentComp,controller),\n            updateVirtualList : ()=> this.updateVirtualList(),\n            getNoneOptionComp : () => this.getNoneOptionComp(),\n        };\n    }\n\n    renderFilteredOptions(parentComp:any,controller:DropdownController,newOption:string){\n        const props =  controller.getProperty();\n        this.destroy();\n        this.setTemplate(dropdown(props,newOption));\n        parentComp.appendChild(this.getGui());\n        controller.refresh();\n        props.isVirtualList && this.updateVirtualList();\n    }\n\n    rerenderer(parentComp:any,controller:DropdownController):void{\n        const props =  controller.getProperty();\n        this.destroy();\n        this.setTemplate(dropdown(props));\n        parentComp.appendChild(this.getGui());\n        controller.refresh()\n        props.isVirtualList && this.updateVirtualList();\n    }\n\n    protected destroy(): void {\n\t\tthis.getGui().remove();    \n\t}\n\n    // getNewOptionButton():HTMLElement{\n    //     let newOptionButton = this.getGui().querySelector('[ref=\"createNewOption\"]');\n    //     return newOptionButton as HTMLElement;\n    // }\n\n    getNoneOptionComp(): HTMLElement{\n        let noneOption = this.getGui().querySelector('[ref=\"noneOption\"]');\n        return noneOption as HTMLElement;\n    }\n}","import {SelectAllCompType} from \"./dropdown-selectAll.types\"\nimport { AutoWired, BEAN_NAME, setAriaDisabled, setAriaSelected } from '@dg/corecomponent';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { composeClasses } from '@dg/utils';\nimport { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\nimport { SelectDropdownOptionController } from '../dropdown-option/dropdown-option-controller';\nimport { AbstractController } from '../../../../utility/abstract-controller';\nimport { IDropdownOptionHandler } from \"../model/dropdown-option-handler.types\";\n\nconst useUtilityClasses =  (_ownerState : any) =>{\n    // const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'option-select-all',\n            modifiers:[\n                // disabled && 'disabled',\n                // readonly &&'readonly',\n            ],\n        },\n    };\n    return composeClasses(slots,getDropdownRootUtilityClass);\n}\n\nexport class SelectAllController extends AbstractController<SelectAllCompType>{\n    comp!: SelectAllCompType;\n    dropdown:any;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n\n\n    setComp(comp:SelectAllCompType){\n        this.comp = comp;\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.registerEvents();\n        this.dropdownCtrlHandler.registerSelectAllController(this);\n        this.setDisableState();\n        this.updateSelectALLClassname();\n        this.setNoOptionState();\n\n        this.addListener(this.eventHandler, 'EVENT_OPTION_LOADED',() => {\n            this.setDisableState();\n            this.setNoOptionState();\n            this.updateSelectALLClassname();\n        });\n\n        this.addListener(this.eventHandler, 'EVENT_DATA_UPDATED', () => {\n            this.setNoOptionState();\n        })\n\n\n    }\n\n    setDisableState() : void {\n        const element = this.comp.getElement();\n        const isLoaded = this.dropdownDatapart.getIsLoaded();\n        setAriaDisabled(element, !isLoaded);\n        element.classList.toggle('dg-dropdown__select-all--disables', !isLoaded);\n        const checkboxElement = this.comp.getSelectAllCheckbox();\n        if(checkboxElement) {\n            setAriaDisabled(checkboxElement, !isLoaded);\n        }\n    }\n\n    setNoOptionState(): void {\n        const element = this.comp.getElement();\n        element.classList.toggle('dg-dropdown__select-all--no-options', !(this.dropdownDatapart.getAllOptions().length > 0));\n    }\n\n\n    private setAriaAttributes() {\n        const element = this.comp.getElement();\n        // setAriaLabel(element,\"select all\")\n        setAriaSelected(element, false);\n        setAriaDisabled(element, false);\n    }\n\n    private applyClasses() : void {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n    }\n\n    private getOwnerState() {\n        return {\n            // disabled: this.optionHandler.isDisabled(),\n            // readonly: this.optionHandler.isReadOnly(),\n        }\n\t}\n\n    // private refresh() : void {\n    //     this.applyClasses();\n\n    // }\n\n     getProperty(){\n        return {\n            options : this.optionHandler.getOptions(),\n        }\n    }\n\n    private registerEvents() : void {\n        this.addListener(this.eventHandler, 'EVENT_OPTION_SELECTION_UPDATED', this.updateSelectALLClassname.bind(this));\n        this.addListener(this.comp.getElement(),'click', (event) => {\n            event.preventDefault();\n            const isSelectAll = this.dropdownDatapart.isSelectAll();\n            const options = this.dropdownDatapart.getAllOptions() ;\n            const beforeSelectALL = this.optionHandler.onBeforeSelectAll({ isSelectAll: !isSelectAll, event: event, options : options })\n            if(beforeSelectALL) {\n                if (this.dropdownDatapart.getIsLoaded()) {\n                    if (!isSelectAll) {\n                        this.selectAll(event);\n                        this.comp.getSelectAllCheckbox().checked = true;\n                    } else {\n                        this.deSelectAll(event);\n                        this.dispatchEvent({ type: \"clearOptions\" });\n                        this.comp.getSelectAllCheckbox().checked = false;\n                    }\n\n                    this.optionHandler.onSelectAll({\n                        isSelectAll: !isSelectAll,\n                        event      : event,\n                        options    : options\n                    });\n\n                    this.updateSelectALLClassname();\n\n                     this.optionHandler.onAfterSelectAll({\n                        isSelectAll: !isSelectAll,\n                        event      : event,\n                        options    : options\n                    });\n                }\n            }\n           \n            \n        });\n\n        this.addListener(this.eventHandler, 'unCheckSelectAll',()=>{\n            this.comp.getSelectAllCheckbox().checked = false;\n        })\n\n        this.addListener(this.eventHandler, 'EVENT_OPTION_REMOVED',() => {\n            this.updateSelectALLClassname();\n            this.updateSelectALL()\n        })\n\n         this.addListener(this.eventHandler, 'EVENT_OPTION_ADDED',() => {\n            this.updateSelectALLClassname();\n            this.updateSelectALL()\n        })\n    }\n\n    private updateSelectALLClassname() : void {\n        const element = this.comp?.getElement();\n        if(element) {\n            const isSelectAll = this.dropdownDatapart.isSelectAll();\n            const hasSelection = this.dropdownDatapart.getSelectedOptions().length !== 0;\n\n            element.classList.toggle('dg-dropdown__option--selected', isSelectAll);\n            element.classList.toggle('dg-checkbox--indeterminate', !isSelectAll && hasSelection);\n        }\n    }\n\n    private updateSelectALL() : void {\n        this.comp.getSelectAllCheckbox().checked = this.dropdownDatapart.isSelectAll();\n    }\n\n    clearSelectAllCheckbox(){\n        this.comp.getSelectAllCheckbox().checked = false;\n    }\n\n    selectAll(event:Event){\n        const getAllOptionsIntance:SelectDropdownOptionController[] =  this.dropdownDatapart.getAllOptionsIntance();\n        const selectedOptions = this.dropdownDatapart.getSelectedOptions();\n        for(let index=0;index<getAllOptionsIntance.length;index++){\n            if(!selectedOptions.includes(getAllOptionsIntance[index].getValue())){\n                !getAllOptionsIntance[index].option.disabled && getAllOptionsIntance[index].clickOption(event, true, true, true);\n            }\n   \n        }\n    }\n\n    deSelectAll(event:Event){\n        const allOptions = this.dropdownDatapart.getAllOptionsIntance();\n        const selectedValues = this.dropdownDatapart.getSelectedOptions();\n\n        for (let i = 0; i < allOptions.length; i++) {\n            const option = allOptions[i];\n            const value = option.getValue();\n\n            if (selectedValues.includes(value) && !option.option.disabled) {\n                option.clickOption(event, false, true, true);\n            }\n        }\n    }\n\n    focus(){\n        this.comp.getElement().focus();      \n    }\n    \n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { SelectAllController} from \"./dropdown-selectAll-controller\"\nimport { SelectAllCompType } from \"./dropdown-selectAll.types\";\n\nconst selectAll = (_props: any): HTMLElement => {\n    const div = document.createElement(\"div\");\n    div.tabIndex = 0;\n    div.classList.add(\"dg-dropdown__option\", \"dg-dropdown__option-select-all\");\n    div.role = \"option\";\n    div.setAttribute(\"aria-selected\", \"false\");\n    div.setAttribute(\"aria-disabled\", \"false\");\n\n    const label = document.createElement(\"label\");\n    label.classList.add(\"dg-dropdown__option-label\");\n\n    const checkbox = document.createElement(\"input\");\n    checkbox.type = \"checkbox\";\n    checkbox.classList.add(\"dg-dropdown__option-checkbox-input\");\n    checkbox.role = \"checkbox\";\n    checkbox.tabIndex = -1;\n    checkbox.setAttribute(\"aria-disabled\", \"false\");\n    checkbox.setAttribute(\"aria-checked\", \"false\");\n    checkbox.setAttribute(\"aria-label\", \"checkbox\");\n    checkbox.setAttribute('ref', 'selectAll-checkbox');\n\n    const customCheckbox = document.createElement(\"span\");\n    customCheckbox.classList.add('dg-checkbox__input--custom');\n    customCheckbox.classList.add(\"dg-dropdown__option-checkbox-input--custom\");\n\n    const text = document.createElement(\"div\");\n    text.classList.add(\"dg-dropdown__option-label-text\");\n    text.textContent = \"Select All\";\n\n    // Appending elements\n    label.appendChild(checkbox);\n    label.appendChild(customCheckbox);\n    label.appendChild(text);\n    div.appendChild(label);\n\n    return div;\n};\n\n\nexport class SelectAllComponent extends Component {\n \n    @queryAssignedNodes('selectAll-checkbox') selectAllCheckbox !: any;\n\n    @PostConstruct()\n    init(){\n\n        const controller = this.createManagedBean(new SelectAllController());\n        const props = controller.getProperty();\n        const selectAllComp = selectAll(props);\n        const comp:SelectAllCompType = {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n            getSelectAllCheckbox : ()=>this.getSelectAllCheckbox(),\n        }\n        this.setTemplate(selectAllComp);\n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n\n    getSelectAllCheckbox():any{\n        return this.selectAllCheckbox;\n    }\n\n\n    \n\n\n}","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { dropdownCreateNewOptiontype } from \"./dropdown-create-newoption.types\";\nimport { IDropdownOptionHandler } from \"../model/dropdown-option-handler.types\";\nimport { dropdownController } from \"../model/dropdown-handler\";\nimport { DropdownUserComponentHandler } from \"../model/dropdown-user-component-handler\";\n\n// const useUtilityClasses = () => {\n// \tconst slots = {\n// \t\troot: {\n// \t\t\tslot: 'dropdown-icon',\n// \t\t\tmodifiers: [\n\t\t\t\t\n// \t\t\t],\n// \t\t},\n// \t};\n\n// \treturn composeClasses(slots, getSelectRootUtilityClass);\n// };\n\nexport class DropdownCreateNewOptionController extends EventEmitter {\n    private component !: dropdownCreateNewOptiontype\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownHandler !: dropdownController;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n\n    \n    setComponent(component : dropdownCreateNewOptiontype){\n        this.component = component;\n        this.applyClassNames();\n        this.setRendererDetails();\n        this.dropdownHandler.registerDropdownCreateNewOptionController(this);\n        this.registerEvents();\n    }\n\n    private registerEvents(){\n        const createNewOptionDom =  this.component.getElement();\n        if(this.optionHandler.isCreateNewOptionEnabled()){\n             createNewOptionDom.addEventListener(\"click\",(event:any)=>{\n                                                                        this.dropdownHandler.getDropdown().addNewOption();\n                                                                        event.stopPropagation();\n                                                                    });\n\n            createNewOptionDom.addEventListener(\"mouseover\",(_event)=>{\n                this.dropdownHandler.getDropdownComponent().setHoveredOption('new', -1)\n             });\n        }\n    }\n\n    private applyClassNames(){\n\t\tthis.component.getElement().classList.add(\"dg-dropdown__option\");\n        this.component.getElement().classList.add(\"dg-dropdown__option-create\");\n    }\n\n    setRendererDetails() : void {\n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails     = this.userComponentHandler.getCreateNewOptionRendererDetails(rendererWrapper, params) as IComponentDetails;\n        this.component.setRendererDetails(userDetails,params);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getCreateNewOptionRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getCreateNewOptionRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getCreateNewOptionRenderer(),\n            enableCreateNewOption  : this.optionHandler.isCreateNewOptionEnabled(),\n            newOption              : this.dropdownHandler.getSearch().getValue(),\n\t\t};\n    }\n\n    getElement(): HTMLElement{\n        return this.component.getElement();\n    }\n}","\n\n\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { dropdownCreateNewOptiontype } from \"./dropdown-create-newoption.types\";\nimport { DropdownCreateNewOptionController } from \"./dropdown-create-newoption-controller\";\n\n\nconst createNewOptionTemplate = ()=>{\n    const createNewOption =  document.createElement(\"li\");\n\tcreateNewOption.setAttribute('tabIndex', '0');\n    return createNewOption;\n}\n\nexport class DropdownCreateNewOptionComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    @PostConstruct()\n    init() {\n        const comp : dropdownCreateNewOptiontype = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails,params :any)=>this.setRendererDetails(rendererDetails,params),\n\t\t\tdestroy                     : () => this.destroy()\n        }\n\n        const controller = this.createBean(new DropdownCreateNewOptionController());\n        this.setTemplate(createNewOptionTemplate())\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails,params:any): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tparams.enableCreateNewOption && this.insertValueWithoutCellRenderer(params.newOption);\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer(newOption: string) {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.classList.add(\"dg-dropdown__option-label\");\n\n\t\tconst loaderWrapper = document.createElement(\"span\");\n\t\tloaderWrapper.classList.add(\"ZTCL-delay\");\n\n\t\tconst loader = document.createElement(\"span\");\n\t\tloader.classList.add(\"ZT-circleLoader\", \"ZT-cmNone\", \"ZTCL-small\");\n\t\tloaderWrapper.appendChild(loader);\n\n\t\tconst createIcon = document.createElement(\"span\");\n\t\tcreateIcon.classList.add(\"dg-dropdown__option-create-icon\");\n\t\tcreateIcon.textContent = \"+\";\n\n\t\tconst text = document.createElement(\"span\");\n\t\ttext.textContent = \"Create a option named \";\n\n\t\tconst optionText = document.createElement(\"span\");\n\t\toptionText.classList.add(\"dg-dropdown__option-create-text\");\n\t\toptionText.textContent = newOption;\n\n\t\tbutton.append(loaderWrapper, createIcon, text, optionText);\n\t\tparentElement.appendChild(button);\n\t}\n\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\t\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\t}\n\n}\n","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\n\n// import { ISelectOptionHandler } from '../../../../select/src/core/model/select-option-handler.types';\nimport { AutoWired, BEAN_NAME } from '@dg/corecomponent';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\nimport { composeClasses } from '@dg/utils';\nimport { IDropdownOptionHandler } from '../model/dropdown-option-handler.types';\nimport { DropdownBodyContainerCompType } from './dropdownBodyContainer.types';\nimport { DropdownUserComponentHandler } from '../model/dropdown-user-component-handler';\n// import { IComponentDetails } from '../../../../utility/component-detail.types';\n\nconst useUtilityClasses = (_ownerState : any) =>{\n    // const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'body-container',\n            modifiers:[\n                // disabled && 'disabled',\n                // readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getDropdownRootUtilityClass);\n}\n\nexport class DropdownBodyContainerController extends EventEmitter{\n    comp!: DropdownBodyContainerCompType;\n    searchComp!: HTMLElement; \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n\n\n\n    setComp(comp:DropdownBodyContainerCompType){\n        this.comp = comp;\n        // this.registerDropdownContainer();\n        this.applyClasses();\n        this.setAriaAttributes();\n        // this.setRendererDetails();\n    }\n\n    setSearchComp(searchComp : HTMLElement){\n        this.searchComp = searchComp;\n    }\n\n    // registerBodyDropdownContainer(){\n    //     this.dropdownCtrlHandler.registerDropdownContainer(this);\n    // }\n\n\n    private setAriaAttributes() {\n    }\n\n    private applyClasses() : void { \n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        // let className = this.optionHandler.getClassName();\n        // if (className) {\n        //     if (typeof className === 'string') {\n        //         this.comp.getElement().classList.add(className);\n        //     } else if (Array.isArray(className)) {\n        //         (className as string[]).forEach(c => this.comp.getElement().classList.add(c));\n        //     }\n        // }\n    }\n\n    // private refresh() : void {\n    //     this.applyClasses();\n    // }\n\n    private getOwnerState() {\n        return {\n            // disabled: this.optionHandler.isDisabled(),\n            // readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n\n     getProperty(){\n        return {\n            options : this.optionHandler.getOptions(),\n            isSearchable : ()=>this.optionHandler.isSearchable(),\n            isSelectAll : ()=>this.optionHandler.isSelectAllButtonEnabled(),\n            isMultiple : ()=>this.optionHandler.isMultiple(),\n        }\n    }\n\n\n    // setRendererDetails() : void {\n        \n    //     const rendererWrapper = this.createIconRendererWrapper();\n    //     const params          = this.createRendererParams();\n    //     const  userDetails    = this.userComponentHandler.getDropdownRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n    //     this.comp.setRendererDetails(userDetails);\n    // }\n    // private createIconRendererWrapper() {\n    //     return {\n\t// \t\tgetRenderer          : () => this.optionHandler.getDropdownRenderer(),\n\t// \t\tgetUserRendererParams: () => this.optionHandler.getDropdownRendererParams(),\n\t// \t};\n    // }\n    // private createRendererParams() {\n    //     return {\n\t// \t\tvalue: this.optionHandler.getDropdownRendererParams(),\n\t// \t};\n    // }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct  } from \"@dg/corecomponent\";\nimport { DropdownBodyContainerCompType } from \"./dropdownBodyContainer.types\";\nimport { DropdownBodyContainerController } from \"./dropdownBodyContainer-controller\"\n// import { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\n\nconst dropdownContainer = (_props?: any) =>{\n    const DropdownBodyContainer = document.createElement(\"div\");\n    DropdownBodyContainer.tabIndex = 0;\n\n    const dropdownComp = document.createElement(\"dropdown\");\n    DropdownBodyContainer.appendChild(dropdownComp);\n\n    return DropdownBodyContainer;\n}\n\n\n\n\nexport class DropdownBodyContainerComponent extends Component {\n\n    // private renderer       : any;\n\t// private rendererElement: any;\n\n    @PostConstruct()\n    init(){\n        const comp:DropdownBodyContainerCompType = {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n            // setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n            destroy : () => this.destroy()\n        }\n        const controller = this.createManagedBean(new DropdownBodyContainerController());\n        const props = controller.getProperty();\n\n        const DropdownContainer =  dropdownContainer(props);\n        this.setTemplate(DropdownContainer);\n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    // private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t// \tif (rendererDetails) {\n\t// \t\tthis.destroyRenderer();\n\t// \t\tconst callback = this.afterRenderer.bind(this);\n\t// \t\tconst componentInstance = rendererDetails.newInstance();\n\t// \t\tif (componentInstance) {\n\t// \t\t\tcomponentInstance.then(callback);\n\t// \t\t}\n\t// \t}else {\n\t// \t\tthis.destroyRenderer();\n\t// \t\tthis.insertValueWithoutCellRenderer()\n\t// \t}\n\t// }\n\n\t//  private destroyRenderer(): void {\n\t// \tthis.renderer = this.context.destroyBean(this.renderer);\n\t// \tremoveFromParent(this.rendererElement);\n\t// \tthis.rendererElement = null;\n\t// }\n\n\t// private insertValueWithoutCellRenderer() {\n\t// \tconst parentElement = this.getGui();\n    //     clearElement(parentElement);\n\t// \tthis.setTemplate(dropdownContainer());\n\t// }\n\n\t// private afterRenderer(renderer: any) {\n\t// \tthis.renderer = renderer;\n\t// \tthis.rendererElement = renderer.getElement?.() ?? null;\n\t// \tif (this.rendererElement) {\n\t// \t\tconst parentElement = this.getGui() as HTMLElement;\n\t// \t\tclearElement(parentElement);\n\t// \t\tparentElement.appendChild(this.rendererElement);\n\t// \t}\n\t// }\n    \n    destroy(): void {\n        this.getGui().remove();\n    } \n\n}","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\n\n// import { ISelectOptionHandler } from '../../../../select/src/core/model/select-option-handler.types';\nimport { AutoWired, BEAN_NAME } from '@dg/corecomponent';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\nimport { composeClasses } from '@dg/utils';\nimport { IDropdownOptionHandler } from '../model/dropdown-option-handler.types';\nimport { DropdownHeaderContainerCompType } from './dropdownHeaderContainer.types';\nimport { DropdownUserComponentHandler } from '../model/dropdown-user-component-handler';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\n\nconst useUtilityClasses = (_ownerState : any) =>{\n    // const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'header-container',\n            modifiers:[\n                // disabled && 'disabled',\n                // readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getDropdownRootUtilityClass);\n}\n\nexport class DropdownHeaderContainerController extends EventEmitter{\n    comp!: DropdownHeaderContainerCompType;\n    searchComp!: HTMLElement; \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n\n\n\n    setComp(comp:DropdownHeaderContainerCompType){\n        this.comp = comp;\n        // this.registerDropdownContainer();\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.optionHandler.getDropdownHeaderRenderer() && this.setRendererDetails();\n    }\n\n    setSearchComp(searchComp : HTMLElement){\n        this.searchComp = searchComp;\n    }\n\n    // registerBodyDropdownContainer(){\n    //     this.dropdownCtrlHandler.registerDropdownContainer(this);\n    // }\n\n\n    private setAriaAttributes() {\n    }\n\n    private applyClasses() : void { \n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        // let className = this.optionHandler.getClassName();\n        // if (className) {\n        //     if (typeof className === 'string') {\n        //         this.comp.getElement().classList.add(className);\n        //     } else if (Array.isArray(className)) {\n        //         (className as string[]).forEach(c => this.comp.getElement().classList.add(c));\n        //     }\n        // }\n    }\n\n    // private refresh() : void {\n    //     this.applyClasses();\n    // }\n\n    private getOwnerState() {\n        return {\n            // disabled: this.optionHandler.isDisabled(),\n            // readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n\n     getProperty(){\n        return {\n            options     : this.optionHandler.getOptions(),\n            isSearchable: ()=>this.optionHandler.isSearchable(),\n            isSelectAll : ()=>this.optionHandler.isSelectAllButtonEnabled(),\n            isMultiple  : ()=>this.optionHandler.isMultiple()\n        }\n    }\n\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails    = this.userComponentHandler.getDropdownHeaderRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.comp.setRendererDetails(userDetails);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getDropdownHeaderRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getDropdownHeaderRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getDropdownHeaderRendererParams(),\n\t\t};\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { DropdownHeaderContainerCompType } from \"./dropdownHeaderContainer.types\";\nimport { DropdownHeaderContainerController } from \"./dropdownHeaderContainer-controller\"\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\nconst dropdownContainer = (props: any) =>{\n    const DropdownHeaderContainer = document.createElement(\"div\");\n    DropdownHeaderContainer.tabIndex = 0;\n    \n    if(props.isSearchable()){\n        const searchComp = document.createElement(\"dropdown-search\");\n        DropdownHeaderContainer.appendChild(searchComp);\n    }\n\n    if(props.isSelectAll() && props.isMultiple()){\n        const selectall = document.createElement(\"select-all\");\n        DropdownHeaderContainer.appendChild(selectall);\n    }\n \n\n\n    return DropdownHeaderContainer;\n}\n\n\nexport class DropdownHeaderContainerComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n    @PostConstruct()\n    init(){\n        const comp:DropdownHeaderContainerCompType = {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n            destroy : () => this.destroy()\n        }\n        const controller = this.createManagedBean(new DropdownHeaderContainerController());\n        const props = controller.getProperty();\n\n        const DropdownContainer =  dropdownContainer(props);\n        this.setTemplate(DropdownContainer);\n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n\t\t// this.setTemplate(RootownDropdowntTemplate());\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n    \n    destroy(): void {\n        this.getGui().remove();\n    }\n}","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\n\n// import { ISelectOptionHandler } from '../../../../select/src/core/model/select-option-handler.types';\nimport { AutoWired, BEAN_NAME } from '@dg/corecomponent';\nimport { dropdownController } from '../model/dropdown-handler';\nimport { IDropdownDataPart } from '../model/dropdown-ds';\nimport { getDropdownRootUtilityClass } from '../dropdown-root/dropdown-root-classes';\nimport { composeClasses } from '@dg/utils';\nimport { IDropdownOptionHandler } from '../model/dropdown-option-handler.types';\nimport { DropdownFooterContainerCompType } from './dropdownFooterContainer.types';\nimport { DropdownUserComponentHandler } from '../model/dropdown-user-component-handler';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\n\nconst useUtilityClasses = (_ownerState : any) =>{\n    // const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'footer-container',\n            modifiers:[\n                // disabled && 'disabled',\n                // readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getDropdownRootUtilityClass);\n}\n\nexport class DropdownFooterContainerController extends EventEmitter{\n    comp!: DropdownFooterContainerCompType;\n    searchComp!: HTMLElement; \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownCtrlHandler !: dropdownController;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n\n\n\n    setComp(comp:DropdownFooterContainerCompType){\n        this.comp = comp;\n        // this.registerDropdownContainer();\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.optionHandler.getDropdownFooterRenderer() && this.setRendererDetails();\n    }\n\n    setSearchComp(searchComp : HTMLElement){\n        this.searchComp = searchComp;\n    }\n\n    // registerBodyDropdownContainer(){\n    //     this.dropdownCtrlHandler.registerDropdownContainer(this);\n    // }\n\n\n    private setAriaAttributes() {\n    }\n\n    private applyClasses() : void { \n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        // let className = this.optionHandler.getClassName();\n        // if (className) {\n        //     if (typeof className === 'string') {\n        //         this.comp.getElement().classList.add(className);\n        //     } else if (Array.isArray(className)) {\n        //         (className as string[]).forEach(c => this.comp.getElement().classList.add(c));\n        //     }\n        // }\n    }\n\n    // private refresh() : void {\n    //     this.applyClasses();\n    // }\n\n    private getOwnerState() {\n        return {\n            // disabled: this.optionHandler.isDisabled(),\n            // readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n\n     getProperty(){\n        return {\n            options : this.optionHandler.getOptions(),\n            isSearchable : ()=>this.optionHandler.isSearchable(),\n            isSelectAll : ()=>this.optionHandler.isSelectAllButtonEnabled(),\n            isMultiple : ()=>this.optionHandler.isMultiple(),\n        }\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails    = this.userComponentHandler.getDropdownFooterRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.comp.setRendererDetails(userDetails);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getDropdownFooterRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getDropdownFooterRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getDropdownFooterRendererParams(),\n            element : this.comp.getElement()\n\t\t};\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { DropdownFooterContainerCompType } from \"./dropdownFooterContainer.types\";\nimport { DropdownFooterContainerController } from \"./dropdownFooterContainer-controller\"\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\nconst dropdownContainer = (_props: any) =>{\n    const DropdownFooterContainer = document.createElement(\"div\");\n    DropdownFooterContainer.tabIndex = 0;\n    return DropdownFooterContainer;\n}\n\n\nexport class DropdownFooterContainerComponent extends Component {\n\n    private renderer       : any;\n\tprivate rendererElement: any;\n    \n    @PostConstruct()\n    init(){\n        const comp:DropdownFooterContainerCompType = {\n            getElement :()=>this.getGui(),\n            addOrRemoveCSSClass : (className:string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n            destroy : () => this.destroy()\n        }\n        const controller = this.createManagedBean(new DropdownFooterContainerController());\n        const props = controller.getProperty();\n\n        const DropdownContainer =  dropdownContainer(props);\n        this.setTemplate(DropdownContainer);\n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className:string):void{\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n\t\t// this.setTemplate(RootownDropdowntTemplate());\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n    \n    destroy(): void {\n        this.getGui().remove();\n    }\n}\n\n\n","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { dropdownNoOptiontype } from \"./dropdown-no-option.types\";\nimport { IDropdownOptionHandler } from \"../model/dropdown-option-handler.types\";\nimport { dropdownController } from \"../model/dropdown-handler\";\nimport { DropdownUserComponentHandler } from \"../model/dropdown-user-component-handler\";\n\n// const useUtilityClasses = () => {\n// \tconst slots = {\n// \t\troot: {\n// \t\t\tslot: 'dropdown-icon',\n// \t\t\tmodifiers: [\n\t\t\t\t\n// \t\t\t],\n// \t\t},\n// \t};\n\n// \treturn composeClasses(slots, getSelectRootUtilityClass);\n// };\n\nexport class DropdownNoOptionController extends EventEmitter {\n    private component !: dropdownNoOptiontype\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") protected dropdownHandler !: dropdownController;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n\n    \n    setComponent(component : dropdownNoOptiontype){\n        this.component = component;\n        this.applyClassNames();\n        this.setRendererDetails();\n        // this.dropdownHandler.registerDropdownCreateNewOptionController(this);\n        this.registerEvents();\n    }\n\n    private registerEvents(){\n\n    }\n\n    private applyClassNames(){\n\t\tthis.component.getElement().classList.add(\"dg-dropdown__option\");\n        this.component.getElement().classList.add(\"dg-dropdown__option-no-result-found\");\n    }\n\n    setRendererDetails() : void {\n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails     = this.userComponentHandler.getNoOptionRendererDetails(rendererWrapper, params) as IComponentDetails;\n        this.component.setRendererDetails(userDetails,params);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getNoOptionRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getNoOptionRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getCreateNewOptionRenderer(),\n\t\t};\n    }\n\n    getElement(): HTMLElement{\n        return this.component.getElement();\n    }\n}","\n\n\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { dropdownNoOptiontype } from \"./dropdown-no-option.types\";\nimport { DropdownNoOptionController } from \"./dropdown-no-option-controller\";\n\n\n\nconst createNoOptionTemplate = ()=>{\n    const createNewOption =  document.createElement(\"li\");\n    return createNewOption;\n}\n\nexport class DropdownNoOptionComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    @PostConstruct()\n    init() {\n        const comp : dropdownNoOptiontype = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails,params :any)=>this.setRendererDetails(rendererDetails,params),\n\t\t\tdestroy                     : () => this.destroy()\n        }\n\n        const controller = this.createBean(new DropdownNoOptionController());\n        this.setTemplate(createNoOptionTemplate())\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails,_params:any): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t        this.insertValueWithoutCellRenderer();\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\t\n\t\tconst label = document.createElement(\"label\");\n\t\tlabel.classList.add(\"dg-dropdown__option-label\");\n\t\n\t\tconst textDiv = document.createElement(\"div\");\n\t\ttextDiv.classList.add(\"dg-dropdown__option-label-text\");\n\t\ttextDiv.textContent = \"No Option\";\n\t\n\t\tlabel.appendChild(textDiv);\n\t\tparentElement.appendChild(label);\n\t}\n\t\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\t\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\t}\n\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DropdownLoadingControllerType, DropdownLoadingViewWrapperType } from \"./dropdown-loading.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { IDropdownUserComponentHandlerTypes } from \"../model/dropdown-user-component-handler.types\";\n\nexport class DropdownLoadingController extends EventEmitter implements DropdownLoadingControllerType {\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) private userComponentHandler !: IDropdownUserComponentHandlerTypes;\n    private component !: DropdownLoadingViewWrapperType;\n    setComponent(component : DropdownLoadingViewWrapperType) : void {\n        this.component = component;\n        this.setRenderDetails();\n    }\n\n    private setRenderDetails() : void {\n        const items = this.getProperty();\n        const componentDetails = this.userComponentHandler.getLoadingRendererDetails(items, {});\n        this.component.setRenderDetails(componentDetails);\n    }\n\n    private getProperty() : any {\n        return {\n            getRenderer          : () => this.optionsHandler.getLoadingRenderer(),\n            getUserRendererParams: () => this.optionsHandler.getLoadingRendererParams()\n        }\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { DropdownLoadingViewType, DropdownLoadingViewWrapperType } from \"./dropdown-loading.types\";\nimport { clearElement, PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { IComponentDetails } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { DropdownLoadingController } from \"./dropdown-loading-controller\";\nconst getTemplate = () => {\n    const div = document.createElement('div');\n    return div;\n}\nexport class DropdownLoadingView extends Component implements DropdownLoadingViewType {\n    private optionRenderer : any| null                 = null;\n    private optionRendererElement : HTMLElement | null = null;\n    @PostConstruct()\n    init() {\n        this.setTemplate(getTemplate())\n        const component : DropdownLoadingViewWrapperType = {\n            getElement : () => this.getGui(),\n            setRenderDetails : (componentDetails : IComponentDetails) => this.setRenderDetails(componentDetails)\n        }\n\n        const controller = this.createManagedBean(new DropdownLoadingController());\n        controller.setComponent(component);\n    }\n\n    private setRenderDetails(componentDetails : IComponentDetails) : void {\n         if (componentDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = componentDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n    }\n\n    private destroyRenderer(): void {\n\t\tthis.optionRenderer = this.context.destroyBean(this.optionRenderer);\n\t\tremoveFromParent(this.optionRendererElement);\n\t\tthis.optionRendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.optionRenderer = renderer;\n\t\tthis.optionRendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.optionRendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.optionRendererElement)\n\t\t}\n\t}\n}","import { OptionRendererType } from \"../../List-configuration\";\nimport { OptionRendererParams } from \"../Component/Body/List-Option/list-option.types\";\n\nexport class LoadingOptionRenderer implements OptionRendererType<OptionRendererParams>  {\n    constructor() {\n       \n    }\n\n    public init(_params: any): void {\n    }\n\n    public destroy(): void {\n\n    }\n\n    getElement() : HTMLElement {\n        return createDropdownLoader()\n    }\n}\n\nfunction createDropdownLoader() {\n    const panel = document.createElement(\"div\");\n    panel.className = \"dg-drop-option-loader-panel dg-delay-loader-dropdown\";\n\n    const list = document.createElement(\"ul\");\n    list.className = \"dg-delay-loader-dropdown-list\";\n\n    for (let i = 0; i < 1; i++) {\n        const listItem = document.createElement(\"li\");\n        listItem.className = \"dg-drop-option-loader\";\n\n        const circle = document.createElement(\"span\");\n        circle.className = \"dg-skeleton-loader dg-drop-option-loader-circle\";\n\n        const rectangle = document.createElement(\"span\");\n        rectangle.className = \"dg-skeleton-loader dg-drop-option-loader-rec\";\n\n        listItem.appendChild(circle);\n        listItem.appendChild(rectangle);\n        list.appendChild(listItem);\n    }\n\n    panel.appendChild(list);\n    return panel;\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\n// import { SelectUserComponentHandler, PropertyName } from \"./model/select-user-component-handler\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\n// import { SelectAPI } from \"./model/select-api\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { DropdownContainerComponent } from \"./src/core/dropdown-container/dropdownContainer-view\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { dropdownController } from \"./src/core/model/dropdown-handler\";\nimport { DropdownAPI } from \"./src/core/model/dropdown-api\";\nimport { DropdownDataPart } from \"./src/core/model/dropdown-ds\";\nimport { SelectDropdownOptionComponent } from \"./src/core/dropdown-option/dropdown-option-view\";\nimport { DropDownOptionHandler } from \"./src/core/model/dropdown-option-handler\";\nimport { SearchComponent } from \"./src/core/dropdown-search/dropdown-search-view\";\nimport { DropdownComponent } from \"./src/core/dropdown/dropdown-view\";\nimport { SelectAllComponent } from \"./src/core/dropdown-selectAll/dropdown-selectAll-view\";\nimport { IDropdownConfiguration } from \"./dropdown_configuration\";\nimport { DropdownUserComponentHandler } from \"./src/core/model/dropdown-user-component-handler\";\n// import { DropdownCreateNewOptionController } from \"./src/core/dropdown-create-newoption/dropdown-create-newoption-controller\";\nimport { DropdownCreateNewOptionComponent } from \"./src/core/dropdown-create-newoption/dropdown-create-newoption-view\";\nimport { DropdownBodyContainerComponent } from \"./src/core/dropdown-body-container/dropdownBodyContainer-view\";\nimport { DropdownHeaderContainerComponent } from \"./src/core/dropdown-Header-container/dropdownHeaderContainer-view\";\nimport { DropdownFooterContainerComponent } from \"./src/core/dropdown-Footer-container/dropdownFooterContainer-view\";\nimport { DropdownNoOptionComponent } from \"./src/core/dropdown-no-option/dropdown-no-option-view\";\nimport { DropdownLoadingView } from \"./src/core/dropdown-loading/dropdown-loading-view\";\nimport { LoadingOptionRenderer } from \"../List/src/renderer/loading-option-renderer\";\n\nlet nextInstanceId = 1;\n\nexport class SelectDropdownCoreComponent {\n    initializeSelect(configuration: IDropdownConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n        const instanceID = String(nextInstanceId++);\n\n        const beanClasses = this.CreateBeanClasses();\n\n        const context = new Context();\n\n        const userConfigurations = this.createUserConfiguration(\n            configuration,\n            params,\n            instanceID\n        );\n\n        // Model classes\n        context.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n        this.registerCoreComponent(context);\n        // Default user component registry\n        this.registerDefaultUserComponent(context);\n        createUI(context);\n\n        (window as any).context = context;\n    }\n\n    private CreateBeanClasses(): Set<any> {\n        let beanList = [\n            DropDownOptionHandler,\n            DropdownUserComponentHandler,\n            DropdownAPI,\n            DropdownDataPart,\n            dropdownController,\n            ComponentsRegistry,\n            UserComponentRegistry,\n            ComponentMetadataProvider,\n            EventHandler\n        ];\n        return new Set(beanList);\n    }\n\n    private createUserConfiguration(configuration: any, params: IUserParams, instanceID: string): {\n        configuration: any;\n        frameWorkOverrides: IFrameworkOverrides | null;\n        globalEventListener: Function | null;\n        frameworkComponentWrapper: any | null;\n        instanceID: string;\n    } {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n        if (!frameWorkOverrides) {\n            frameWorkOverrides = new VanillaFrameWorkOverrider();\n        }\n        return {\n            configuration,\n            frameWorkOverrides,\n            instanceID,\n            frameworkComponentWrapper: params.frameworkComponentWrapper,\n            globalEventListener: params.globalEventListener ?? null,\n        };\n    }\n\n    private registerDefaultUserComponent(context: Context): void {\n        const userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n        const defaultComponent = {\n            // [PropertyName.REMOVE_SELECT_RENDERER]: SelectIconRenderer,\n            // [PropertyName.LABEL_SELECT_RENDERER]: SelectIconRenderer\n            'loadingRenderer': LoadingOptionRenderer,\n        };\n\n        traverseObject(defaultComponent, (name: string, component: any) => {\n            userComponentRegistry.registerDefaultComponent(name, component);\n        });\n    }\n\n    private registerCoreComponent(context: Context): void {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n    let components: ComponentMeta[] = [\n        {\n            componentName: 'select-dropdown',\n            componentClass: DropdownContainerComponent,\n        },\n        {\n            componentName: 'select-option',\n            componentClass: SelectDropdownOptionComponent,\n        },\n        {\n            componentName: 'dropdown-search',\n            componentClass: SearchComponent,\n        },\n        {\n            componentName: 'dropdown',\n            componentClass: DropdownComponent,\n        },\n        {\n            componentName: 'select-all',\n            componentClass: SelectAllComponent,\n        },\n        {\n            componentName: 'dropdown-create-newoption',\n            componentClass: DropdownCreateNewOptionComponent,\n        },\n        {\n            componentName : 'dropdown-body-container',\n            componentClass : DropdownBodyContainerComponent,\n        },\n        {\n            componentName : 'dropdown-header-container',\n            componentClass : DropdownHeaderContainerComponent,\n        },\n        {\n            componentName : 'dropdown-footer-container',\n            componentClass : DropdownFooterContainerComponent,\n        },\n        {\n            componentName : 'dropdown-no-option',\n            componentClass : DropdownNoOptionComponent,\n        },\n        {\n            componentName : 'dropdown-loading',\n            componentClass : DropdownLoadingView\n        }\n    ];\n\n    return components;\n}\n\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\"\nimport { dropdownController } from \"../model/dropdown-handler\"\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DropdownRootCompType } from \"./dropdown-root-types\";\nimport { IDropdownDataPart } from \"../model/dropdown-ds\";\nimport { SelectDropdownOptionController } from \"../dropdown-option/dropdown-option-controller\";\nimport { IDropdownAPI } from \"../model/dropdown-api\";\nimport { DROPDOWN_DROPDWON_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { DropdownOptionElementModel } from \"../../../dropdown_configuration\";\nimport { DropdownUserComponentHandler } from \"../model/dropdown-user-component-handler\";\nimport { IDropdownOptionHandler } from \"../model/dropdown-option-handler.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\n// const useUtilityClasses = (ownerState : any ) =>{\n//     const slots = {\n//         root : {\n//             slot : 'root',\n//             modifiers : []\n//         },\n\n//     };\n//     return composeClasses(slots,getSelectRootUtilityClass)\n// }\n\n\nexport class SelectDropdownRootController extends EventEmitter{\n\n    @AutoWired(\"DROPDOWN_CONTROLLER_HANDLER\") dropdownHandler !: dropdownController;\n    @AutoWired(\"Dropdown_Datapart\") protected dropdownDatapart !: IDropdownDataPart;\n    @AutoWired(DROPDOWN_DROPDWON_BEAN_NAME.DROPDOWN_API) dropdownAPI!: IDropdownAPI;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: DropdownUserComponentHandler;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IDropdownOptionHandler;\n\n    comp         !: DropdownRootCompType;\n    activeOption !: SelectDropdownOptionController | null;\n    focusedExtraOption: 'none' | 'new' | null = null;\n    focusedIndex = -1;\n\n    setComponent(component: DropdownRootCompType) {\n        this.comp = component;\n        this.setRendererDetails();\n        this.dropdownHandler.registerDropdownComponent(this)\n        this.registerEvents();\n        // this.applyClasses();\n      \n        \n    }\n\n    getProperty(): any{\n        return {\n        }\n    }\n\n    init(){\n        this.dropdownHandler.registerDropdownComponent(this);\n    }\n\n    private registerEvents() : void {\n\n        \n        const searchComp =  this.dropdownHandler.getSearch();\n        \n        \n        this.addListener(this.comp.getGui(), 'keydown', (event: KeyboardEvent) => {\n\n\n\n            const isCharacter = event.key.length === 1 && /[a-zA-Z0-9]/.test(event.key);\n            if (isCharacter) {\n                searchComp?.focus();\n                return;\n            }\n            \n            switch(event.key){\n                case 'ArrowDown' :  \n                   event.preventDefault();\n                   this.moveNextOption();\n                   break;\n\n                case 'ArrowUp' :  \n                    event.preventDefault();\n                    this.movePreviousOption();\n                    break;\n\n                case 'Escape' : \n                    this.optionsHandler.onBeforeDropdownClose();\n                    break;\n                \n                case 'Enter' :\n                    if(this.focusedExtraOption == \"none\"){\n                        this.dropdownHandler.getDropdown().noneOption();\n                        event.stopPropagation();\n                    }\n                    else if(this.focusedExtraOption == \"new\"){\n                        this.dropdownHandler.getDropdown().addNewOption();\n                        event.stopPropagation();\n                    }\n                    else if(this.activeOption){\n                        this.activeOption.clickOption(event,  this.dropdownDatapart.isSelectAll());\n                    }\n                    else{\n                        this.optionsHandler.onBeforeDropdownClose();\n                    }\n                    break;\n                case ' ':\n                    event.preventDefault();\n                    break;\n\n                default : break;\n\n            }\n            this.optionHandler.onKeydown(event);\n        })\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.comp.destroy();\n    }\n\n    focus(){\n        this.comp.getGui().focus({\n            preventScroll :true \n        });\n        this.optionHandler.onFocus();   \n    }\n\n    blur(){\n        this.comp.getGui().blur();\n        this.optionHandler.onBlur();\n    }\n\n    getElement(){\n        return this.comp.getGui();\n    }\n\n    resetActiveElement(){\n        this.activeOption?.comp.getElement().classList.remove('dg-dropdown__option-focused');\n        this.focusedIndex = -1;\n        this.activeOption = null;\n    }\n\n\n    moveNextOption(): void {\n        const noneOptionComp = this.dropdownHandler.getDropdown().getNoneOption() ?? null;\n        const newOptionComp = this.dropdownHandler.getDropdownCreateNewOptionController()?.getElement() ?? null;\n        const allOptions = this.dropdownDatapart.getAllOptions() ?? [];\n        const totalOptions = allOptions.length;\n    \n        this.clearFocus();\n    \n        // If only noneOption and newOption are available, handle circular navigation between them\n        if((totalOptions === 0) && noneOptionComp && newOptionComp) {\n            if (this.focusedExtraOption === 'none') {\n                // Move to newOption if we're on noneOption\n                this.focusedExtraOption = 'new';\n            } else {\n                // Otherwise, loop back to noneOption\n                this.focusedExtraOption = 'none';\n            }\n        }\n        else if (totalOptions === 0) {\n            newOptionComp && (this.focusedExtraOption = 'new');\n        } else {\n            // Handle cases where we have options in allOptions\n            if (this.focusedExtraOption === null && this.focusedIndex === -1) {\n                // Initial focus on noneOptionComp if available\n                this.focusedExtraOption = noneOptionComp ? 'none' : null;\n                this.focusedIndex = noneOptionComp ? -1 : 0;\n            } else if (this.focusedExtraOption === 'none') {\n                this.focusedExtraOption = null;\n                this.focusedIndex = 0;  // Move from noneOption to the first in allOptions\n            } else if (this.focusedIndex === totalOptions - 1) {\n                if (newOptionComp) {\n                    this.focusedExtraOption = 'new';\n                    this.focusedIndex = -1;\n                } else {\n                    this.focusedExtraOption = noneOptionComp ? 'none' : null;\n                    this.focusedIndex = noneOptionComp ? -1 : 0;\n                }\n            } else if (this.focusedExtraOption === 'new') {\n                this.focusedExtraOption = noneOptionComp ? 'none' : null;\n                this.focusedIndex = noneOptionComp ? -1 : 0;\n            } else {\n                this.focusedIndex++;\n            }\n        }\n    \n        this.applyFocus(noneOptionComp, newOptionComp, allOptions);\n    }\n    \n    movePreviousOption(): void {\n        const noneOptionComp = this.dropdownHandler.getDropdown().getNoneOption() ?? null;\n        const newOptionComp = this.dropdownHandler.getDropdownCreateNewOptionController()?.getElement() ?? null;\n        const allOptions = this.dropdownDatapart.getAllOptions() ?? [];\n        const totalOptions = allOptions.length;\n    \n        this.clearFocus();\n    \n        // Handle cases where we only have noneOption and newOption\n        if((totalOptions === 0) && noneOptionComp && newOptionComp) {\n            if (this.focusedExtraOption === 'new') {\n                this.focusedExtraOption = 'none';\n            } else {\n                this.focusedExtraOption = 'new';\n            }\n        }\n        else if (totalOptions === 0) {\n            newOptionComp && (this.focusedExtraOption = 'new');\n\n        } else {\n            // Handle cases where we have options in allOptions\n            if (this.focusedExtraOption === 'new') {\n                this.focusedExtraOption = null;\n                this.focusedIndex = totalOptions - 1;\n            } else if (this.focusedIndex === 0) {\n                // Move to noneOption if we're at the first item\n                this.focusedExtraOption = noneOptionComp ? 'none' : (newOptionComp ? 'new' : null);\n                this.focusedIndex = noneOptionComp || newOptionComp ? -1 : totalOptions - 1;\n            } else if (this.focusedExtraOption === 'none') {\n                // Move to newOption if available; otherwise, loop to last option\n                this.focusedExtraOption = newOptionComp ? 'new' : null;\n                this.focusedIndex = newOptionComp ? -1 : totalOptions - 1;\n            } else if (this.focusedIndex > 0) {\n                // Navigate within allOptions\n                this.focusedIndex--;\n            } else {\n                // Default fallback if focusedIndex is -1 or an unexpected value\n                this.focusedIndex = totalOptions - 1;\n            }\n        }\n    \n        this.applyFocus(noneOptionComp, newOptionComp, allOptions);\n    }\n    \n    \n    private clearFocus(): void {\n        if (this.focusedExtraOption === 'none') {\n            this.dropdownHandler.getDropdown().getNoneOption()?.classList.remove('dg-dropdown__option-focused');\n        } else if (this.focusedExtraOption === 'new') {\n            this.dropdownHandler.getDropdownCreateNewOptionController()?.getElement()?.classList.remove('dg-dropdown__option-focused');\n        } else if (this.activeOption) {\n            this.activeOption.comp.getElement().classList.remove('dg-dropdown__option-focused');\n        }\n    }\n    \n    \n    applyFocus(\n        noneOptionComp: HTMLElement | null,\n        newOptionComp: HTMLElement | null,\n        allOptions: DropdownOptionElementModel[]\n    ): void {\n        if (this.focusedExtraOption === 'none' && noneOptionComp) {\n            noneOptionComp.classList.add('dg-dropdown__option-focused');\n            // noneOptionComp.focus();\n            noneOptionComp.scrollIntoView({ block: 'nearest' })\n        } else if (this.focusedExtraOption === 'new' && newOptionComp) {\n            newOptionComp.classList.add('dg-dropdown__option-focused');\n            // newOptionComp.focus();\n            newOptionComp.scrollIntoView({ block: 'nearest' })\n        } else if (this.focusedIndex >= 0 && allOptions.length > 0) {\n            this.applyFocusToActiveOption();\n        }\n    }\n\n    applyFocusToActiveOption(): void {\n            this.activeOption = this.dropdownDatapart.getOptionController(this.focusedIndex);\n            this.activeOption?.comp.getElement().classList.add('dg-dropdown__option-focused');\n            // this.activeOption?.comp.getElement().focus()\n            this.activeOption?.comp.getElement().scrollIntoView({ block: 'nearest' });\n    }\n\n    resetFocuesdOption() : void{\n        this.focusedExtraOption = null;\n        this.focusedIndex = -1;\n        this.clearFocus();\n    }\n\n     setHoveredOption(extraOption: 'none' | 'new' | null, index: number): void {\n        this.clearFocus();\n        this.focusedExtraOption = extraOption;\n        this.focusedIndex = index;\n    \n        const noneOptionComp = this.dropdownHandler.getDropdown().getNoneOption() ?? null;\n        const newOptionComp = this.dropdownHandler.getDropdownCreateNewOptionController()?.getElement()  ?? null;\n        const allOptions = this.dropdownDatapart.getAllOptions() ?? [];\n        \n        this.applyFocus(noneOptionComp, newOptionComp, allOptions);\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails    = this.userComponentHandler.getDropdownRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.comp.setRendererDetails(userDetails);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getDropdownRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getDropdownRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getDropdownRendererParams(),\n\t\t};\n    }\n\n    \n\n}","\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { SelectDropdownRootController } from \"./dropdown-root-controller\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { DropdownRootCompType } from \"./dropdown-root-types\";\n\n\n \n\nconst dropdownTemplate = ()=>{\n\treturn `<div tabindex=\"0\">\t </div> ` \n}\n\nconst ownDropdown = ()=>{\n\treturn `<div tabindex=\"0\">\n\t<select-dropdown> </select-dropdown></div> ` \n}\n\n\nfunction RootownDropdowntTemplate() : HTMLElement {\n\tconst div = document.createElement('div');\n\tconst template = ownDropdown();\n\tdiv.innerHTML = template ;\n\treturn div.firstChild as HTMLElement;\n}\n\nfunction RootTemplate(_props :any) : HTMLElement {\n\tconst div = document.createElement('div');\n\tconst template = dropdownTemplate();\n\tdiv.innerHTML = template ;\n\treturn div.firstChild as HTMLElement;\n}\n\nexport class SelectDropdownRootComponent extends Component{\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\n\t// private appendTo: HTMLElement | null;\n\tconstructor(_appendTo : HTMLElement | undefined){\n\t\tsuper();\n\t\t// this.appendTo = _appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst component :DropdownRootCompType ={\n\t\t\tgetGui : () =>this.getGui(),\n\t\t\taddOrRemoveCssClass : (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tsetRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n            destroy : () => this.destroy()\n\t\t}\n\t\tconst controller  =  this.createManagedBean(new SelectDropdownRootController());\n        \n\t\tconst props =  controller.getProperty();\n\t\tconst template =  RootTemplate(props);\n\t\tthis.setTemplate(template);\n\n        controller.setComponent(component);\n\n\t\t// this.appendElementIntoUserDom();\n\n\t}\n\tprivate addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n\t// private appendElementIntoUserDom() :void{\n\t// \tconst eGui = this.getGui();\n\t// \tthis.appendTo && this.appendTo.appendChild(eGui);\n\t// \tthis.addDestroyFunc(()=>{\n\t// \t\tthis.appendTo?.remove();\n\t// \t\tthis.appendTo = null;\n\t// \t})\n\t// }\n\n\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n\t\tthis.setTemplate(RootownDropdowntTemplate());\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t\tthis.renderer.afterElementAttached && this.renderer.afterElementAttached();\n\t\t}\n\t}\n\n\n    destroy(): void {\n        this.getGui()?.remove();\n    }\n\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { SelectDropdownCoreComponent } from \"./dropdown-core\";\nimport { SelectDropdownRootComponent } from \"./src/core/dropdown-root/dropdown-root-view\";\nimport { IDropdownAPI } from \"./src/core/model/dropdown-api\";\nimport { IDropdownConfiguration } from \"./dropdown_configuration\";\nimport { DROPDOWN_DROPDWON_BEAN_NAME } from \"./src/constants/beanname-constant\";\n\nexport class SelectDropdown {\n  public api!: IDropdownAPI;\n  constructor(configuration: IDropdownConfiguration, params?: IUserParams) {\n    const createUI = (context: Context) => {\n      this.api = context.getBean(DROPDOWN_DROPDWON_BEAN_NAME.DROPDOWN_API) as IDropdownAPI;\n      context.createBean(new SelectDropdownRootComponent(configuration.dropdownAppendTo));\n    };\n    new SelectDropdownCoreComponent().initializeSelect(configuration, params, createUI);\n  }\n}\n\n\n(window as any).SelectDropdown = SelectDropdown","import { getAbsoluteHeight, getAbsoluteWidth, getElementRectWithOffset, setAriaLabel, setAriaRole, IRect } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nexport interface IPosition {\n\tx: number;\n\ty: number;\n\tposition : Position | null;\n\tsourceRect : any;\n\tparentRect : any;\n}\n\nexport enum DIRECTION {\n\tvertical,\n\thorizontal,\n}\n\ninterface CalculatedPosition {\n    top: number;\n    left: number;\n}\n\nexport interface PopupPositionParams {\n\tpopUpElement     : HTMLElement;\n\tgapX            ?: number;\n\tgapY            ?: number;\n\tposition        ?: Position;\n\talignSide       ?: 'left' | 'right';\n\tkeepWithinBounds?: boolean;\n\tupdatePosition  ?: () => IPosition;\n\trelativePosition ?:boolean;\n}\n\nexport const enum Position {\n\tunder       = 'under',\n\tabove       = 'above',\n\tover        = 'over',\n\tleft        = 'left',\n\tright       = 'right',\n\ttop         = 'top',\n\ttopLeft     = 'topLeft',\n\ttopRight    = 'topRight',\n\tbottom      = 'bottom',\n\tbottomLeft  = 'bottomLeft',\n\tbottomRight = 'bottomRight',\n\tleftTop     = 'leftTop',\n\tleftBottom  = 'leftBottom',\n\trightTop    = 'rightTop',\n\trightBottom = 'rightBottom',\n\tauto        = 'auto',\n\tcenter      = 'center',\n}\n\nexport interface AfterGuiAttachedParams {\n\thidePopup?: () => void;\n\tsuppressFocus?: boolean;\n}\n\nexport interface PopupComponentPositionParams extends PopupPositionParams {\n\tsourceElement: HTMLElement;\n}\n\nexport interface Popup {\n\telement: HTMLElement;\n\twrapper: HTMLElement;\n\thideFunction: () => void;\n\tinstanceId: number;\n\talignedToElement: HTMLElement | undefined;\n\trelativeObserver : ResizeObserver | null;\n}\n\nexport interface AddPopupParams {\n    childElement       : HTMLElement;\n\t\n    closedCallback    ?: (e?: MouseEvent | TouchEvent | KeyboardEvent) => void;\n    afterGuiAttached  ?: (params: AfterGuiAttachedParams) => void;\n    positionCallback  ?: () => void;\n    ariaLabel          : string;\n    anchorToElement   ?: HTMLElement;\n    popupParentElement?: HTMLElement;\n    documentElement   ?: Document;\n    rtl               ?: boolean;\n    popupClassName    ?: string;\n}\n\nexport interface AddPopupOutput {\n\thideFunction: () => void;\n}\n\nexport class CorePopupHandler extends EventEmitter {\n\tprotected popupList: Popup[] = [];\n\n\tprotected instanceId = 0;\n\n\tpositionPopupByComponent( params: PopupComponentPositionParams, popupParentElement: HTMLElement = document.body, documentElement: Document = document, fallBackPositions : Position[] | null = null,arrow : boolean = false): void {\n\t\tlet { popUpElement, gapX = 0, gapY = 0, keepWithinBounds, sourceElement, alignSide = 'left', position = 'over', relativePosition} = params;\n\n\t\t\n\n\t\tconst popupIndex = this.getPopupIndex(popUpElement);\n\t\t\n\t\t\n\n\t\tconst updatePosition = () => {\n\n\t\t\tconst sourceRect = sourceElement.getBoundingClientRect();\n\t\t\tconst parentRect = this.getParentRect( popupParentElement, documentElement, ) as DOMRect;\n\n\t\t\tposition = this.flipPositionForAlign(position as Position, alignSide);\n\n\t\t\tposition = this.calculateAllPopupPosition(popUpElement, sourceRect, parentRect, position as Position, gapX, gapY, fallBackPositions)\n\n\t\t\tconst calculatedPosition = (this.calculatePositionByPosition(position as Position, alignSide, gapX as number, gapY as number, sourceRect, parentRect, popUpElement, arrow ));\n\n\t\t\treturn { x : calculatedPosition.left, y : calculatedPosition.top , position : position as any, sourceRect, parentRect};\n\t\t};\n\n\t\t\n\t\tif (popupIndex !== -1) {\n\t\t\tconst popup = this.popupList[popupIndex];\n\t\t\tpopup.alignedToElement = sourceElement;\n\t\t\tif(relativePosition) {\n\t\t\t\tlet observer = new ResizeObserver(() => {\n\t\t\t\t\tthis.positionPopup( { popUpElement, gapX, gapY, keepWithinBounds, updatePosition, }, popupParentElement, documentElement, );\n\t\t\t\t})\n\t\t\t\tpopup.relativeObserver = observer;\n\t\n\t\t\t\tobserver.observe(sourceElement);\n\t\t\t\tobserver.observe(popUpElement);\n\n\t\t\t}\n\t\t}\n\n\t\tthis.positionPopup( { popUpElement, gapX, gapY, keepWithinBounds, updatePosition, }, popupParentElement, documentElement,arrow );\n\t}\n\n\tgetWrapperElement(element: HTMLElement): HTMLElement {\n\t\tconst popupIndex = this.getPopupIndex(element);\n\t\treturn this.popupList[popupIndex].wrapper;\n\t}\n\n\tprivate flipPositionForAlign( position: Position, alignSide: string ): Position {\n\t\tif (alignSide === 'right') {\n\t\t\tswitch (position) {\n\t\t\t\tcase Position.left:\n\t\t\t\t\treturn Position.right;\n\t\t\t\tcase Position.right:\n\t\t\t\t\treturn Position.left;\n\t\t\t\tcase Position.leftTop:\n\t\t\t\t\treturn Position.rightTop;\n\t\t\t\tcase Position.leftBottom:\n\t\t\t\t\treturn Position.rightBottom;\n\t\t\t\tcase Position.rightTop:\n\t\t\t\t\treturn Position.leftTop;\n\t\t\t\tcase Position.rightBottom:\n\t\t\t\t\treturn Position.leftBottom;\n\t\t\t\tdefault:\n\t\t\t\t\treturn position;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn position; \n\t}\n\n\tprivate updateArrow( tooltip: HTMLElement, position: Position, sourceRect: DOMRect, parentRect: DOMRect, finalLeft: number, finalTop: number ) {\n\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"unset\");\n\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"unset\");\n\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"unset\");\n\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"unset\");\n\n\t\tthis.setArrowStyles(tooltip, position);\n\n\t\tconst srcLeft = sourceRect.left - parentRect.left;\n\t\tconst srcTop  = sourceRect.top  - parentRect.top;\n\n\t\tconst srcRight  = srcLeft + sourceRect.width;\n\t\tconst srcBottom = srcTop  + sourceRect.height;\n\n\t\tconst padding = 10;\n\n\t\tlet arrowLeft: number = 0;\n\t\tlet arrowTop: number = 0;\n\n\t\tswitch (position) {\n\t\t\tcase Position.leftTop:\n\t\t\t\tarrowTop = srcTop - finalTop + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.leftBottom:\n\t\t\t\tarrowTop = srcBottom - finalTop - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.left:\n\t\t\t\tarrowTop = srcTop + sourceRect.height / 2 - finalTop;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.rightTop:\n\t\t\t\tarrowTop = srcTop - finalTop + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.rightBottom:\n\t\t\t\tarrowTop = srcBottom - finalTop - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.right:\n\t\t\t\tarrowTop = srcTop + sourceRect.height / 2 - finalTop;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.topLeft:\n\t\t\t\tarrowLeft = srcLeft - finalLeft + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.topRight:\n\t\t\t\tarrowLeft = srcRight - finalLeft - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.top:\n\t\t\t\tarrowLeft = srcLeft + sourceRect.width / 2 - finalLeft;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottomLeft:\n\t\t\t\tarrowLeft = srcLeft - finalLeft + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottomRight:\n\t\t\t\tarrowLeft = srcRight - finalLeft - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottom:\n\t\t\tcase Position.under:\n\t\t\t\tarrowLeft = srcLeft + sourceRect.width / 2 - finalLeft;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\n\n\n\tpublic calculatePositionByPosition(position : Position, alignSide : 'right' | 'left', gapX : number, gapY : number, sourceRect : DOMRect, parentRect : DOMRect, toolTipElement : HTMLElement, arrow : boolean = false) : CalculatedPosition {\n\t\tlet top = 0;\n\t\tlet left = 0;\n\n\t\tswitch(position) {\n\t\t\tcase Position.left: \n\t\t\t\tleft = (sourceRect.left - parentRect.left) - toolTipElement.offsetWidth - gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top - (toolTipElement.offsetHeight / 2 )) + (sourceRect.height / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.leftTop: \n\t\t\t\tleft = (sourceRect.left - parentRect.left) - toolTipElement.offsetWidth - gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top);\n\t\t\t\tbreak;\n\t\t\tcase Position.leftBottom: \n\t\t\t\tleft = (sourceRect.left - parentRect.left) - toolTipElement.offsetWidth - gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - (toolTipElement.offsetHeight ) + (sourceRect.height);\n\t\t\t\tbreak;\n\t\t\tcase Position.right:\n\t\t\t\tleft = (sourceRect.left - parentRect.left) + sourceRect.width + gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top - (toolTipElement.offsetHeight / 2 )) + (sourceRect.height / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.rightTop:\n\t\t\t\tleft = (sourceRect.left - parentRect.left) + sourceRect.width + gapX;\n\t\t\t\ttop = sourceRect.top - parentRect.top;\n\t\t\t\tbreak;\n\t\t\tcase Position.rightBottom:\n\t\t\t\tleft = (sourceRect.left - parentRect.left) + sourceRect.width + gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - (toolTipElement.offsetHeight ) + (sourceRect.height);\n\t\t\t\tbreak;\n\t\t\tcase Position.top:\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - toolTipElement.offsetHeight - gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) - (toolTipElement.offsetWidth / 2)) + (sourceRect.width / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.topLeft:\n\t\t\tcase Position.above:\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - toolTipElement.offsetHeight - gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left));\n\t\t\t\tbreak;\n\t\t\tcase Position.topRight:\n\t\t\t\ttop = sourceRect.top - parentRect.top - toolTipElement.offsetHeight - gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) + (sourceRect.width - toolTipElement.offsetWidth));\n\t\t\t\tbreak;\n\t\t\tcase Position.bottom:\n\t\t\t\ttop = (sourceRect.top - parentRect.top) + sourceRect.height + gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) - (toolTipElement.offsetWidth / 2)) + (sourceRect.width / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomLeft:\n\t\t\tcase Position.under:\n\t\t\t\ttop = sourceRect.top - parentRect.top + sourceRect.height + gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left));\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomRight:\n\t\t\t\ttop = sourceRect.top - parentRect.top + sourceRect.height + gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) + (sourceRect.width - toolTipElement.offsetWidth));\n\t\t\t\tbreak;\n\t\t\tcase Position.over:\n\t\t\t\ttop  = sourceRect.top - parentRect.top;\n\t\t\t\tleft = sourceRect.left - parentRect.left;\n\t\t\t\tif (alignSide === 'right') {\n\t\t\t\t\tleft -= toolTipElement.offsetWidth - sourceRect.width;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Position.center:\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) - (toolTipElement.offsetWidth / 2)) + (sourceRect.width / 2);\n\t\t\t\ttop = (sourceRect.top - parentRect.top - (toolTipElement.offsetHeight / 2 )) + (sourceRect.height / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.auto: {\n\t\t\t\tconst calculatedPosition = this.findAutoPosition(alignSide, gapX, gapY, sourceRect, parentRect, toolTipElement);\n\t\t\t\ttop = calculatedPosition.top;\n\t\t\t\tleft = calculatedPosition.left;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.setAlignedStyles(toolTipElement, position);\n\n\t\tconst ARROW_OFFSET = arrow ? 6 : 0;\n\n\t\tswitch (position) {\n\t\t\tcase Position.left:\n\t\t\tcase Position.leftTop:\n\t\t\tcase Position.leftBottom:\n\t\t\t\tleft -= ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.right:\n\t\t\tcase Position.rightTop:\n\t\t\tcase Position.rightBottom:\n\t\t\t\tleft += ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.top:\n\t\t\tcase Position.topLeft:\n\t\t\tcase Position.topRight:\n\t\t\t\ttop -= ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottom:\n\t\t\tcase Position.bottomLeft:\n\t\t\tcase Position.bottomRight:\n\t\t\t\ttop += ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.over:\n\t\t\t\tbreak;\n\n\t\t\tcase Position.center:\n\t\t\tcase Position.auto:\n\t\t\t\tbreak;\n\t\t}\n\n\n\t\treturn {\n\t\t\ttop,\n\t\t\tleft\n\t\t}\n\t}\n\n\tprivate findAutoPosition( alignSide : 'right' | 'left', gapX : number, gapY : number,  sourceRect: DOMRect, parentRect: DOMRect, toolTipElement: HTMLElement ): CalculatedPosition {\n\t\tconst positionsToTry: Position[] = [\n\t\t\t// Position.bottomLeft,\n\t\t\tPosition.bottom,\n\t\t\t// Position.bottomRight,\n\t\t\t// Position.topLeft,\n\t\t\tPosition.top,\n\t\t\t// Position.topRight,\n\t\t\t// Position.leftTop,\n\t\t\tPosition.left,\n\t\t\t// Position.leftBottom,\n\t\t\t// Position.rightTop,\n\t\t\tPosition.right,\n\t\t\t// Position.rightBottom\n\t\t];\n\n\t\tlet bestPosition: CalculatedPosition = { top: 0, left: 0, };\n\n\t\tfor (let i = 0 ;i< positionsToTry.length ;i++) {\n\t\t\tconst position = positionsToTry[i];\n\n\t\t\tconst calculatedPosition = this.calculatePositionByPosition( position, alignSide, gapX, gapY, sourceRect, parentRect, toolTipElement );\n\n\t\t\tconst fitsInParent = calculatedPosition.left >= 0 && calculatedPosition.left + toolTipElement.offsetWidth <= parentRect.width && calculatedPosition.top >= 0 && calculatedPosition.top + toolTipElement.offsetHeight <= parentRect.height;\n\n\t\t\tif (fitsInParent) {\n\t\t\t\tbestPosition = calculatedPosition;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn bestPosition;\n\t}\n\n\tpublic positionPopupUnderMouseEvent( params: PopupPositionParams & { mouseEvent: MouseEvent | Touch; }, popupParentElement: HTMLElement = document.body, documentElement: Document = document ): void {\n\t\tconst { popUpElement, gapX, gapY } = params;\n\n\n\t\tthis.positionPopup({ popUpElement, gapX, gapY, keepWithinBounds: true, updatePosition: () => this.calculatePointerAlign( params.mouseEvent, popupParentElement, documentElement)}, popupParentElement, documentElement);\n\t}\n\n\tprivate calculatePointerAlign( e: MouseEvent | Touch, popupParentElement: HTMLElement = document.body, documentElement: Document = document, ): { x: number; y: number;  position : any, sourceRect : any, parentRect : any} {\n\t\tconst parentRect = this.getParentRect( popupParentElement, documentElement, );\n\t\treturn {\n\t\t\tx: e.clientX - parentRect.left,\n\t\t\ty: e.clientY - parentRect.top,\n\t\t\tposition : null,\n\t\t\tsourceRect : null,\n\t\t\tparentRect : null\n\t\t};\n\t}\n\n\tpositionPopup( params: PopupPositionParams, popupParentElement: HTMLElement = document.body, documentElement: Document = document,arrow : boolean = false ): void {\n\t\tconst { popUpElement, keepWithinBounds,gapX = 0, gapY = 0, updatePosition } = params;\n\t\tconst lastSize = { width: 0, height: 0 };\n\n\t\tconst updatePopupPosition = () => {\n\t\t\tlet { x, y , position, sourceRect, parentRect} = updatePosition!();\n\n\t\t\tif ( popUpElement.clientWidth === lastSize.width && popUpElement.clientHeight === lastSize.height ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlastSize.width = popUpElement.clientWidth;\n\t\t\tlastSize.height = popUpElement.clientHeight;\n\n\t\t\tx += gapX;\n\n\t\t\ty += gapY\n\n\t\t\tif (keepWithinBounds) {\n\t\t\t\tx = this.ensureXYBoundaries( popUpElement, x, DIRECTION.horizontal, popupParentElement, documentElement, );\n\t\t\t\ty = this.ensureXYBoundaries( popUpElement, y, DIRECTION.vertical, popupParentElement, documentElement, );\n\t\t\t}\n\n\t\t\tarrow && position && this.updateArrow(popUpElement, position, sourceRect, parentRect, x, y);\n\t\t\tpopUpElement.style.left = `${x}px`;\n\t\t\tpopUpElement.style.top = `${y}px`;\n\t\t};\n\n\t\tupdatePopupPosition();\n\t}\n\n\taddPopup(params: AddPopupParams): AddPopupOutput {\n\t\tlet { childElement, ariaLabel, positionCallback, anchorToElement, afterGuiAttached, popupParentElement = document.body, documentElement = document, rtl, popupClassName } = params;\n\n\t\tif (!documentElement) {\n\t\t\treturn { hideFunction: () => {} };\n\t\t}\n\n\t\tconst popupIndex = this.getPopupIndex(childElement);\n\n\t\tif (popupIndex !== -1) {\n\t\t\tconst popup = this.popupList[popupIndex];\n\t\t\treturn { hideFunction: popup.hideFunction };\n\t\t}\n\n\t\t// this.initialisePopupPosition(childElement, popupParentElement);\n\n\t\tconst wrapperElement = this.createPopupWrapper(childElement, ariaLabel, popupClassName, rtl, popupParentElement);\n\t\tconst removePopup = () => {\n\t\t\tif (popupParentElement) {\n\t\t\t\tif (popupParentElement.contains(wrapperElement)) {\n\t\t\t\t\tpopupParentElement.removeChild(wrapperElement);\n\t\t\t\t}\n\t\t\t\tthis.removePopupFromPopupList(childElement);\n\t\t\t}\n\t\t};\n\n\t\tif (afterGuiAttached) {\n\t\t\tafterGuiAttached({\n\t\t\t\thidePopup: removePopup,\n\t\t\t});\n\t\t}\n\n\t\tthis.popupList.push({ element: childElement, wrapper: wrapperElement, hideFunction: removePopup, instanceId: this.instanceId++, alignedToElement: anchorToElement, relativeObserver : null });\n\n\t\tif (positionCallback) {\n\t\t\tpositionCallback();\n\t\t}\n\n\t\treturn {\n\t\t\thideFunction: removePopup,\n\t\t};\n\t}\n\n\tprotected setArrowStyles(popupElement: HTMLElement, positioned: Position | null) {\n\t\t// remove all pointer classes\n\t\tconst classes = [\n\t\t\t\"dg-popover__pointer--right-top\",\n\t\t\t\"dg-popover__pointer--right-middle\",\n\t\t\t\"dg-popover__pointer--right-bottom\",\n\t\t\t\"dg-popover__pointer--left-top\",\n\t\t\t\"dg-popover__pointer--left-middle\",\n\t\t\t\"dg-popover__pointer--left-bottom\",\n\t\t\t\"dg-popover__pointer--top-left\",\n\t\t\t\"dg-popover__pointer--top-center\",\n\t\t\t\"dg-popover__pointer--top-right\",\n\t\t\t\"dg-popover__pointer--bottom-left\",\n\t\t\t\"dg-popover__pointer--bottom-center\",\n\t\t\t\"dg-popover__pointer--bottom-right\",\n\t\t];\n\n\t\tclasses.forEach(cls => popupElement.classList.remove(cls));\n\n\t\tif (!positioned) return;\n\n\t\tswitch (positioned) {\n\n\t\t\t// RIGHT SIDE POINTERS\n\t\t\tcase Position.right:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--left-middle\");\n\t\t\t\tbreak;\n\t\t\tcase Position.rightTop:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--left-top\");\n\t\t\t\tbreak;\n\t\t\tcase Position.rightBottom:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--left-bottom\");\n\t\t\t\tbreak;\n\n\t\t\t// LEFT SIDE POINTERS\n\t\t\tcase Position.left:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--right-middle\");\n\t\t\t\tbreak;\n\t\t\tcase Position.leftTop:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--right-top\");\n\t\t\t\tbreak;\n\t\t\tcase Position.leftBottom:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--right-bottom\");\n\t\t\t\tbreak;\n\n\t\t\t// TOP SIDE POINTERS\n\t\t\tcase Position.top:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--bottom-center\");\n\t\t\t\tbreak;\n\t\t\tcase Position.topLeft:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--bottom-left\");\n\t\t\t\tbreak;\n\t\t\tcase Position.topRight:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--bottom-right\");\n\t\t\t\tbreak;\n\n\t\t\t// BOTTOM SIDE POINTERS\n\t\t\tcase Position.bottom:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--top-center\");\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomLeft:\n\t\t\tcase Position.under:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--top-left\");\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomRight:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--top-right\");\n\t\t\t\tbreak;\n\n\t\t\t// No arrow\n\t\t\tcase Position.over:\n\t\t\tcase Position.above:\n\t\t\tcase Position.center:\n\t\t\tcase Position.auto:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\tprotected setAlignedStyles( popupElement: HTMLElement, positioned: Position | null, ) {\n\t\tconst popupIndex = this.getPopupIndex(popupElement);\n\n\t\tif (popupIndex === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst popup = this.popupList[popupIndex];\n\n\t\tconst { alignedToElement } = popup;\n\n\t\tif (!alignedToElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst positions = [ Position.left, Position.leftTop, Position.leftBottom, Position.right, Position.rightTop, Position.rightBottom, Position.top, Position.topLeft, Position.topRight, Position.bottom, Position.bottomLeft, Position.bottomRight, Position.over, Position.above, Position.under];\n\n\t\tpositions.forEach((position) => {\n\t\t\talignedToElement.classList.remove('ZG-has-popup');\n\t\t\talignedToElement.classList.remove(\n\t\t\t\t`ZG-has-popup-positioned-${position}`,\n\t\t\t);\n\t\t\tpopupElement.classList.remove(`ZG-popup-positioned-${position}`);\n\t\t});\n\n\t\tif (!positioned) {\n\t\t\treturn;\n\t\t}\n\n\t\talignedToElement.classList.add('ZG-has-popup');\n\t\talignedToElement.classList.add(`ZG-has-popup-positioned-${positioned}`);\n\t\tpopupElement.classList.add(`ZG-popup-positioned-${positioned}`);\n\t}\n\n\tprotected getPopupIndex(element: HTMLElement): number {\n\t\treturn this.popupList.findIndex((popup) => popup.element === element);\n\t}\n\n\tprotected initialisePopupPosition(\n\t\telement: HTMLElement,\n\t\tpopupParentElement: HTMLElement = document.body,\n\t): void {\n\t\tconst popupParentElementRect =\n\t\t\tpopupParentElement.getBoundingClientRect();\n\n\t\tif (element) {\n\t\t\telement.style.top = `${popupParentElementRect.top * -1}px`;\n\t\t\telement.style.left = `${popupParentElementRect.left * -1}px`;\n\t\t}\n\t}\n\n\tprotected calculateAllPopupPosition( popupElement: HTMLElement, targetRect: DOMRect, parentRect: DOMRect, position: Position, gapX: number, gapY: number, userFallbacks : Position[] | null ): Position {\n\t\tconst spaceRightTarget = parentRect.right - targetRect.right;\n\t\tconst spaceLeftTarget  = targetRect.left - parentRect.left;\n\t\tconst spaceAboveTarget = targetRect.top - parentRect.top;\n\t\tconst spaceBelowTarget = parentRect.bottom - targetRect.bottom;\n\t\n\t\tconst spaceNeededHorizontal = popupElement.offsetWidth + gapX;\n\t\tconst spaceNeededVertical = popupElement.offsetHeight + gapY;\n\t\n\t\tconst isSpaceAvailableRight = spaceRightTarget > spaceNeededHorizontal;\n\t\tconst isSpaceAvailableLeft = spaceLeftTarget > spaceNeededHorizontal;\n\t\tconst isSpaceAvailableAbove = spaceAboveTarget > spaceNeededVertical;\n\t\tconst isSpaceAvailableBelow = spaceBelowTarget > spaceNeededVertical;\n\t\n\t\tconst fallbackMap: Record<Position, Position[]> = {\n\t\t\t[Position.bottomLeft] : [Position.topLeft, Position.right, Position.left],\n\t\t\t[Position.bottomRight]: [Position.topRight, Position.right, Position.left],\n\t\t\t[Position.topLeft]    : [Position.bottomLeft, Position.right, Position.left],\n\t\t\t[Position.topRight]   : [Position.bottomRight, Position.right, Position.left],\n\t\t\t[Position.leftTop]    : [Position.top, Position.right, Position.left],\n\t\t\t[Position.leftBottom] : [Position.leftTop, Position.rightBottom, Position.rightTop],\n\t\t\t[Position.rightTop]   : [Position.rightBottom, Position.leftTop, Position.leftBottom],\n\t\t\t[Position.rightBottom]: [Position.rightTop, Position.leftBottom, Position.leftTop],\n\t\t\t[Position.bottom]     : [Position.top, Position.left, Position.right],\n\t\t\t[Position.top]        : [Position.bottom, Position.right, Position.left],\n\t\t\t[Position.left]       : [Position.right, Position.top, Position.bottom],\n\t\t\t[Position.right]      : [Position.left, Position.top, Position.bottom],\n\t\t\t[Position.auto]       : [Position.bottom, Position.right, Position.left, Position.top],\n\t\t\t[Position.center]     : [Position.center],\n\t\t\t[Position.under]      : [],\n\t\t\t[Position.above]      : [],\n\t\t\t[Position.over]       : []\n\t\t};\n\t\n\t\tconst isPositionAvailable = (pos: Position): boolean => {\n\t\t\tswitch (pos) {\n\t\t\t\tcase Position.left:\n\t\t\t\t\treturn isSpaceAvailableLeft;\n\t\t\t\tcase Position.right:\n\t\t\t\t\treturn isSpaceAvailableRight;\n\t\t\t\tcase Position.top:\n\t\t\t\t\treturn isSpaceAvailableAbove;\n\t\t\t\tcase Position.bottom:\n\t\t\t\t\treturn isSpaceAvailableBelow;\n\t\t\t\tcase Position.topLeft:\n\t\t\t\t\treturn isSpaceAvailableAbove;\n\t\t\t\tcase Position.topRight:\n\t\t\t\t\treturn isSpaceAvailableAbove;\n\t\t\t\tcase Position.bottomLeft:\n\t\t\t\t\treturn isSpaceAvailableBelow;\n\t\t\t\tcase Position.bottomRight:\n\t\t\t\t\treturn isSpaceAvailableBelow;\n\t\t\t\tcase Position.leftTop:\n\t\t\t\t\treturn isSpaceAvailableLeft && isSpaceAvailableBelow;\n\t\t\t\tcase Position.leftBottom:\n\t\t\t\t\treturn isSpaceAvailableLeft && isSpaceAvailableAbove;\n\t\t\t\tcase Position.rightTop:\n\t\t\t\t\treturn isSpaceAvailableRight && isSpaceAvailableBelow;\n\t\t\t\tcase Position.rightBottom:\n\t\t\t\t\treturn isSpaceAvailableRight && isSpaceAvailableAbove;\n\t\t\t\tcase Position.center:\n\t\t\t\t\treturn true; // Center doesn't depend on space availability\n\t\t\t\tcase Position.auto:\n\t\t\t\t\treturn isSpaceAvailableRight || isSpaceAvailableLeft || isSpaceAvailableAbove || isSpaceAvailableBelow;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\t\n\t\tif (isPositionAvailable(position)) {\n\t\t\treturn position;\n\t\t}\n\t\n\t\tconst fallbacks = userFallbacks ? userFallbacks :fallbackMap[position] || [];\n\t\tfor (const fallback of fallbacks) {\n\t\t\tif (isPositionAvailable(fallback)) {\n\t\t\t\treturn fallback;\n\t\t\t}\n\t\t}\n\t\n\t\t// Default fallback to the best available position\n\t\tif (isSpaceAvailableRight) return Position.right;\n\t\tif (isSpaceAvailableLeft) return Position.left;\n\t\tif (isSpaceAvailableBelow) return Position.bottom;\n\t\tif (isSpaceAvailableAbove) return Position.top;\n\t\n\t\tconst spaces = {\n\t\t\t[Position.right]: spaceRightTarget,\n\t\t\t[Position.left]: spaceLeftTarget,\n\t\t\t[Position.top]: spaceAboveTarget,\n\t\t\t[Position.bottom]: spaceBelowTarget\n\t\t};\n\n\t\tconst directionWithMostSpace = Object.entries(spaces)\n\t\t\t.sort((a, b) => b[1] - a[1])[0][0]; \n\n\t\treturn directionWithMostSpace as Position;\n\t}\n\t\n\tprotected calculatePopupPosition( popupElement: HTMLElement, targetRect: DOMRect, parentRect: DOMRect, position: Position, gapY: number, ): Position {\n\t\tconst spaceBelowTarget = parentRect.bottom - targetRect.bottom;\n\t\tconst spaceAboveTarget = targetRect.top - parentRect.top;\n\t\tconst spaceNeeded = popupElement.offsetHeight + gapY;\n\t\tconst isSpaceAvailibleUnder = spaceBelowTarget > spaceNeeded;\n\t\tconst isSpaceAvailibleAbove =\n\t\t\tspaceAboveTarget > spaceNeeded ||\n\t\t\tspaceAboveTarget > spaceBelowTarget;\n\n\t\tif ( position === Position.top || position === Position.topLeft || position === Position.topRight ) {\n\t\t\tif (isSpaceAvailibleAbove) {\n\t\t\t\treturn Position.above;\n\t\t\t}\n\t\t}\n\t\tif (isSpaceAvailibleUnder) {\n\t\t\treturn Position.bottom;\n\t\t}\n\n\t\tif (isSpaceAvailibleAbove) {\n\t\t\treturn Position.top;\n\t\t}\n\n\t\treturn Position.bottom;\n\t}\n\n\tprotected calculateLeftOrRightPopupPosition( popupElement: HTMLElement, targetRect: DOMRect, parentRect: DOMRect, position: Position, gapX: number, ): Position {\n\t\tconst spaceRightTarget = parentRect.right - targetRect.right;\n\t\tconst spaceLeftTarget = targetRect.left - parentRect.left;\n\t\tconst spaceNeeded = popupElement.offsetWidth + gapX;\n\t\tconst isSpaceAvailibleRight = spaceRightTarget > spaceNeeded;\n\t\tconst isSpaceAvailibleLeft =\n\t\t\tspaceLeftTarget > spaceNeeded || spaceLeftTarget > spaceRightTarget;\n\n\t\tif (position === Position.left) {\n\t\t\tif (isSpaceAvailibleLeft) {\n\t\t\t\treturn Position.left;\n\t\t\t}\n\t\t}\n\n\t\tif (isSpaceAvailibleRight) {\n\t\t\treturn Position.right;\n\t\t}\n\n\t\tif (isSpaceAvailibleLeft) {\n\t\t\treturn Position.left;\n\t\t}\n\n\t\treturn Position.right;\n\t}\n\tprivate ensureXYBoundaries(\n\t\tpopUpElement: HTMLElement,\n\t\tposition: number,\n\t\tdirection: DIRECTION,\n\t\tpopupParentElement: HTMLElement = document.body,\n\t\tdocumentElement: Document = document,\n\t): number {\n\t\tconst isVertical = direction === DIRECTION.vertical;\n\t\tconst sizeProperty = isVertical ? 'clientHeight' : 'clientWidth';\n\t\tconst anchorProperty = isVertical ? 'top' : 'left';\n\t\tconst offsetProperty = isVertical ? 'offsetHeight' : 'offsetWidth';\n\t\tconst scrollPositionProperty = isVertical ? 'scrollTop' : 'scrollLeft';\n\n\t\tconst docElement = documentElement.documentElement;\n\t\tlet popupParent = popupParentElement;\n\t\tif(this.isPopUpElementIsStatic(popupParent)) {\n\t\t\tpopupParent.offsetParent && (popupParent = popupParent.offsetParent as HTMLElement);\n\t\t}\n\t\tconst parentRect = this.getParentRect(popupParentElement, documentElement);\n\t\tconst documentRect =\n\t\t\tdocumentElement.documentElement.getBoundingClientRect();\n\n\t\tconst isBody = popupParent === documentElement.body;\n\n\t\tconst offsetSize = popUpElement[offsetProperty];\n\t\tconst getSize = isVertical ? getAbsoluteHeight : getAbsoluteWidth;\n\n\t\tlet sizeOfParent = isBody\n\t\t\t? getSize(docElement) + docElement[scrollPositionProperty]\n\t\t\t: popupParent[sizeProperty];\n\n\t\tif (isBody) {\n\t\t\tsizeOfParent -= Math.abs(\n\t\t\t\tdocumentRect[anchorProperty] - parentRect[anchorProperty],\n\t\t\t);\n\t\t}\n\n\t\tconst max = sizeOfParent - offsetSize;\n\n\t\treturn Math.min(Math.max(position, 0), Math.abs(max));\n\t}\n\n\tprotected getParentRect(\n\t\tpopupParentElement: HTMLElement = document.body,\n\t\tdocumentElement: Document = document,\n\t): IRect {\n\t\tlet popupParent = popupParentElement;\n\n\t\tif (popupParent === documentElement.body) {\n\t\t\tpopupParent = documentElement.documentElement;\n\t\t} else if (this.isPopUpElementIsStatic(popupParent)) {\n\t\t\tpopupParent = popupParent.offsetParent as HTMLElement;\n\t\t}\n\n\t\treturn getElementRectWithOffset(popupParent);\n\t}\n\n\tprivate isPopUpElementIsStatic(element: HTMLElement): boolean {\n\t\treturn getComputedStyle(element).position === 'static';\n\t}\n\n\tprotected createPopupWrapper( element: HTMLElement, ariaLabel: string, popupClassName : string = '', rtl : boolean = false, popupParentElement: HTMLElement = document.body, ): HTMLElement {\n\t\tconst wrapperElement = document.createElement('div');\n        (popupClassName && popupClassName != '') && wrapperElement.classList.add(popupClassName);\n\t\twrapperElement.classList.add('ZG-popup');\n\t\telement.classList.add( rtl ? 'ZG-rtl' : 'ZG-ltr', 'ZG-popup-child', );\n\n\t\tif (!element.hasAttribute('role')) {\n\t\t\tsetAriaRole(element, 'dialog');\n\t\t}\n\n\t\tsetAriaLabel(element, ariaLabel);\n\n\t\twrapperElement.appendChild(element);\n\t\tpopupParentElement.appendChild(wrapperElement);\n\n\t\treturn wrapperElement;\n\t}\n\n\tprotected removePopupFromPopupList(element: HTMLElement): void {\n\t\tconst popupEntry = this.popupList.find((popup) => popup.element === element);\n\t\tif (popupEntry?.relativeObserver) {\n\t\t\tpopupEntry.relativeObserver.disconnect();\n\t\t}\n\t\tthis.setAlignedStyles(element, null);\n\t\tthis.popupList = this.popupList.filter(\n\t\t\t(popup) => popup.element !== element,\n\t\t);\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { SelectDropdown } from \"../../../../dropdown/dropdown\";\nimport { CorePopupHandler, PopupComponentPositionParams, Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { CalendarControllerHandlerType } from \"../model/calendar-controller.types\";\nimport {  TimeDropdownType, TimePickerDropdownType } from \"./time-dropdown-handler.types\";\nimport { IDropdownConfiguration, DropdownOptionElementModel } from \"../../../../dropdown/dropdown_configuration\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ICalendarDataManager } from \"../model/calendar-data-manager.types\";\n\n\n@Bean(CALENDAR_BEAN_NAME.CALENDAR_TIME_DROPDOWN_MANAGER)\nexport class TimePickerDropdown extends EventEmitter implements TimePickerDropdownType {\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_CONTROLLER_HANDLER) controllerHandler !: CalendarControllerHandlerType;\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: CorePopupHandler;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_MODEL) protected model!: ICalendarDataManager;\n\n\n    private dropdown: any;\n    private popupDestroy: any;\n    private dropdownElement !: HTMLElement \n    private type !: TimeDropdownType\n\n    createDropdown(element :  HTMLElement,type: TimeDropdownType, callback: CallableFunction, selectedValue : any,hourCycle?:12|24): void {\n        if(this.dropdown){\n            this.destroyDropdown()\n            if(this.type === type){\n                return\n            }\n        }\n        this.type = type\n        const configuration = this.createDropdownConfig(element,type, callback, selectedValue,hourCycle);\n        this.dropdown = new SelectDropdown(configuration);\n        this.dropdownElement = this.dropdown.api.getElement();\n        // const sourceElement = this.controllerHandler.getCalendarCtrl().getElement() as HTMLElement;\n        // const sourceElement = this.optionsHandler.getAppendTo();\n        const popupParent = this.optionsHandler.getAppendTo()\n\n        const positionParams: PopupComponentPositionParams = {\n            popUpElement    :  this.dropdownElement,\n            sourceElement   : element,\n            position        : Position.bottomLeft,\n            keepWithinBounds: true,\n            gapX            : 0,\n            gapY            : 0,\n            relativePosition : true\n        };\n\n        const positionCallback = this.popupHandler.positionPopupByComponent.bind(this.popupHandler, positionParams, popupParent);\n\n        const addPopup = this.popupHandler.addPopup({\n            childElement       :  this.dropdownElement,\n            anchorToElement    : element,\n            popupParentElement : popupParent,\n            positionCallback,\n            ariaLabel          : ''\n        });\n        this.popupDestroy = addPopup.hideFunction;\n\n\n        // const observer = new MutationObserver(() => {\n        //     if (document.body.contains(this.dropdownElement)) {\n        //         if(this.dropdown){\n        //             this.dropdown.api.focus()\n        //             this.dropdown.api.autoFocusSelectedOption();\n        //             observer.disconnect(); // Stop observing once focused\n        //         }\n               \n        //     }\n        // });\n    \n        // observer.observe(this.dropdownElement, { childList: true, subtree: true });\n\n\n        // dropdownElement.focus();\n\n        this.dropdown.api.focus();\n\n\n        this.registerEvent(this.dropdownElement)\n\n    }\n\n     createDropdownConfig(_element: HTMLElement,type: TimeDropdownType, callback: CallableFunction, selectedValue: any, hourCycle?:12|24) : IDropdownConfiguration{\n        const timeItems = this.getTimeItemsByType(type,hourCycle);\n        const value = `${selectedValue}`;\n\n        return {\n            options: this.createTimeOptions(timeItems,type),\n            selectedData: () => [value], // need to change\n            closeOnSelect: false,\n            onFocus : () => {\n                    // this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'})\n                    return {};\n            },\n            onBlur:()=>{\n                console.log('onBlur')\n                return {};\n            },\n            onAfterSelect: (param) => {\n                // element.focus();\n                callback(param.value.value);\n                this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'})\n                this.destroyDropdown();\n            },\n            autoFocusSelectedOption : true,\n            classname: \"dg-date-picker__time-picker-dropdown\",\n            onKeydown: (event: KeyboardEvent) => {\n                if (event.key === 'Escape' || event.key === 'Esc') {\n                  this.destroyDropdown();\n                }\n              }\n        };\n    }\n\n    createTimeOptions(timeItems:string[],type: string){\n        let option:DropdownOptionElementModel[];\n        option = []\n        for (let index = 0; index < timeItems.length; index++) {\n            const item = timeItems[index];\n            const isBefore = this.model.isBeforeTIme(Number(item),type);\n\n            const object ={\n                value : item,\n                id : type === 'meridian' ? `${item}` :`${Number(item)}`,\n                disabled : isBefore\n\n            }\n\n            option.push(object)\n\n         \n         \n            \n        }\n        return option\n\n    }\n\n\n\n     getTimeItemsByType(type: TimeDropdownType,hourCycle?:12|24): string[] {\n        let minuteInterval = this.optionsHandler.getMinuteInterval();\n        minuteInterval === 0 ? minuteInterval = 1 : minuteInterval;\n        switch (type) {\n            case 'hour':\n                if(hourCycle === 24){\n                    return Array.from({ length: 24 }, (_, i) => i.toString().padStart(2, '0')); // 00\n                }\n                return Array.from({ length: 12 }, (_, i) => (i+1).toString()); // 1-12\n            case 'minute':\n                return Array.from({ length: Math.ceil(60 / minuteInterval) }, (_, i) => \n                    (i * minuteInterval).toString().padStart(2, '0')\n                );\n            case 'meridian':\n                return ['AM', 'PM'];\n            default:\n                return [];\n        }\n    }\n\n    getSelectedIndex(selectedValue:number){\n        const minuteInterval = this.optionsHandler.getMinuteInterval();\n\n        if (minuteInterval) {\n            const roundedValue = Math.round(selectedValue / minuteInterval) * minuteInterval;\n            return roundedValue / minuteInterval;\n        }\n\n    return -1; \n\n    }\n\n    openDropdown(): void {\n        // Implementation for opening dropdown\n    }\n\n\n    registerEvent(dropdownElement : HTMLElement){\n        dropdownElement.addEventListener(\"focusout\",(event)=>{\n            if(this.dropdown){ \n\t\t\tconst relatedTarget     = event.relatedTarget as HTMLElement;\n            const datePickerElement = this.controllerHandler.getCalendarCtrl().getElement() as HTMLElement;\n\n                if(datePickerElement.contains(relatedTarget) ){\n                    this.destroyDropdown();\n                    return\n                }\n\n                if(!this.isElementWithinTimeDropDown(relatedTarget) && relatedTarget != this.optionsHandler.getInputElement()){\n                    this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'})\n                    this.dispatchEvent({type : 'BLUR_INPUT_ELEMENT'})\n\n                    this.dispatchEvent({type:'DESTROY_CALENDAR'})\n\n\n                }\n                \n               \n            }\n\n        })\n    }\n    private isElementWithinTimeDropDown(element: HTMLElement): boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            if (pointer === this.dropdownElement) {\n                return true;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n\n\n    getDropdown():any{\n        return this.dropdown\n    }\n\n\n\n    destroyDropdown(): void {\n        if(document.activeElement == this.dropdownElement ){\n            return\n        }\n\n        if (this.popupDestroy) {\n            this.popupDestroy();\n            this.popupDestroy = null;\n            this.dropdownElement == null\n            this.dropdown.api.destroy();\n            this.dropdown = null;\n\n        }\n    }\n}\n","import { BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { CorePopupHandler } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(BEAN_NAME.POPUP_HANDLER)\nexport class PopupHandler extends CorePopupHandler {\n   \n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../../utility/user-params.types\";\nimport { ComponentsRegistry, ComponentMeta } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { ICalendarConfiguration } from \"./calendar-configuration.types\";\nimport { CalendarOptionHandler } from \"./core/model/calendar-options-handler\";\nimport { ButtonRenderer } from \"./core/user-component/buttonRenderer\";\nimport { CalendarButtonComponent } from \"./core/calendar-button/calendar-button-view\";\nimport { CalendarComponentHandler } from \"./core/model/calendar-user-component-handler\";\nimport { CalendarWeekDayView } from \"./core/calendar-weeday/calendar-weekday-view\";\nimport { CalendarCalendarView } from \"./core/calendar-container/calendar-container-view\";\nimport {  CalendarDayContainerView } from \"./core/calendar-day-container/calendar-day-container-view\";\nimport { CalendarCellView } from \"./core/calendar-cell/calendar-cell-view\";\nimport { CalendarDataManager } from \"./core/model/calendar-data-manager\";\nimport { CalendarViewManager } from \"./core/model/calendar-view-manager\";\nimport { CalendarApi } from \"./core/model/calendar-api\";\nimport { CalendarControllerHandler } from \"./core/model/calendar-controller\";\nimport { CalendarNavBarView } from \"./core/calendar-nav-bar/calendar-nav-bar-view\";\nimport { TimeNavBarView } from \"./core/time-nav-bar/time-nav-bar-view\";\nimport { TimePickerDropdown } from \"./core/time-dropdown-hanlder/time-dropdown-handler\";\nimport { PopupHandler } from \"./core/model/popup-handler\";\n\nexport const enum PropertyName {\n\tBUTTON_RENDERER = 'buttonRenderer',\n}\n\nlet nextInstanceId = 1;\n\n\nexport class CalendarCoreComponent {\n\tinitialize( configuration: ICalendarConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\t\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n        // Model classes\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n\t\tthis.registerCoreComponent(context);\n        // Default user compoent registry\n\t\tthis.registerDefaultUserComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tlet beanList = [\n            ComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n\t\t\tEventHandler,\n\n            CalendarOptionHandler,\n\t\t\tCalendarComponentHandler,\n\t\t\tCalendarDataManager,\n\t\t\tCalendarViewManager,\n\t\t\tCalendarApi,\n\t\t\tCalendarControllerHandler,\n\t\t\tPopupHandler,\n\t\t\tTimePickerDropdown\n            \n\n\n            \n\t\t];\n\t\treturn new Set(beanList);\n\t}\n\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): {\n\t\tconfiguration: any;\n\t\tframeWorkOverrides: IFrameworkOverrides | null;\n\t\tglobalEventListener: Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t\tinstanceID : string;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n\t\t\t[PropertyName.BUTTON_RENDERER] : ButtonRenderer\n\t\t};\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n\t\t{\n\t\t\tcomponentName: 'calendar-nav',\n\t\t\tcomponentClass: CalendarNavBarView,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-previous-button',\n\t\t\tcomponentClass: CalendarButtonComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-next-button',\n\t\t\tcomponentClass: CalendarButtonComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-previous-year-button',\n\t\t\tcomponentClass: CalendarButtonComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-next-year-button',\n\t\t\tcomponentClass: CalendarButtonComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-weekday',\n\t\t\tcomponentClass: CalendarWeekDayView,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-body',\n\t\t\tcomponentClass: CalendarCalendarView,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-cells',\n\t\t\tcomponentClass: CalendarDayContainerView,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'calendar-cell',\n\t\t\tcomponentClass: CalendarCellView,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'time-picker',\n\t\t\tcomponentClass: TimeNavBarView,\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t\n        \n        \n    ];\n\n\treturn components;\n}\n\n","import { composeClasses } from \"@dg/utils\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { CalendarRootViewType } from \"./calendar-root-view.types\";\nimport { getCalendarRootUtilityClass } from \"./calendar-root-classes\";\nimport { AutoWired, BEAN_NAME} from \"@dg/corecomponent\";\nimport { CalendarOptionHandlerType } from \"../model/calendar-options-handler.types\";\nimport { CalendarControllerHandlerType } from \"../model/calendar-controller.types\";\nimport { CALENDAR_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { TimePickerDropdownType } from \"../time-dropdown-hanlder/time-dropdown-handler.types\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer: {\n\t\t\tslot: '',\n\t\t\tmodifiers: []\n\t\t}\n\t};\n\n\treturn composeClasses(slots, getCalendarRootUtilityClass);\n};\n\nexport class CalendarRootController extends AbstractController<CalendarRootViewType> {\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: CalendarOptionHandlerType;\n\t@AutoWired(CALENDAR_BEAN_NAME.CALENDAR_CONTROLLER_HANDLER) controllerHandler !: CalendarControllerHandlerType;\n    @AutoWired(CALENDAR_BEAN_NAME.CALENDAR_TIME_DROPDOWN_MANAGER) timeDropdownHanlder !: TimePickerDropdownType;\n\n\n\n\tinit() {\n\t\tthis.applyClassNames();\n\t\tthis.controllerHandler.registerCalendarCtrl(this);\n\t\tthis.addListener(this.eventHandler,'DESTROY_CALENDAR',this.destroy.bind(this));\n\t\tthis.addListener(this.eventHandler,'FOCUS_INPUT_ELEMENT',this.focusInputElement.bind(this));\n\t\tthis.addListener(this.eventHandler,'BLUR_INPUT_ELEMENT',this.blurInputElement.bind(this));\n\t\t\n\t\t// this.setRole();\n\t\tthis.setTabindex();\n\t\tthis.registerEvents()\n\t\t// this.setAriaAttributes()\n\t\tthis.setId()\n\n\t}\n\tprivate setId():void{\n\t\tconst element = this.component?.getElement() as HTMLElement;\n\t\tconst id = this.optionHandler.getId();\n\t\tid  && element.setAttribute(\"id\",id);\n\t}\n\tprivate applyClassNames() {\n\t\tconst classes = useUtilityClasses();\n\t\tthis.component?.addOrRemoveCssClass(classes.container);\n\t\tconst userClassName = this.optionHandler.getClassName()\n\t\tuserClassName && this.component?.getElement().classList.add(userClassName);\n\t}\n\n\tgetProperty(){\n\t\treturn{\n\t\t\tshowTimePicker : this.optionHandler.shouldShowTimePicker(),\n\t\t\ttype : this.optionHandler.getType()\n\t\t}\n\t}\n\n\t// private getOwnerState() {\n\t// \treturn {\n\t// \t\tdisabled: this.optionHandler.isDisabled(),\n\t// \t\treadonly: this.optionHandler.isReadOnly()\n\t// \t};\n\t// }\n\n\t// private setRole(){\n\t// \tconst element = this.component.getElement();\n\t// \tsetAriaRole(element,\"dialog\")\n\t// }\n\n\t// private setAriaAttributes(){\n\t// \tconst element = this.component.getElement();\n    //     setAriaLabelledBy(element,this.optionHandler.getAriaLabelledBy())\n\t// }\n\n\tprivate registerEvents() {\n\t\tconst element = this.component?.getElement() as HTMLElement;\n\n\t\telement.addEventListener('focusin',(_event: FocusEvent) => {\n\t\t\tthis.focusInputElement()\n\t\t})\n\t}\n\tprivate setTabindex(){\n\t\tconst element = this.component?.getElement() as HTMLElement;\n        element.setAttribute(\"tabindex\", \"0\");\n\t}\n\n    rerender():void{\n\t\tthis.component?.destroy();\n        this.component?.rerender();\n\n\t\tthis.init()\n\t\t// super.destroy();\n\n    }\n\n\tfocus():void{\n\t\tthis.component?.getElement().focus();\n\t}\n\n\n\tblur():void{\n\t\tthis.component?.getElement().blur();\n\t}\n\n\tgetElement() {\n\t\treturn this.component?.getElement();\n\t}\n\n\tdestroy(): void {\n\t\tthis.optionHandler.onDestroy();\n\t\tthis.timeDropdownHanlder.destroyDropdown();\n\t\tthis.component?.destroy();\n\t\tsuper.destroy();\n\t\t\n\t}\n\n\tfocusInputElement():void{\n\t\tconst inputElement = this.optionHandler.getInputElement();\n\t\tinputElement && inputElement.focus();\n\t}\n\n\tblurInputElement():void{\n\t\tconst inputElement = this.optionHandler.getInputElement();\n\t\tinputElement && inputElement.blur();\n\t}\n\n\t\n\n}\n","\n\n\n\n\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarRootController } from './calendar-root-contoller';\nimport { CalendarRootViewType } from './calendar-root-view.types';\n\n\nfunction RootTemplate(props?: any): HTMLElement {\n    const { showTimePicker, type } = props || {};\n    \n    if (type === 'timepicker') {\n        const wrapper = document.createElement('div');\n        const timePicker = document.createElement('time-picker');\n        wrapper.appendChild(timePicker);\n        return wrapper;\n    }\n    \n    const wrapper = document.createElement('div');\n    const calendarNav = document.createElement('calendar-nav');\n    const calendarBody = document.createElement('calendar-body');\n    wrapper.appendChild(calendarNav);\n    wrapper.appendChild(calendarBody);\n    \n    if (showTimePicker) {\n        const timePicker = document.createElement('time-picker');\n        wrapper.appendChild(timePicker);\n    }\n    \n    return wrapper;\n}\n\n\n\nexport class CalendarRootView extends Component {\n\tprivate appendTo: HTMLElement|null | undefined;\n\tprivate showTimePicker: boolean | undefined;\n\tprivate type: string | undefined;\n    \n\tconstructor(props:any) {\n\t\tsuper();\n\t\tthis.appendTo = props.appendTo;\n\t\tthis.showTimePicker = props.showTimePicker;\n\t\tthis.type = props.type\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tthis.renderTemplate();\n\n\t\t// const component:CalendarRootViewType  = this.getComponent();\n\n\t\t// const controller = this.createManagedBean(new CalendarRootController());\n\t\t// controller.setComponent(component);\n\n\n\n\t\t// this.appendElementIntoUserDom();\n\t}\n\n\tprivate getComponent(): CalendarRootViewType {\n\t\treturn {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n            rerender: () => this.rerender(),\n\t\t\tdestroy: () => this.destroy()\n\n\t\t}\n\t\t\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\t// this.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t});\n\t}\n\n\n\tprivate renderTemplate() {\n        this.setTemplate(RootTemplate({showTimePicker : this.showTimePicker,type : this.type}));\n\n\t\tconst component:CalendarRootViewType  = this.getComponent();\n\t\tconst controller = this.createManagedBean(new CalendarRootController());\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendTo = this.optionsHandler.getAppendTo();\n        this.appendElementIntoUserDom();\n\n\n    }\n\n    rerender() {\n        this.renderTemplate();\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui()?.remove();\n\t\t// super.destroy();\n\t}\n\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../../utility/user-params.types\";\nimport { ICalendarConfiguration } from \"./calendar-configuration.types\";\nimport { CalendarCoreComponent } from \"./calendar-core-components\";\nimport { CALENDAR_BEAN_NAME } from \"./constant/bean-name-constant\";\nimport { CalendarRootView } from \"./core/root/calendar-root-view\";\nimport { CalendarAPITypes } from \"./core/model/calendar-api.types\";\n\n\nexport class Calendar {\n\tpublic api: CalendarAPITypes | undefined;\n\tconstructor(configuration: ICalendarConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(CALENDAR_BEAN_NAME.CALENDAR_API) as CalendarAPITypes;\n\t\t\tcontext.createBean(new CalendarRootView({appendTo : configuration.appendTo,showTimePicker: configuration.showTimePicker , type : configuration.type}));\n\t\t};\n\t\tnew CalendarCoreComponent().initialize(configuration, params, createUI);\n\t}\n}","export const ChipBeanConstants = {\n    CHIP_CONFIGURATION: 'configuration',\n\tCHIP_API : 'chipApi',\n    CHIP_STATE : 'chipState',\n    CHIP_CONTROLLER_HANDLER : 'chipControllerHandler',\n    CHIP_TOOLTIP_HANDLER : \"CHIP_TOOLTIP_HANDLER\",\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\nexport function getChipUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('chip', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { AutoWired, BEAN_NAME, setAriaDisabled, setAriaLabel, setAriaReadOnly, setAriaRole, toggleAttribute } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { ChipComponentType } from \"./chip-root.types\";\nimport { ChipEventParams, ChipOptionsHandlerTypes } from \"../model/chip-options-handler.types\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipStateHandlerType } from \"../model/chip-state-handler.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getChipUtilityClass } from \"./chip-root-classes\";\nimport { OwnerStateType } from \"../chip-ownerstate.types\";\nimport { ChipControllerHandlerType } from \"../model/chip-controller-handler.types\";\nimport { ChipAPITypes } from \"../model/chip-api.types\";\nimport { ChipTooltipHandlerType } from \"../model/chip-tooltip-handler.types\";\n\nconst useUtilityClasses = (ownerState : OwnerStateType, _optionHandler : ChipOptionsHandlerTypes) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'root',\n            modifiers: [\n                ownerState.readOnly && 'readonly',\n                ownerState.disabled && 'disabled',\n                ownerState.selected && 'selected',\n                // optionHandler.getRadius() && `${optionHandler.getRadius()}`,\n                // optionHandler.getVariant() && `${optionHandler.getVariant()}`,\n                // optionHandler.getColor() && `${optionHandler.getColor()}`,\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots, getChipUtilityClass);\n};\nexport class ChipRootController extends AbstractController<ChipComponentType> {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: ChipOptionsHandlerTypes;\n    @AutoWired(ChipBeanConstants.CHIP_STATE) private chipStateHandler !: ChipStateHandlerType;\n    @AutoWired(ChipBeanConstants.CHIP_CONTROLLER_HANDLER) private controllerHandler !: ChipControllerHandlerType;\n    @AutoWired(ChipBeanConstants.CHIP_API) private api !: ChipAPITypes\n    @AutoWired(ChipBeanConstants.CHIP_TOOLTIP_HANDLER) chipTooltipHandler !: ChipTooltipHandlerType;\n\n    init(): void {\n        this.registerEvent();\n        this.refresh();\n        this.controllerHandler.registerCtrl(this);\n    }\n    registerEvent(){\n\n        \n        this.addListener(this.eventHandler,\"Label_Property_Changed\", this.updateLabel.bind(this));\n        this.addListener(this.eventHandler,\"ChipColor_Property_Changed\", this.updateColor.bind(this));\n        this.addListener(this.eventHandler,\"Tooltip_Property_Changed\",this.registerToolTipListener.bind(this));\n\n       if(this.optionsHandler.shouldShowTooltip()){\n            this.registerToolTipListener();\n        }\n\n        if(this.optionsHandler.isReadOnly()){\n            return;\n        }\n        const element = this.component?.getElement();\n        element && this.addListener(element, \"click\", (event : PointerEvent) => this.onClick(event));\n        this.addListener(this.eventHandler, 'EVENT_STATE_UPDATED', this.refresh.bind(this));\n        element && this.addListener(element, 'keydown', (event : KeyboardEvent) => this.handleKeyEvent(event))\n    }\n\n    registerToolTipListener(){\n        // if(this.optionsHandler.shouldShowTooltip()){\n        //     this.component?.getElement().addEventListener(\"mouseover\",this.enableTooltip.bind(this));\n        //     this.component?.getElement().addEventListener(\"mouseout\",this.disableTooltip.bind(this));\n        // }\n        // else{\n        //     this.component?.getElement().removeEventListener(\"mouseover\",this.enableTooltip.bind(this));\n        //     this.component?.getElement().removeEventListener(\"mouseout\",this.disableTooltip.bind(this));\n        // }\n        this.disableTooltip();\n        this.enableTooltip();\n\n    }\n\n    \n\n    private handleKeyEvent(event : KeyboardEvent): void {\n        const disabled = this.optionsHandler.isDisabled();\n        if (disabled) return;\n        switch (event.key) {\n            case 'Enter': \n            case ' '    : \n                this.onClick(event);\n                break;\n            case 'Backspace':\n                this.onRemove(event);\n                \n        }\n    }\n\n    private refresh() : void { \n        this.applyClasses();\n        this.setAccessibility();\n        this.setHrefAttributes();\n    }\n\n\n    private setHrefAttributes() : void {\n        const {href, hrefTarget} = this.getProperty();\n        const element = this.component?.getElement();\n        element && href && toggleAttribute(element, 'href', href);\n        element && href && toggleAttribute(element, 'target', hrefTarget);\n    }\n\n\n    private setAccessibility() : void { \n        const element    = this.component?.getElement();\n        const ownerState = this.getOwnerState();\n\n        const ariaLabel = this.optionsHandler.getAriaLabel();\n        const tabindex  = this.optionsHandler.getTabIndex();\n        const role      = this.optionsHandler.getRole();\n\n        if(element){\n            toggleAttribute(element, \"tabindex\", ownerState.readOnly ? '-1' : `${tabindex}`)\n            setAriaRole(element, 'option');\n            if(ownerState.readOnly){\n                setAriaRole(element, \"status\");\n            }\n            else{\n                setAriaRole(element, role);\n            }\n            setAriaDisabled(element, ownerState.disabled);\n            setAriaReadOnly(element, ownerState.readOnly);\n            ariaLabel && setAriaLabel(element, ariaLabel);\n        }\n\n    }\n\n    private applyClasses() {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState, this.optionsHandler);\n        this.component?.addOrRemoveCssClassName(classes.root);\n        this.optionsHandler.getWrapperClassname() && this.component?.getElement().classList.add(this.optionsHandler.getWrapperClassname());\n        this.optionsHandler.getVariant()  && this.component?.getElement().classList.add(\"dg-chip--\" + this.optionsHandler.getVariant())\n        this.optionsHandler.getChipStatus()  && this.component?.getElement().classList.add(\"dg-chip--\" + this.optionsHandler.getChipStatus())\n        \n        if(this.optionsHandler.getVariant() === \"filled\"){\n            const element = this.component?.getElement();\n            element && ( element.style.backgroundColor = this.optionsHandler.getChipColor()!);\n        }\n    }\n\n    private getOwnerState() : OwnerStateType {\n        const selected = this.chipStateHandler.isSelected();\n        const disabled = this.optionsHandler.isDisabled();\n        const readOnly = this.optionsHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readOnly\n        }\n    }\n    onClick(event : PointerEvent | KeyboardEvent): void {\n        this.chipStateHandler.toggleSelection();\n        const params = this.createClickEventParams(event);\n        this.optionsHandler.onClick?.(params);\n    }\n\n\n    onRemove(event :KeyboardEvent): void {\n        event.stopPropagation();\n        const params = this.createClickEventParams(event);\n        this.optionsHandler.onRemove(params);\n    }\n\n\n    destroy(): void {\n        this.disableTooltip();\n        this.component?.destroy();\n        super.destroy();\n        // this.component = null;    \n    }\n\n    private createClickEventParams(event : PointerEvent | KeyboardEvent) : ChipEventParams {\n        const ownerState = this.getOwnerState();\n        return {\n            event,\n            selected : ownerState.selected,\n            key : this.optionsHandler.getLabel(),\n            label : this.optionsHandler.getLabel(),\n            api : this.api,\n        }\n    }\n\n    getProperty() {\n        return {\n            href : this.optionsHandler.getHref(),\n            hrefTarget : this.optionsHandler.getHrefTarget(),\n            label : this.optionsHandler.getLabel(),\n            wrapperClassname : this.optionsHandler.getWrapperClassname(),\n            getThumbnailRenderer:()=>this.optionsHandler.getThumbnailRenderer(),\n            getThumbnailIconId:()=>this.optionsHandler.getThumbnailIconId(),\n            getUserThumbnailRendererParams:()=>this.optionsHandler.getUserThumbnailRendererParams(),\n            getRemoveIconId:()=>this.optionsHandler.getRemoveIconId(),\n            getRemoveIconRenderer:()=>this.optionsHandler.getRemoveIconRenderer(),\n            getUserRemoveIconRendererParams:()=>this.optionsHandler.getUserRemoveIconRendererParams(),\n            isLabelasDOM : this.optionsHandler.isLabelasDOM(),\n            \n        }\n    }\n\n    getElement():HTMLElement | undefined{\n        return this.component?.getElement();\n    }\n\n    updateBgColor(color:string){\n        if(this.optionsHandler.getVariant() === \"filled\"){\n            const element = this.component?.getElement();\n            element && ( element.style.backgroundColor = color);\n        }\n    }\n\n    enableTooltip(): void {\n\t\tconst shouldShowTooltip =  this.optionsHandler.shouldShowTooltip()\n\t\tif(!shouldShowTooltip){\n\t\t\treturn;\n\t\t}\n\t\tthis.chipTooltipHandler.createToolTip(this.component?.getChipLabel() as HTMLElement);\n\t\t// this.chipTooltipHandler.openToolTip();\n\t}\n    disableTooltip(): void {\n        this.chipTooltipHandler.destroyTooltip();\n    }\n\n\n    updateColor():void{\n        const element =  this.component?.getElement();\n        const color = this.optionsHandler.getChipColor();\n        if(element && color ){\n            element.style.backgroundColor =  color;\n        }\n        // element && this.optionsHandler.getChipColor() && ( element.style.backgroundColor = this.optionsHandler.getChipColor());\n    }\n\n    updateLabel():void{\n        const element =  this.component?.getChipLabel();\n        element && ( element.textContent = this.optionsHandler.getLabel());\n    }\n     \n\n\n}","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { ChipRootController } from \"./chip-root-controller\";\nimport { ChipComponentType } from \"./chip-root.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getChipUtilityClass } from \"./chip-root-classes\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tlabelWrapper    : {\n            slot     : 'label-wrapper',\n            modifiers: []\n        },\n\t};\n\n\treturn composeClasses(slots, getChipUtilityClass);\n};\n\n\nconst rootTemplate = (props: any): HTMLElement => {\n    const { href, label } = props;\n    const labelValue = label;\n    const classes = useUtilityClasses();\n  \n    const wrapper = document.createElement(href ? 'a' : 'div');\n    // Optionally, if you want to apply the wrapper classname:\n    // wrapper.className = props.wrapperClassname;\n  \n    // Prefix: chip-thumbnail\n    if (\n      props.getThumbnailRenderer() ||\n      props.getThumbnailIconId() ||\n      props.getUserThumbnailRendererParams()\n    ) {\n      const prefixElem = document.createElement('div');\n      prefixElem.className = \"dg-chip__prefix-elem\";\n      const chipThumbnail = document.createElement('chip-thumbnail');\n      prefixElem.appendChild(chipThumbnail);\n      wrapper.appendChild(prefixElem);\n    }\n  \n    // Label wrapper with chip label\n    const labelWrapper = document.createElement('div');\n    labelWrapper.className = classes.labelWrapper;\n    labelWrapper.setAttribute('ref', 'chip-label');\n  \n    const labelSpan = document.createElement('span');\n    labelSpan.className = \"dg-chip__label\";\n    if (props.isLabelasDOM) {\n      // Insert HTML safely without using innerHTML\n      const fragment = document.createRange().createContextualFragment(labelValue);\n      labelSpan.appendChild(fragment);\n    } else {\n      labelSpan.textContent = labelValue;\n    }\n    labelWrapper.appendChild(labelSpan);\n    wrapper.appendChild(labelWrapper);\n  \n    // Suffix: chip-remove\n    if (\n      props.getRemoveIconId() ||\n      props.getRemoveIconRenderer() ||\n      props.getUserRemoveIconRendererParams()\n    ) {\n      const suffixElem = document.createElement('div');\n      suffixElem.className = \"dg-chip__suffix-elem\";\n      const chipRemove = document.createElement('chip-remove');\n      suffixElem.appendChild(chipRemove);\n      wrapper.appendChild(suffixElem);\n    }\n  \n    return wrapper;\n  };\n  \n\n\nexport class ChipRootView extends Component {\n\n    private appendTo : HTMLElement | null | undefined;\n    @queryAssignedNodes('chip-label') chipLabel !: HTMLElement;\n\n    constructor(appendTo : HTMLElement | null | undefined) {\n        super();\n        this.appendTo = appendTo;\n    } \n\n    @PostConstruct()\n    init() : void {\n\n        const component : ChipComponentType = {\n            addOrRemoveCssClassName : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement : () => this.getGui(),\n            destroy : () => this.destroy(),\n            getChipLabel:()=>this.getChipLabel(),\n        }\n\n        const controller = this.createBean(new ChipRootController());\n        \n        const props = controller.getProperty();\n\n        this.setTemplate(rootTemplate(props));\n\n        controller.setComponent(component);\n\n        this.appendTo && this.appendElementIntoUserDom();\n    }\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n            if (this.appendTo && eGui.parentNode === this.appendTo) {\n                this.appendTo.removeChild(eGui);\n            }\n\t\t\tthis.appendTo = null;\n\t\t});\n\t}\n\n    destroy(): void {\n        super.destroy();\n        this.getGui().remove();  \n    }\n\n    getChipLabel():HTMLElement{\n        return this.chipLabel;\n    }\n}","import { BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { ChipUserComponentHandlerType } from \"./chip-user-component-handler.types\";\nimport { ComponentItemType, IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AbstractUserComponentHandler } from \"../../../../utility/abstract-user-component-handler\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\n\nexport const enum PropertyName {\n\tTHUMBNAIL_CHIP_RENDERER = 'thumbnailChipRenderer',\n    REMOVE_CHIP_RENDERER = 'removeChipRenderer'\n}\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class ChipUserComponentHandler extends AbstractUserComponentHandler implements ChipUserComponentHandlerType {\n    getThumbnailChipRendererDetails<T, P>(rendererWrapper: ComponentItemType<T>, params: P): IComponentDetails | undefined {\n       return this.getComponentDetails(rendererWrapper, PropertyName.THUMBNAIL_CHIP_RENDERER, params, PropertyName.THUMBNAIL_CHIP_RENDERER);\n    }\n    getRemoveChipRendererDetails<T, P>(rendererWrapper: ComponentItemType<T>, params: P): IComponentDetails | undefined{\n        return this.getComponentDetails(rendererWrapper, PropertyName.REMOVE_CHIP_RENDERER, params, PropertyName.REMOVE_CHIP_RENDERER);\n    }\n\n    protected newInstance<T, P>( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: string, params?: P, ) {\n        let instance: T;\n        const frameworkComponentWrapper = this.getBeanInstance( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n        const componentMetaDataProvider = this.getBeanInstance( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n        if (!componentFrameWork) {\n            instance = new component();\n        } else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n            instance = frameworkComponentWrapper.wrap(\n                component,\n                componentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n                componentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n            );\n        }\n\n        const initialise = this.initComponent(instance, params);\n        if (initialise === undefined) {\n            return instance;\n        }\n        \n        return instance;\n    }\n\n    getComponent<T>(item: ComponentItemType<T>, propertyName: string): T {\n        switch(propertyName) {\n            case PropertyName.REMOVE_CHIP_RENDERER:\n                return item.getRenderer();\n            case PropertyName.THUMBNAIL_CHIP_RENDERER:\n                return item.getRenderer();\n            default :  throw new Error(`Unknown propertyName: ${propertyName}`); \n        }\n    }\n\n    getUserParams<T, P>(item: ComponentItemType<T>, propertyName: string, params: any) {\n        switch(propertyName) {\n            case PropertyName.THUMBNAIL_CHIP_RENDERER:\n                return  this.getUserRendererParams<T, P>(item, params);\n            case PropertyName.REMOVE_CHIP_RENDERER:\n                return this.getUserRendererParams<T,P>(item, params);\n        }\n    }\n    \n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { IChipConfiguration } from \"../../../chip-configuration.types\";\nimport { ChipAPITypes } from \"./chip-api.types\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipOptionsHandlerTypes } from \"./chip-options-handler.types\";\nimport { ChipControllerHandlerType } from \"./chip-controller-handler.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\n@Bean(ChipBeanConstants.CHIP_API)\nexport class ChipAPI extends EventEmitter implements ChipAPITypes {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionHandler !: ChipOptionsHandlerTypes\n    @AutoWired(ChipBeanConstants.CHIP_CONTROLLER_HANDLER) controllerHandler!: ChipControllerHandlerType;\n    @AutoWired('configuration') configuration!: IChipConfiguration;\n\n    updateConfiguration(configuration: IChipConfiguration): void {\n        this.optionHandler.updateConfiguration(configuration);\n    }\n\n    destroyComponent() : void {\n        const controller = this.controllerHandler.getChipCtrl();\n        if(controller) {\n            controller.destroy();\n        }\n        this.context.destroy();\n    }\n\n    getElement(): HTMLElement | undefined {\n        return this.controllerHandler.getChipCtrl().getElement();\n    }\n    \n    updateBgColor(color : string) :void{\n        this.controllerHandler.getChipCtrl().updateBgColor(color);\n    }\n\n    updateProperties(properties : IChipConfiguration) : void {\n\n        Object.entries(properties).forEach(([key, value]) => {\n            if (value !== undefined) {\n                // Update the configuration\n                (this.configuration as Record<string, unknown>)[key] = value;\n    \n                // Dispatch different events based on the property being updated\n                switch (key) {\n                    \n                    case \"tooltip\":\n                        this.dispatchEvent({\n                            type: \"Tooltip_Property_Changed\",\n                            options: { [key]: value },\n                        });\n                        break;\n                    \n                    case \"label\" : \n                        this.dispatchEvent({\n                            type: \"Label_Property_Changed\",\n                            options: { [key]: value },\n                        });\n                        break;\n\n                    case \"chipColor\" : \n                        this.dispatchEvent({\n                            type: \"ChipColor_Property_Changed\",\n                            options: { [key]: value },\n                        });\n                        break;\n\n                    // Add additional cases for other properties as needed\n                    // default:\n                    //     this.dispatchEvent({\n                    //         type: \"PROPERTY_CHANGED\",\n                    //         options: { [key]: value },\n                    //     });\n                    //     break;\n            }\n            }\n        });\n    }\n\n    getFormattedValue() : any {\n        return this.optionHandler.getLabel() ?? '';\n    }\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { rendererTypes } from \"../../renderer.types\";\nimport { ChipEventParams, ChipOptionsHandlerTypes } from \"./chip-options-handler.types\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipBorderStyle, ChipStatusType, ChipTargetType, IChipConfiguration, chipRadiustype, chipVariantType } from \"../../../chip-configuration.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class ChipOptionHandler extends EventEmitter implements ChipOptionsHandlerTypes{\n\n    @AutoWired(ChipBeanConstants.CHIP_CONFIGURATION) configuration !: IChipConfiguration;\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n    isReadOnly(): boolean {\n        return this.configuration.readOnly ?? false;\n    }\n    getLabel(): string {\n        return this.configuration.label ?? \"\";\n    }\n    getAriaLabel(): string {\n        return this.configuration.ariaLabel ?? '';\n    }\n    getThumbnailRenderer(): rendererTypes {\n        return this.configuration.thumbnailRenderer\n    }\n    getUserThumbnailRendererParams() {\n        return this.configuration.userThumbnailRendererParams;\n    }\n    getThumbnailIconId(): string |null {\n        return this.configuration.thumbnailIconId ?? null;\n    }\n    getRemoveIconRenderer(): rendererTypes {\n        return this.configuration.removeIconRenderer;\n    }\n    getUserRemoveIconRendererParams():any {\n        return this.configuration.userRemoveIconRendererParams;\n    }\n    getRemoveIconId(): string |null {\n        return this.configuration.removeIconId ?? null;\n    }\n    onFocus(event: FocusEvent): void  {\n        this.configuration.onFocus?.(event);\n    }\n    onBlur(event: FocusEvent): void {\n        this.configuration.onBlur?.(event);\n    }\n    onClick(event: ChipEventParams): void  {\n         this.configuration.onClick?.(event);\n    }\n    onRemove(params: ChipEventParams): void {\n         this.configuration.onRemove?.(params);\n    }\n    getTemplate(): CallableFunction | null{\n        return this.configuration.template ?? null;\n    }\n    getAppendTo(): HTMLElement | null {\n        return this.configuration.appendTo ?? null;\n    }\n    getAriaLabelledby(): string {\n        return this.configuration.ariaLabelledby ?? '';\n    }\n    isSkipFocusWhenDisabled(): boolean {\n        return this.configuration.skipFocusWhenDisabled ?? false;\n    }\n    getRadius(): chipRadiustype {\n        return this.configuration.radius ?? 'large'\n    }\n    getVariant(): chipVariantType {\n       return this.configuration.variant ?? \"filled\"; \n    }\n    getBorderStyle(): ChipBorderStyle {\n        return this.configuration.borderStyle ?? 'solid'\n    }\n    isRequired(): boolean {\n        return false;\n    }\n\n    updateConfiguration(config: IChipConfiguration): void {\n        this.configuration = config;\n\n        this.dispatchEvent({ type : 'PROPERTY_CHANGED'})\n    }\n\n    getSelection() : boolean { \n        return this.configuration.selected ?? false;\n    }\n\n    getTabIndex(): number {\n        return this.configuration.tabindex ?? 0;\n    }\n\n    getRole(): string {\n        return this.configuration.role ?? 'button';\n    }\n\n    getHref(): string {\n        return this.configuration.href ?? '';\n    }\n\n    getHrefTarget(): ChipTargetType {\n        return this.configuration.hrefTarget ?? \"_blank\";\n    }\n\n    getChipStatus() : ChipStatusType {\n        return this.configuration.chipStatus ?? 'default';\n    }\n\n    getChipColor(): string | null {\n        return this.configuration.chipColor ?? null;\n    }\n\n    getWrapperClassname(): string {\n        return this.configuration.wrapperClassname ?? \"\";\n    }\n\n    shouldShowTooltip(): boolean {\n        return this.configuration.tooltip?? false;\n    }\n\n    getTooltipMessage(): string  {\n        return this.configuration.tooltipMessage && this.configuration.tooltipMessage.trim() !== \"\" \n        ? this.configuration.tooltipMessage \n        : this.configuration.label ?? \"\";\n    }\n\n    getTooltipRegex(): RegExp | undefined {\n        return this.configuration.tooltipRegex;\n    }\n\n    getTooltipPosition(): string  {\n        return this.configuration.tooltipPosition ?? Position.bottomRight;\n    }\n\n    getTooltipAppendto(): HTMLElement | undefined {\n        return this.configuration.tooltipAppendto ?? document.body;\n    }\n\n    getTooltipHideDelay(): number  {\n        return this.configuration.tooltipHideDelay ?? 10000;\n    }\n\n    isLabelasDOM():boolean{\n        return this.configuration.labelasDom ?? false;\n    }\n\n}","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { ChipOptionsHandlerTypes } from \"../model/chip-options-handler.types\";\nimport { ChipThumbnailComponentType } from \"./chip-thumbnail.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getChipUtilityClass } from \"../chip-root/chip-root-classes\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipStateHandlerType } from \"../model/chip-state-handler.types\";\nimport { ChipRenderedTypes } from \"../user-component/chip-renderer-types\";\nimport { ComponentItemType } from \"../../../../utility/component-detail.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\nimport { ChipAPITypes } from \"../model/chip-api.types\";\nimport { ChipUserComponentHandlerType } from \"../model/chip-user-component-handler.types\";\nimport { OwnerStateType } from \"../chip-ownerstate.types\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'thumbnail',\n            modifiers: []\n        }\n\t};\n\n\treturn composeClasses(slots, getChipUtilityClass);\n};\n\nexport class ChipThumbnailController extends AbstractController<ChipThumbnailComponentType> {\n    \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: ChipOptionsHandlerTypes;\n    @AutoWired(ChipBeanConstants.CHIP_STATE) private chipStateHandler !: ChipStateHandlerType;\n    @AutoWired(ChipBeanConstants.CHIP_API) private chipAPI !: ChipAPITypes;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) private userComponentHandler !: ChipUserComponentHandlerType;\n\n    init(): void {\n        this.applyClasses();\n        this.registerEvents();\n        this.setRendererDetails();\n    }   \n\n    private registerEvents() : void {\n        this.addListener(this.eventHandler, \"EVENT_STATE_UPDATED\", this.refresh.bind(this))\n    }\n\n    private refresh() : void { \n        // console.log(\"updateUi\");\n    }\n\n    private applyClasses() : void { \n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCSSClass(classes.root);\n    }\n\n    private getOwnerState() : OwnerStateType {\n        const selected = this.chipStateHandler.isSelected();\n        const disabled = this.optionsHandler.isDisabled();\n        const readOnly = this.optionsHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readOnly\n        }\n    }\n\n    private setRendererDetails() : void {\n        const wrapper = this.createWrapper<ICustomRenderer>();\n        const params = this.createRendererParams();\n\n        const renderDetails = this.userComponentHandler.getThumbnailChipRendererDetails(wrapper, params);\n        renderDetails &&  this.component?.setRendererDetails(renderDetails);\n    }\n\n    private createWrapper<T>() : ComponentItemType<T> {\n        return {\n            getRenderer : () => this.optionsHandler.getThumbnailRenderer() as T,\n            getRendererParams : () => this.optionsHandler.getUserThumbnailRendererParams()\n        }\n    }\n\n    private createRendererParams() : ChipRenderedTypes {\n        const ownerState = this.getOwnerState();\n        return {\n            selected : ownerState.selected,\n            readonly : ownerState.readOnly,\n            disabled : ownerState.disabled,\n            api : this.chipAPI,\n            iconID : this.optionsHandler.getThumbnailIconId() ?? '',\n            parentElement : this.component?.getElement() ?? null,\n        }\n    }\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { ChipThumbnailController } from \"./chip-thumbnail-controller\";\nimport { ChipThumbnailComponentType } from \"./chip-thumbnail.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nconst thumbnailTemplate = () => {\n    const thumbnailWrapper = document.createElement(\"div\");\n    thumbnailWrapper.className = \"chip-thumbnail-wrapper\";\n    return thumbnailWrapper;\n}\nexport class ChipThumbNailView extends Component {\n    \n    private renderer !: ICustomRenderer;\n    private rendererElement !: HTMLElement | null;\n\n    @PostConstruct()\n    init() : void { \n        const component : ChipThumbnailComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails: (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n        }\n        this.setTemplate(thumbnailTemplate());\n        const controller = this.createManagedBean(new ChipThumbnailController());\n        controller.setComponent(component);\n    }\n\n    private setRendererDetails(renderDetails : IComponentDetails){\n        if(renderDetails){\n            this.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = renderDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcallback(componentInstance);\n\t\t\t}\n        }\n    }\n\n    private afterRenderer(renderer: ICustomRenderer) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n    private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private addOrRemoveCSSClass(className : string){\n        const element = this.getGui();\n        element.className = className;\n    }    \n}","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { ChipRemoveType } from \"./chip-remove.types\";\nimport { ChipOptionsHandlerTypes } from \"../model/chip-options-handler.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getChipUtilityClass } from \"../chip-root/chip-root-classes\";\nimport { ChipRenderedTypes } from \"../user-component/chip-renderer-types\";\nimport { OwnerStateType } from \"../chip-ownerstate.types\";\nimport { ChipStateHandlerType } from \"../model/chip-state-handler.types\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipAPITypes } from \"../model/chip-api.types\";\nimport { ComponentItemType } from \"../../../../utility/component-detail.types\";\nimport { ChipUserComponentHandlerType } from \"../model/chip-user-component-handler.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\nimport { ChipControllerHandlerType } from \"../model/chip-controller-handler.types\";\n\nconst useUtilityClasses = () => {\n    const slots = {\n        root : {\n            slot : 'remove-icon',\n            modifiers : []\n        }\n    }    \n    return composeClasses(slots, getChipUtilityClass);\n}\n\nexport class ChipRemoveController extends AbstractController<ChipRemoveType>{\n    \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: ChipOptionsHandlerTypes;\n    @AutoWired(ChipBeanConstants.CHIP_STATE) private chipStateHandler !: ChipStateHandlerType;\n    @AutoWired(ChipBeanConstants.CHIP_API) private chipAPI !: ChipAPITypes;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) private userComponentHandler !: ChipUserComponentHandlerType;\n    @AutoWired(ChipBeanConstants.CHIP_CONTROLLER_HANDLER) controllerHandler!: ChipControllerHandlerType;\n\n    init(): void {\n        this.registerEvents();\n        this.applyClasses();\n        this.setRendererDetails();\n    }\n\n    registerEvents(){\n        const element = this.component?.getElement();\n        element && this.addListener(element, \"click\", (event : PointerEvent) => this.onClick(event));\n    }\n\n    private applyClasses(){\n        const clases = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(clases.root)\n    }\n\n    onClick(event : PointerEvent){\n        event.stopPropagation();\n        \n        const ownerState = this.getOwnerState();\n        this.optionsHandler.onRemove({\n            label : this.optionsHandler.getLabel(),\n            key : this.optionsHandler.getLabel(),\n            event,\n            selected : ownerState.selected,\n            api : this.chipAPI\n        });\n\n        this.controllerHandler.getChipCtrl()?.disableTooltip();\n        \n    }\n\n    private getOwnerState() : OwnerStateType {\n        const selected = this.chipStateHandler.isSelected();\n        const disabled = this.optionsHandler.isDisabled();\n        const readOnly = this.optionsHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readOnly\n        }\n    }\n\n    private setRendererDetails() : void {\n        const wrapper = this.createWrapper<ICustomRenderer>();\n        const params = this.createRendererParams();\n\n        const renderDetails = this.userComponentHandler.getRemoveChipRendererDetails(wrapper, params);\n        renderDetails && this.component?.setRendererDetails(renderDetails);\n    }\n\n    private createWrapper<T>() : ComponentItemType<T> {\n        return {\n            getRenderer : () => this.optionsHandler.getRemoveIconRenderer() as T,\n            getRendererParams : () => this.optionsHandler.getUserRemoveIconRendererParams()\n        }\n    }\n\n    private createRendererParams() : ChipRenderedTypes {\n        const ownerState = this.getOwnerState();\n        return {\n            selected : ownerState.selected,\n            readonly : ownerState.readOnly,\n            disabled : ownerState.disabled,\n            api : this.chipAPI,\n            iconID : this.optionsHandler.getRemoveIconId() ?? \"\",\n            parentElement : this.component?.getElement() ?? null,\n        }\n    } \n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { ChipRemoveController } from \"./chip-remove-controller\";\nimport { ChipRemoveType } from \"./chip-remove.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nfunction chipRemoveTemplate(){\n    // const div = document.createElement(\"span\");\n    // div.innerHTML = `<span></span>`\n    // return div.firstChild as HTMLElement;\n    return document.createElement(\"span\");\n}\n\nexport class ChipRemoveView extends Component {\n    private renderer !: ICustomRenderer;\n    private rendererElement !: HTMLElement | null;\n\n    @PostConstruct()\n    init() {\n       \n        const component : ChipRemoveType = {\n            setRendererDetails: (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getElement : () => this.getGui(),\n            addOrRemoveCssClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n        const controller = this.createManagedBean(new ChipRemoveController());\n        this.setTemplate(chipRemoveTemplate());\n        controller.setComponent(component);\n    }\n\n    private setRendererDetails(renderDetails : IComponentDetails){\n        if(renderDetails){\n            this.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = renderDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcallback(componentInstance)\n\t\t\t}\n        }\n    }\n\n    private afterRenderer(renderer: ICustomRenderer) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n    private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private addOrRemoveCSSClass(className : string){\n        const element = this.getGui();\n        element.className = className;\n    }\n}","import { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipOptionsHandlerTypes } from \"./chip-options-handler.types\";\nimport { ChipStateHandlerType } from \"./chip-state-handler.types\";\n\n@Bean(ChipBeanConstants.CHIP_STATE)\nexport class ChipStateHandler extends EventEmitter implements ChipStateHandlerType { \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) chipOptionHandler !: ChipOptionsHandlerTypes\n    private selected : boolean = false;\n\n    @PostConstruct()\n    init() {\n        this.selected = this.chipOptionHandler.getSelection();\n    }\n\n    setSelection(selected: boolean) : void {\n        this.selected = selected;\n        this.dispatchEvent({ type : \"EVENT_STATE_UPDATED\"})\n    }\n\n    isSelected() : boolean {\n        return this.selected;\n    }\n\n    toggleSelection() : void { \n        this.setSelection(!this.selected);\n    }\n}","import { composeClasses } from \"@dg/utils\";\n// import { createSVGTemplate, CreateSVGClassType } from \"../../../../utility/create-svg-template\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\nimport { ChipRenderedTypes } from \"./chip-renderer-types\";\nimport { getChipUtilityClass } from \"../chip-root/chip-root-classes\";\nimport { getSvgIcon } from \"../../../../utility/create-svg-template\";\n\nconst useUtilityClasses = () => {\n    const slots = {\n        icon : {\n            slot : 'remove-icon',\n            modifiers : []\n        },\n        svg : {\n            slot : 'remove-svg',\n            modifiers : []\n        }\n    }\n\n    return composeClasses(slots, getChipUtilityClass);\n}\n\n interface CreateSVGClassType{\n    icon : string,\n    svg : string\n}\n\nconst ChipIconTemplate = (params : ChipRenderedTypes |null , classes : CreateSVGClassType) => {\n    const div = document.createElement(\"span\");\n    params && ( div.innerHTML = getSvgIcon(\"remove-icon\" , classes));\n    return div.firstChild as HTMLElement;\n}\n\nexport class ChipIconRenderer implements ICustomRenderer {\n    private params !: ChipRenderedTypes | null ;\n    init(params: ChipRenderedTypes): void {\n        this.params = params;\n    }\n    getElement(): HTMLElement {\n        const classes = useUtilityClasses();\n        return ChipIconTemplate(this.params, classes);\n    }\n    destroy(): void {\n       this.params = null;\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { ChipRootController } from \"../chip-root/chip-root-controller\";\nimport { ChipControllerHandlerType } from \"./chip-controller-handler.types\";\n\n@Bean(ChipBeanConstants.CHIP_CONTROLLER_HANDLER)\nexport class ChipControllerHandler extends EventEmitter implements ChipControllerHandlerType {\n    private chipCtrl !: ChipRootController;\n    registerCtrl(chipCtrl : ChipRootController) : void {\n        this.chipCtrl = chipCtrl;\n    }\n\n    getChipCtrl() : ChipRootController {\n        return this.chipCtrl;\n    }\n}\n\n\n","function n(n){return\"aria-\"+n}function t(n,t,e){null==e||\"\"==e?i(n,t):o(n,t,e)}function o(t,o,i){t.setAttribute(n(o),i.toString())}function i(t,o){t.removeAttribute(n(o))}function e(n,t){t?n.setAttribute(\"role\",t):n.removeAttribute(\"role\")}function c(n,o){t(n,\"activedescendant\",o)}function u(n,o){t(n,\"atomic\",o)}function f(n,o){t(n,\"autocomplete\",o)}function l(n,o){t(n,\"braillelabel\",o)}function r(n,o){t(n,\"brailleroledescription\",o)}function a(n,o){t(n,\"busy\",o)}function d(n,o){t(n,\"checked\",o)}function s(n,o){t(n,\"colcount\",o)}function b(n,o){t(n,\"colindex\",o)}function p(n,o){t(n,\"colindextext\",o)}function v(n,o){t(n,\"colspan\",o)}function m(n,o){t(n,\"controls\",o)}function x(n,o){t(n,\"current\",o)}function w(n,o){t(n,\"describedby\",o)}function h(n,o){t(n,\"description\",o)}function y(n,o){t(n,\"details\",o)}function A(n,o){t(n,\"disabled\",o)}function g(n,o){t(n,\"errormessage\",o)}function k(n,o){t(n,\"expanded\",o)}function q(n,o){t(n,\"flowto\",o)}function z(n,o){t(n,\"haspopup\",o)}function S(n,o){t(n,\"hidden\",o)}function j(n,o){t(n,\"invalid\",o)}function B(n,o){t(n,\"keyshortcuts\",o)}function C(n,o){t(n,\"label\",o)}function D(n,o){t(n,\"labelledby\",o)}function E(n,o){t(n,\"level\",o)}function F(n,o){t(n,\"live\",o)}function G(n,o){t(n,\"modal\",o)}function H(n,o){t(n,\"multiline\",o)}function I(n,o){t(n,\"multiselectable\",o)}function J(n,o){t(n,\"orientation\",o)}function K(n,o){t(n,\"placeholder\",o)}function L(n,o){t(n,\"posinset\",o)}function M(n,o){t(n,\"pressed\",o)}function N(n,o){t(n,\"readonly\",o)}function O(n,o){t(n,\"relevant\",o)}function P(n,o){t(n,\"required\",o)}function Q(n,o){t(n,\"roledescription\",o)}function R(n,o){t(n,\"rowcount\",o)}function T(n,o){t(n,\"rowindex\",o)}function U(n,o){t(n,\"rowindextext\",o)}function V(n,o){t(n,\"rowspan\",o)}function W(n,o){t(n,\"selected\",o)}function X(n,o){t(n,\"setsize\",o)}function Y(n,o){t(n,\"sort\",o)}function Z(n,o){t(n,\"valuemax\",o)}function $(n,o){t(n,\"valuemin\",o)}function _(n,o){t(n,\"valuenow\",o)}function nn(n,o){t(n,\"valuetext\",o)}export{o as addAriaAttribute,n as ariaAttributeName,i as removeAriaAttribute,c as setAriaActiveDescendant,u as setAriaAtomic,f as setAriaAutocomplete,l as setAriaBraillelabel,r as setAriaBrailleroledescription,a as setAriaBusy,d as setAriaChecked,s as setAriaColCount,b as setAriaColIndex,p as setAriaColIndexText,v as setAriaColSpan,m as setAriaControls,x as setAriaCurrent,w as setAriaDescribedBy,h as setAriaDescription,y as setAriaDetails,A as setAriaDisabled,g as setAriaErrorMessage,k as setAriaExpanded,q as setAriaFlowTo,z as setAriaHasPopUp,S as setAriaHidden,j as setAriaInvalid,B as setAriaKeyShortCuts,C as setAriaLabel,D as setAriaLabelledBy,E as setAriaLevel,F as setAriaLive,G as setAriaModal,H as setAriaMultiLine,I as setAriaMultiSelectable,J as setAriaOrientation,K as setAriaPlaceHolder,L as setAriaPosInSet,M as setAriaPressed,N as setAriaReadOnly,O as setAriaRelevant,P as setAriaRequired,e as setAriaRole,Q as setAriaRoleDescription,R as setAriaRowCount,T as setAriaRowIndex,U as setAriaRowIndexText,V as setAriaRowSpan,W as setAriaSelected,X as setAriaSetSize,Y as setAriaSort,Z as setAriaValueMax,$ as setAriaValueMin,_ as setAriaValueNow,nn as setAriaValueText,t as toggleAriaAttribute};\n//# sourceMappingURL=aria.js.map\n","import{setAriaHidden as t}from\"./aria.js\";function n(n,e,i={}){const{skipAriaHidden:o}=i;n.classList.toggle(\"comp-hidden\",!e),o||t(n,!e)}function e(n,e,i={}){const{skipAriaHidden:o}=i;n.classList.toggle(\"comp-invisible\",!e),o||t(n,!e)}function i(t,n){const e=\"disabled\",i=n?t=>t.setAttribute(e,\"\"):t=>t.removeAttribute(e);i(t),o(t.querySelectorAll(\"input\"),(t=>i(t)))}function o(t,n){if(null!=t)for(let e=0;e<t.length;e++)n(t[e])}function r(t){if(null==t)return[];const n=[];return o(t,(t=>n.push(t))),n}function l(t,n){if(t)for(let e=0;e<t.length;e++){const i=t[e];n(i.name,i.value)}}function d(t,n,e){null==e?t.removeAttribute(n):t.setAttribute(n,e.toString())}function a(t,n){if(t)for(let e=0;e<t.length;e++){const i=t[e];n(i.name,i.value)}}function u(t){return t instanceof Node||t instanceof HTMLElement}function h(t){for(;t&&t.firstChild;)t.removeChild(t.firstChild)}function g(t,n){\"flex\"===n?(t.style.removeProperty(\"width\"),t.style.removeProperty(\"minWidth\"),t.style.removeProperty(\"maxWidth\"),t.style.flex=\"1 1 auto\"):f(t,n)}function f(t,n){n=s(n),t.style.width=n.toString(),t.style.maxWidth=n.toString(),t.style.minWidth=n.toString()}function s(t){return\"number\"==typeof t?t+\"px\":t}function m(t,n,e){null==e?t.removeAttribute(n):t.setAttribute(n,e.toString())}function p(t,n,e){e&&e.nextSibling===n||(e?e.nextSibling?t.insertBefore(n,e.nextSibling):t.appendChild(n):t.firstChild&&t.firstChild!==n&&t.insertAdjacentElement(\"afterbegin\",n))}function c(t,n,e){e?e.insertAdjacentElement(\"afterend\",n):t.firstChild?t.insertAdjacentElement(\"afterbegin\",n):t.appendChild(n)}function b(t,n){n=s(n),t.style.height=n.toString(),t.style.maxHeight=n.toString(),t.style.minHeight=n.toString()}function W(t){const{height:n,width:e,borderTopWidth:i,borderRightWidth:o,borderBottomWidth:r,borderLeftWidth:l,paddingTop:d,paddingRight:a,paddingBottom:u,paddingLeft:h,marginTop:g,marginRight:f,marginBottom:s,marginLeft:m,boxSizing:p}=window.getComputedStyle(t);return{height:parseFloat(n),width:parseFloat(e),borderTopWidth:parseFloat(i),borderRightWidth:parseFloat(o),borderBottomWidth:parseFloat(r),borderLeftWidth:parseFloat(l),paddingTop:parseFloat(d),paddingRight:parseFloat(a),paddingBottom:parseFloat(u),paddingLeft:parseFloat(h),marginTop:parseFloat(g),marginRight:parseFloat(f),marginBottom:parseFloat(s),marginLeft:parseFloat(m),boxSizing:p}}function y(t){const n=t.getBoundingClientRect(),{borderTopWidth:e,borderLeftWidth:i,borderRightWidth:o,borderBottomWidth:r}=W(t);return{top:n.top+(null!=e?e:0),left:n.left+(null!=i?i:0),right:n.right+(null!=o?o:0),bottom:n.bottom+(null!=r?r:0),width:n.width,height:n.height}}function S(t){const n=t.getBoundingClientRect(),{borderTopWidth:e,borderLeftWidth:i,borderRightWidth:o,borderBottomWidth:r,marginTop:l,marginBottom:d,marginLeft:a,marginRight:u}=W(t);return{top:n.top+(null!=e?e:0)-(null!=l?l:0),left:n.left+(null!=i?i:0)-(null!=a?a:0),right:n.right+(null!=o?o:0)+(null!=u?u:0),bottom:n.bottom+(null!=r?r:0)+(null!=d?d:0),width:n.width+(null!=i?i:0)+(null!=o?o:0)+(null!=a?a:0)+(null!=u?u:0),height:n.height+(null!=e?e:0)+(null!=r?r:0)+(null!=l?l:0)+(null!=d?d:0),toJSON:()=>0,y:n.top+(null!=e?e:0)-(null!=l?l:0),x:n.left+(null!=i?i:0)-(null!=a?a:0)}}function F(t){const n=W(t),e=n.marginBottom+n.marginTop;return Math.ceil(t.offsetHeight+e)}function L(t){const n=W(t),e=n.marginLeft+n.marginRight;return Math.ceil(t.offsetWidth+e)}function x(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function B(t){const n=document.createElement(\"div\");return n.innerHTML=(t||\"\").trim(),n.firstChild}export{m as addOrRemoveAttribute,B as addTemplate,h as clearElement,r as cloneNodeList,p as ensureDomOrder,l as forEachAttributeInMap,a as forEachAttributeInNamedNodeMap,o as forEachNodeInList,s as formatSize,F as getAbsoluteHeight,L as getAbsoluteWidth,S as getElementRectWithMargin,y as getElementRectWithOffset,W as getElementSize,c as insertWithDomOrder,u as isNodeOrHTMLElement,x as removeFromParent,i as setDisabled,n as setDisplayed,g as setElementWidth,b as setFixedHeight,f as setFixedWidth,e as setVisible,d as toggleAttribute};\n//# sourceMappingURL=dom.js.map\n","function n(n){if(n instanceof Set||n instanceof Map){const t=[];return n.forEach((n=>t.push(n))),t}return Object.values(n)}function t(n,t=!1){return null!=n&&(\"\"!==n||t)}function r(n){return null!=n&&\"function\"==typeof n.toString?n.toString():null}function o(n,t){const r=[];for(let o=n;o<=t;o++)r.push(o);return r}function e(n,t){if(null!=n)if(Array.isArray(n))for(let r=0;r<n.length;r++)t(r.toString(),n[r]);else for(const[r,o]of Object.entries(n))t(r,o)}export{o as createArrayOfNumbers,t as exists,r as toStringOrNull,e as traverseObject,n as values};\n//# sourceMappingURL=Generic.js.map\n","const e={CONTEXT:\"context\",COMPONENT_REGISTRY:\"componentRegistry\",EVENT_HANDLER:\"eventHandler\",USER_COMPONENT_HANDLER:\"userComponentHandler\",POPUP_HANDLER:\"popupHandler\",OPTION_HANDLER:\"optionHandler\",USER_COMPONENT_REGISTRY:\"userComponentRegistry\",COMPONENT_META_DATA_PROVIDER:\"componentMetaDataProvider\",COMPONENT_UTILITY:\"componentUtility\",FRAME_WORK_COMPONENT_WRAPPER:\"frameworkComponentWrapper\",FRAME_WORK_OVERRIDES:\"frameWorkOverrides\",BEANS:\"lookupBeanInstances\"};export{e as BEAN_NAME};\n//# sourceMappingURL=BeanName.js.map\n","var C,O;!function(C){C[C.CONSTRUCTOR=0]=\"CONSTRUCTOR\",C[C.AUTOWIRE=1]=\"AUTOWIRE\"}(C||(C={})),function(C){C[C.Class=0]=\"Class\",C[C.Method=1]=\"Method\"}(O||(O={}));export{O as AttributeAnnotationTargetType,C as BeanDependencyType};\n//# sourceMappingURL=types.js.map\n","import{BeanDependencyType as t,AttributeAnnotationTargetType as e}from\"./types.js\";const r=\"BeanDefinition\";function n(t,e){let n;if(n=\"class\"===e||\"function\"==typeof t?t:\"prototype\"===e?t.constructor:Object.getPrototypeOf(t),n.hasOwnProperty(r))return n[r];const o={uniqueId:Symbol(),className:\"\",beanName:\"\",componentTypes:[],dependencies:[],constructor:null,existInstance:null,preConstruct:[],postConstruct:[],preDestroy:[],attributeAnnotations:[]};return Object.defineProperty(n,r,{value:o,writable:!1}),o}function o(t){return(t,e,r)=>{const o=n(t,\"prototype\");if(\"function\"!=typeof r.value)throw Error(\"@PreDestroy is can use only to method\");return o.preDestroy||(o.preDestroy=[]),o.preDestroy.push(e),r}}function s(t){return(t,e,r)=>{var o;const s=n(t,\"prototype\");if(\"function\"!=typeof r.value)throw Error(\"@PostConstructor is can use only to method\");return s.postConstruct&&(s.postConstruct=[]),null===(o=s.postConstruct)||void 0===o||o.push(e),r}}function a(t){return(t,e,r)=>{var o;const s=n(t,\"prototype\");if(\"function\"!=typeof r.value)throw Error(\"@PreConstructor is can use only to method\");return s.preConstruct&&(s.preConstruct=[]),null===(o=s.preConstruct)||void 0===o||o.push(e),r}}function u(e,r,o){return(s,a)=>{const u=n(s,\"prototype\"),p=o&&o.lazy||!1;if(o&&o.name)u.dependencies.push({type:t.AUTOWIRE,autowireField:a,autowireLazy:p,beanName:o.name,className:e,optional:r});else{if(\"string\"!=typeof a)throw Error(\"property name must be string without beanName\");u.dependencies.push({type:t.AUTOWIRE,autowireField:a,autowireLazy:p,beanName:e,className:e,optional:r})}}}function p(t){return r={componentType:\"bean\",beanName:t},t=>{const o=r.beanName||t.name,s=n(t,\"class\");return s.className=t.name,s.beanName=o,s.constructor=t,s.componentTypes.push(r.componentType),s.attributeAnnotations.push({targetType:e.Class,targetDescriptor:null}),t};var r}function i(t,e){return u(t,!1,e)}function c(t,e){return u(t,!0,e)}function y(t){return r={name:t},(t,o,s)=>{const a=function(t,r){let n=t.attributeAnnotations.find((t=>t.targetType===e.Method&&t.targetPropertyKey===r));return n||(n={targetType:e.Method,targetPropertyKey:r,targetDescriptor:void 0,parameters:void 0},t.attributeAnnotations.push(n)),n}(n(t,\"prototype\"),o);a.parameters||(a.parameters=[]),a.parameters[s]={index:s,name:r.name}};var r}export{i as AutoWired,p as Bean,r as BeanDefinitionSymbol,c as Optional,s as PostConstruct,a as PreConstruct,o as PreDestroy,y as Qualifier,u as WireFunction};\n//# sourceMappingURL=BeanFactoryDecorator.js.map\n","const e={METADATA:\"COMPONENT_META_DATA\"};function t(e){if(e.name)return e.name}function r(e=null){return function(t,r,n){null!==e?\"number\"!=typeof n?o(t,\"querySelectors\",{attributeName:r,querySelector:e,refSelector:void 0}):console.error(\"QuerySelector should be on an attribute\"):console.error(\"QuerySelector should not be null\")}}function n(e){return function(t,r,n){o(t,\"querySelectors\",{attributeName:r,querySelector:`[ref=${e}]`,refSelector:e})}}function o(r,n,o){const u=function(t,r){Reflect.has(t,e.METADATA)||Reflect.set(t,e.METADATA,{});return Reflect.has(t[e.METADATA],r)||Reflect.set(t[e.METADATA],r,{}),Reflect.get(t[e.METADATA],r)}(r,t(r.constructor));u[n]||(u[n]=[]),u[n].push(o)}export{e as Components,r as QuerySelector,t as getFunctionName,n as queryAssignedNodes};\n//# sourceMappingURL=ReferenceSelector.js.map\n","import{Bean as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as s}from\"../Constants/BeanName.js\";let t=class{constructor(){this.allSyncListeners=new Map,this.allAsyncListeners=new Map,this.globalSyncListeners=new Set,this.globalAsyncListeners=new Set,this.asyncFunctionsQueue=[],this.scheduled=!1,this.firedEvents={}}setBeans(e,s=null,t=null){if(this.optionHandler=e,s){const t=e.useAsyncEvents();this.addGlobalListener(s,t)}t&&this.addGlobalListener(t,!1)}getListeners(e,s,t){const n=s?this.allAsyncListeners:this.allSyncListeners;let i=n.get(e);return!i&&t&&(i=new Set,n.set(e,i)),i}noRegisteredListenersExist(){return 0===this.allSyncListeners.size&&0===this.allAsyncListeners.size&&0===this.globalSyncListeners.size&&0===this.globalAsyncListeners.size}addEventListener(e,s,t=!1){this.getListeners(e,t,!0).add(s)}removeEventListener(e,s,t=!1){const n=this.getListeners(e,t,!1);n&&(n.delete(s),0===n.size)&&(t?this.allAsyncListeners:this.allSyncListeners).delete(e)}addGlobalListener(e,s=!1){(s?this.globalAsyncListeners:this.globalSyncListeners).add(e)}removeGlobalListener(e,s=!1){(s?this.globalAsyncListeners:this.globalSyncListeners).delete(e)}dispatchEvent(e){let s=e;if(this.optionHandler){const{api:e}=this.optionHandler;s.api=e}this.dispatchToListeners(s,!0),this.dispatchToListeners(s,!1),this.firedEvents[s.type]=!0}dispatchEventOnce(e){this.firedEvents[e.type]||this.dispatchEvent(e)}dispatchToListeners(e,s){const t=e.type,n=new Set(this.getListeners(t,s,!1));n.size>0&&(t=>{t.forEach((t=>{s?this.dispatchAsync((()=>t(e))):t(e)}))})(n),new Set(s?this.globalAsyncListeners:this.globalSyncListeners).forEach((n=>{s?this.dispatchAsync((()=>n(t,e))):n(t,e)}))}dispatchAsync(e){this.asyncFunctionsQueue.push(e),this.scheduled||(window.setTimeout(this.flushAsyncQueue.bind(this),0),this.scheduled=!0)}flushAsyncQueue(){this.scheduled=!1;const e=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[],e.forEach((e=>e()))}};t=function(e,s,t,n){var i,c=arguments.length,l=c<3?s:null===n?n=Object.getOwnPropertyDescriptor(s,t):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)l=Reflect.decorate(e,s,t,n);else for(var r=e.length-1;r>=0;r--)(i=e[r])&&(l=(c<3?i(l):c>3?i(s,t,l):i(s,t))||l);return c>3&&l&&Object.defineProperty(s,t,l),l}([e(s.EVENT_HANDLER)],t);export{t as EventHandler};\n//# sourceMappingURL=EventHandler.js.map\n","import{AutoWired as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"../Constants/BeanName.js\";import{EventHandler as r}from\"./EventHandler.js\";var n=function(e,t,r,n){var s,o=arguments.length,i=o<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,n);else for(var d=e.length-1;d>=0;d--)(s=e[d])&&(i=(o<3?s(i):o>3?s(t,r,i):s(t,r))||i);return o>3&&i&&Object.defineProperty(t,r,i),i};class s{constructor(){this.destroyFunctions=[],this.destroyed=!1}getFrameWorkOverrides(){return this.frameWorkOverrides}createBean(e,t,r){return t?t.createBean(e):this.getContext().createBean(e),r&&r(e),e}destroyBean(e,t){return(t||this.getContext()).destroyBean(e)}destroyBeans(e,t){return e&&e.forEach((e=>this.destroyBean(e,t))),[]}destroy(){this.dispatchEvent({type:s.EVENT_DESTROYED}),this.destroyFunctions.forEach((e=>e())),this.destroyFunctions.length=0,this.destroyed=!0}getContext(){return this.context}addEventListener(e,t){this.eventHandler||(this.eventHandler=new r),this.eventHandler.addEventListener(e,t)}removeEventListener(e,t){this.eventHandler&&this.eventHandler.removeEventListener(e,t)}dispatchEventAsync(e){window.setTimeout((()=>this.dispatchEvent(e)),0)}dispatchEvent(e){this.eventHandler&&this.eventHandler.dispatchEvent(e)}addListener(e,t,r){if(this.destroyed)return;e instanceof HTMLElement?o(e,t,r):e.addEventListener(t,r);const n=()=>(e.removeEventListener(t,r),this.destroyFunctions=this.destroyFunctions.filter((e=>e!==n)),null);return this.destroyFunctions.push(n),n}isAlive(){return!this.destroyed}addDestroyFunc(e){this.isAlive()?this.destroyFunctions.push(e):e()}createManagedBean(e,t){const r=this.createBean(e,t);return this.addDestroyFunc(this.destroyBean.bind(this,e,t)),r}}function o(e,t,r){e&&e.addEventListener(t,r,void 0)}s.EVENT_DESTROYED=\"destroyed\",n([e(t.EVENT_HANDLER)],s.prototype,\"eventHandler\",void 0),n([e(t.OPTION_HANDLER)],s.prototype,\"optionsHandler\",void 0),n([e(t.FRAME_WORK_OVERRIDES)],s.prototype,\"frameWorkOverrides\",void 0),n([e(\"context\")],s.prototype,\"context\",void 0);export{s as EventEmitter,o as addSafePassiveEventListener};\n//# sourceMappingURL=EventEmitter.js.map\n","import{AutoWired as e,Bean as t}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as r}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";var n=function(e,t,r,o){var n,a=arguments.length,c=a<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(c=(a<3?n(c):a>3?n(t,r,c):n(t,r))||c);return a>3&&c&&Object.defineProperty(t,r,c),c};let a=class extends o{constructor(){super(...arguments),this.componentMetaData={}}retrieve(e){return this.componentMetaData[e]}};n([e(r.BEANS)],a.prototype,\"getBeanInstanceByBeanName\",void 0),a=n([t(r.COMPONENT_META_DATA_PROVIDER)],a);export{a as ComponentMetadataProvider};\n//# sourceMappingURL=ComponentMetaDataProvider.js.map\n","import{Bean as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";let r=class extends o{constructor(){super(...arguments),this.defaultComp={},this.jsComponents={}}registerDefaultComponent(e,t){this.defaultComp[e]||(this.defaultComp[e]=t)}registerJSComponent(e,t){this.jsComponents[e]=t}retrieve(e){const t=(e,t)=>({componentFrameWork:t,component:e}),o=this.getFrameWorkOverrides().frameworkComponent(e,this.userComponent);if(null!=o)return t(o,!0);const r=this.jsComponents[e];if(r)return t(r,this.getFrameWorkOverrides().isFrameworkComponent(r));const n=this.defaultComp[e];return n?t(n,!1):null}};r=function(e,t,o,r){var n,s=arguments.length,i=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,o,r);else for(var m=e.length-1;m>=0;m--)(n=e[m])&&(i=(s<3?n(i):s>3?n(t,o,i):n(t,o))||i);return s>3&&i&&Object.defineProperty(t,o,i),i}([e(t.USER_COMPONENT_REGISTRY)],r);export{r as UserComponentRegistry};\n//# sourceMappingURL=UserComponentRegistry.js.map\n","class n{constructor(){this.renderingEngine=\"vanilla\"}frameworkComponent(n,r){return null}isFrameworkComponent(n){return!1}}export{n as VanillaFrameWorkOverrider};\n//# sourceMappingURL=VanillaFrameWorkOverrides.js.map\n","import{Bean as e}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";let n=class extends o{constructor(){super(...arguments),this.componentsMappedByName={}}setupComponents(e){e&&e.forEach((e=>this.addComponent(e)))}addComponent({componentName:e,componentClass:t,template:o}){const n=e.toUpperCase();o&&(t.getTemplate=o),this.componentsMappedByName[n]=t}getComponentClass(e){return this.componentsMappedByName[e]}};n=function(e,t,o,n){var r,p=arguments.length,s=p<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,n);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(p<3?r(s):p>3?r(t,o,s):r(t,o))||s);return p>3&&s&&Object.defineProperty(t,o,s),s}([e(t.COMPONENT_REGISTRY)],n);export{n as ComponentsRegistry};\n//# sourceMappingURL=ComponentRegistry.js.map\n","import{BeanDefinitionSymbol as e}from\"./Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as t}from\"./Constants/BeanName.js\";import{traverseObject as n}from\"./utils/Generic.js\";class r{constructor(){this.beanWrappers={},this.destroyed=!1}getBeanInstances(){return Object.values(this.beanWrappers)}getInstanceID(){var e;return this.userConfigurations?null===(e=this.userConfigurations)||void 0===e?void 0:e.instanceID:null}registerBeanClasses(e,t){this.beanClasses=e,this.registerUserContextParams(t),this.createBeans();const n=this.getBeanInstances();this.wireBeans(n)}registerUserContextParams(e){this.userConfigurations=null!=e?e:{}}createBean(e,t){if(!e)throw Error(\"Can't wire to bean since it is null\");return this.wireBeans([e]),e}createBeans(){this.beanClasses.forEach((t=>{const n=t[e];if(n){const e=n.beanName,r=new t;this.beanWrappers[e]=r}}))}wireBeans(e){this.autoWireBeans(e),this.methodWireBeans(e),this.callLifeCycleMethods(e,\"preConstruct\"),this.callLifeCycleMethods(e,\"postConstruct\")}autoWireBeans(e){e.forEach((e=>{this.forEachMetaDataInHierarchyBeanDefinition(e,((n,r)=>{const a=n.dependencies;a&&a.forEach((n=>{if(n.autowireLazy)Object.defineProperty(e,n.autowireField,{get:()=>{let e=this.getBeanInstance(r,n.beanName,n.optional);if(n.beanName===t.BEANS&&(e=this.getBeanInstance.bind(this,r)),!e)throw Error(\"Unknown beanName=\"+n.autowireField);return e},configurable:!1});else{let a;a=n.beanName===t.BEANS?this.getBeanInstance.bind(this,r):this.getBeanInstance(r,n.beanName,n.optional),Object.defineProperty(e,n.autowireField,{value:a,configurable:!!a,writable:!1})}}))}))}))}methodWireBeans(e){e.forEach((e=>{this.forEachMetaDataInHierarchyBeanDefinition(e,((t,n)=>{t.attributeAnnotations.forEach((t=>{if(t.targetPropertyKey&&t.parameters){const r=this.getBeansForParameters(t.parameters,n);console.log(r),e[t.targetPropertyKey].apply(e)}}))}))}))}getBeansForParameters(e,t){const r=[];return e&&n(e,((e,n)=>{if(n){const e=this.getBeanInstance(t,n.name);r[Number(n.index)]=e}})),r}getBeanInstance(e,n,r=!1){if(this.destroyed)return null;if(n===t.CONTEXT)return a=this,{createBean(e){a.createBean(e)},destroyBean(e){a.destroyBean(e)},destroy(){a.destroy()}};var a;if(this.userConfigurations&&this.userConfigurations.hasOwnProperty(n))return this.userConfigurations[n];return this.beanWrappers[n]||(r||console.error(`Component: unable to find bean reference ${n} while initialising ${e}`),null)}callLifeCycleMethods(e,t){e.forEach((e=>this.callLifeCycleMethodsOnBean(e,t)))}callLifeCycleMethodsOnBean(e,t,n){const r={};this.forEachMetaDataInHierarchyBeanDefinition(e,(e=>{const a=e[t];a&&a.forEach((e=>{e!=n&&(r[e]=!0)}))})),Object.keys(r).forEach((t=>e[t]()))}forEachMetaDataInHierarchyBeanDefinition(t,n){let r=Object.getPrototypeOf(t);for(;null!=r;){const t=r.constructor;t.hasOwnProperty(e)&&n(t[e],this.getBeanName(t)),r=Object.getPrototypeOf(r)}}getBeanName(t){if(t[e]&&t[e].beanName)return t[e].beanName;const n=t.toString();return n.substring(9,n.indexOf(\"(\"))}getBean(e){return this.getBeanInstance(\"getBean\",e,!0)}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=this.getBeanInstances();this.destroyBeans(e),this.userConfigurations=null}destroyBean(e){e&&this.destroyBeans([e])}destroyBeans(e){return e?(e.forEach((e=>{this.callLifeCycleMethodsOnBean(e,\"preDestroy\",\"destroy\");const t=e;\"function\"==typeof t.destroy&&t.destroy()})),[]):[]}isDestroyed(){return this.destroyed}}export{r as Context};\n//# sourceMappingURL=Context.js.map\n","export const DEFAULT_TOOLTIP_VALUES = {\n\tDEFAULT_SHOW_DELAY_ON_HOVER     : 2000,\n\tDEFAULT_HIDE_DELAY_AFTER_SHOW   : 1000,\n\tQUICK_SHOW_DELAY_ADJUSTMENT     : 1000,\n\tFADE_OUT_DELAY_AFTER_INTERACTION: 1000,\n\tINTERACTIVE_HIDE_DELAY          : 100,\n};\n\nexport enum TooltipStates {\n\tIDLE,\n\tWAITING,\n\tDISPLAYING,\n}\n\nexport enum TooltipTriggerStates {\n\tHOVER = 'hover',\n\tFOCUS = 'focus',\n}\n","export const TooltipBeanName = {\n    TOOL_TIP_OPTIONS    : 'tooltipOptions',\n    TOOL_TIP_API        : 'tooltipAPI',\n    TOOL_TIP_ELEMENT    : 'tooltipElement',\n    TOOL_TIP_POP_HANDLER: 'tooltipPopHandler',\n    TOOL_TIP_CONTROLLER_HANDLER: 'tooltipControllerHandler'\n}","export const TooltipEvents = {\n    TOOLTIP_SHOW : 'tooltipShow',\n    TOOLTIP_HIDE : 'tooltipHide',\n    TOOLTIP_REFRESH : 'tooltipRefresh',\n    TOOLTIP_OPEN : 'tooltipOpen',\n    TOOLTIP_CLOSE : 'tooltipClose',\n    TOOLTIP_OPEN_BY_MOUSE : 'tooltipOpenByMouse',\n    TOOLTIP_CLOSE_BY_MOUSE : 'tooltipOpenByClose'\n\n}","import { AutoWired, BEAN_NAME, PostConstruct, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DEFAULT_TOOLTIP_VALUES, TooltipStates, TooltipTriggerStates } from \"./Constants/DefaultTooltipValues\";\nimport { ITooltipOptionsHandler } from \"./Interface/ITooltipOptionsHandler\";\nimport { TooltipBeanName } from \"./Constants/TooltipBeanName\";\nimport { TooltipUserComponentHandler } from \"./Components/TooltipUserComponentHandler\";\nimport { TooltipPopupHandler } from \"./TooltipPopHandler\";\nimport { TooltipEvents } from \"./Constants/TooltipEvents\";\nimport { Position } from \"./PopupHandler/CorePopupHandler\";\n\n\nexport class CustomTooltipHandler extends EventEmitter {\n\tprivate lastHiddenTimestamp!: number;\n\n\tprivate delayForTooltipToShow!: number;\n\tprivate delayForTooltipToHide!: number;\n\n\tprivate interactionModeEnabled = false;\n\tprivate isInteractingWithTooltip = false;\n\tprivate isTooltipLocked = false;\n\n\tprivate tooltipShowTimeoutId: number | undefined;\n\tprivate tooltipHideTimeoutId: number | undefined;\n\tprivate interactiveTooltipTimeoutId: number | undefined;\n\n\tprivate tooltipMouseEnterHandler!: (() => null) | null;\n\tprivate tooltipMouseLeaveHandler!: (() => null) | null;\n\tprivate tooltipFocusInHandler!: (() => null) | null;\n\tprivate tooltipFocusOutHandler!: (() => null) | null;\n\n\tprivate tooltipComponent: any;\n\n\tprivate tooltipComponentElement !: HTMLElement | null;\n\n\tprivate state = TooltipStates.IDLE;\n\n\tprivate lastMouseEvent!: MouseEvent | null;\n\n\tprivate tooltipPopupDestroyFunction: (() => void) | undefined;\n\n\tprivate tooltipInstanceCount = 0;\n\n\tprivate tooltipMouseTrack: boolean = false;\n\n\tprivate tooltipTrigger!: TooltipTriggerStates;\n\n\t@AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n\tprivate tooltipDestroy : boolean = false;\n\n\tprivate tooltipHideOnEscapeKey: boolean = false;\n\tprivate tooltipHideOnMouseDown: boolean = false;\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tif ( (this.optionsHandler as ITooltipOptionsHandler ).isTooltipInteraction() ) {\n\t\t\tthis.interactionModeEnabled = true;\n\t\t}\n\n\t\tthis.tooltipTrigger        = ( this.optionsHandler as ITooltipOptionsHandler ).getTriggerState();\n\t\tthis.delayForTooltipToShow = this.getTooltipDelay('show');\n\t\tthis.delayForTooltipToHide = this.getTooltipDelay('hide');\n\t\tthis.tooltipMouseTrack     = ( this.optionsHandler as ITooltipOptionsHandler ).isTooltipMouseTrack();\n\n\t\tconst shouldAttachEvents = (this.optionsHandler as ITooltipOptionsHandler).shouldAttachEvents();\n\n\n\t\tif(shouldAttachEvents) {\n\t\t\tthis.addEventListner();\n\t\t}\n\n\t\tthis.addListener(this.eventHandler, TooltipEvents.TOOLTIP_OPEN_BY_MOUSE, (params : any) => {\n\t\t\tthis.onMouseEnter(params.event)\n\t\t});\n\t\tthis.addListener(this.eventHandler, TooltipEvents.TOOLTIP_CLOSE_BY_MOUSE, this.onMouseLeave.bind(this));\n\t\t\n\t\tthis.addListener(this.eventHandler, TooltipEvents.TOOLTIP_OPEN, this.showTooltip.bind(this));\n\n\t\tthis.addListener(this.eventHandler, TooltipEvents.TOOLTIP_CLOSE,this.hideTooltip.bind(this));\n\t}\n\n\tprivate addEventListner() {\n\t\tconst element = this.getBeanInstanceByBeanName( TooltipBeanName.TOOL_TIP_ELEMENT) as HTMLElement;\n\n\t\tif (this.tooltipTrigger === TooltipTriggerStates.HOVER) {\n\t\t\tthis.addListener( element, 'mouseenter', this.onMouseEnter.bind(this));\n\n\t\t\tthis.addListener( element, 'mouseleave', this.onMouseLeave.bind(this));\n\n\t\t}\n\n\t\tif (this.tooltipTrigger === TooltipTriggerStates.FOCUS) {\n\t\t\tthis.addListener(element, 'focusin', this.onFocusIn.bind(this));\n\n\t\t\tthis.addListener(element, 'focusout', this.onFocusOut.bind(this));\n\t\t}\n\n\t\tthis.addListener(document.body, 'mousemove', this.onMouseMove.bind(this));\n\n\t\tif (!this.interactionModeEnabled) {\n\t\t\tthis.addListener(element, 'mousedown', this.onMouseDown.bind(this));\n\n\t\t\tthis.addListener(element, 'keydown', this.onKeyDown.bind(this));\n\t\t}\n\n\t\tthis.addListener(document.body, 'keydown', this.onKeyDown.bind(this));\n\t}\n\n\tpublic onMouseEnter(event: MouseEvent): void {\n\t\tthis.handleTooltipInteraction(event);\n\t\t\n\t}\n\n\tprivate handleTooltipInteraction(event: any): void {\n\t\tif (this.interactionModeEnabled && this.interactiveTooltipTimeoutId) {\n\t\t\tthis.unlockTooltip();\n\t\t\tthis.startHideTimeout();\n\t\t}\n\t\tconst tooltipHoverPosition = this.optionsHandler.getTooltipHoverPosition();\n\n\t\tif (this.isTooltipLocked) {\n\t\t\tthis.tooltipShowTimeoutId = window.setTimeout(() => {\n\t\t\t\t\n\t\t\t\tthis.prepareToShowTooltip(tooltipHoverPosition ? undefined: event);\n\t\t\t}, DEFAULT_TOOLTIP_VALUES.INTERACTIVE_HIDE_DELAY);\n\t\t} else {\n\t\t\tthis.prepareToShowTooltip(tooltipHoverPosition ? event : undefined);\n\t\t}\n\t}\n\n\tprivate onMouseMove(event: MouseEvent): void {\n\n\t\tif(this.tooltipHideOnEscapeKey ) {\n\t\t\tthis.handleTooltipInteraction(event);\n\t\t\tthis.tooltipHideOnEscapeKey = false;\n\n\t\t\treturn;\n\t\t}\n\t\tif(this.tooltipHideOnMouseDown) {\n\t\t\tthis.handleTooltipInteraction(event);\n\t\t\tthis.tooltipHideOnMouseDown = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.lastMouseEvent) {\n\t\t\tthis.lastMouseEvent = event;\n\t\t}\n\n\t\tif ( this.tooltipMouseTrack && this.state === TooltipStates.DISPLAYING && this.tooltipComponent ) {\n\t\t\tthis.positionTooltip();\n\t\t}\n\t}\n\n\tprivate onMouseDown(): void {\n\t\tconst shouldCancelOnMouseDown = (this.optionsHandler as ITooltipOptionsHandler).shouldCancelOnMouseDown();\n\t\tif(shouldCancelOnMouseDown) {\n\t\t\tthis.setIdleState();\n\t\t\tthis.tooltipHideOnMouseDown = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.tooltipHideOnMouseDown = false;\n\t}\n\n\tprivate onMouseLeave(): void {\n\t\tif (this.interactionModeEnabled) {\n\t\t\tthis.lockTooltip();\n\t\t} else {\n\t\t\tthis.setIdleState();\n\t\t}\n\t}\n\n\tprivate onFocusIn(): void {\n\t\tthis.prepareToShowTooltip();\n\t}\n\n\tprivate onFocusOut(event: FocusEvent): void {\n\t\tconst relatedTarget = event.relatedTarget as Element;\n\t\tconst parentCompGui = this.getBeanInstanceByBeanName( TooltipBeanName.TOOL_TIP_ELEMENT, ) as HTMLElement;\n\t\tconst tooltipGui = this.tooltipComponentElement;\n\n\t\tif (\n\t\t\tthis.isInteractingWithTooltip ||\n\t\t\tparentCompGui.contains(relatedTarget) ||\n\t\t\t(this.interactionModeEnabled && tooltipGui?.contains(relatedTarget))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setIdleState();\n\t}\n\n\tprivate onKeyDown(_event: KeyboardEvent): void {\n\t\tconst shouldCancelOnEscape = (this.optionsHandler as ITooltipOptionsHandler).shouldCancelOnEscape();\n\t\tif(!shouldCancelOnEscape) {\n\t\t\tthis.hideTooltip(true);\n\t\t\treturn;\n\t\t}\n\n\t\tif(shouldCancelOnEscape) {\n\t\t\tconst state = this.state;\n\t\t\tthis.setIdleState();\n\t\t\tstate === TooltipStates.DISPLAYING && (this.tooltipHideOnEscapeKey = true);\n\t\t\treturn\n\t\t}\n\n\t}\n\n\tprivate prepareToShowTooltip(mouseEvent?: MouseEvent): boolean {\n        if (this.state != TooltipStates.IDLE || this.isTooltipLocked) { return false; }\n\n        let delay = 0;\n\n        if (mouseEvent) {\n            delay = this.isLastTooltipHiddenRecently() ? 200 : this.delayForTooltipToShow;\n        }\n\n        this.lastMouseEvent = mouseEvent || null;\n\n        this.tooltipShowTimeoutId = window.setTimeout(this.showTooltip.bind(this), delay);\n\t\t\n        this.state = TooltipStates.WAITING;\n\n        return true;\n    }\n\n\tprivate isLastTooltipHiddenRecently(): boolean {\n\t\tconst now = new Date().getTime();\n\t\tconst then = this.lastHiddenTimestamp;\n\t\treturn now - then < DEFAULT_TOOLTIP_VALUES.QUICK_SHOW_DELAY_ADJUSTMENT;\n\t}\n\n\tprivate showTooltip(): void {\n\t\tconst params            = this.getTooltipParams();\n\t\tconst shouldShowTooltip = (this.optionsHandler as ITooltipOptionsHandler).shouldShowTooltip();\n        if (!params.value || (shouldShowTooltip && !shouldShowTooltip())) {\n            this.setIdleState();\n            return;\n        }\n\n        this.state = TooltipStates.DISPLAYING;\n\n        this.tooltipInstanceCount++;\n\n        const callback = this.afterTooltipRendererCallback.bind(this, this.tooltipInstanceCount);\n\n\t\tconst userComponentHandler = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_HANDLER) as TooltipUserComponentHandler;\n\n\t\tconst itemDetails = {\n\t\t\tgetRenderer : () => (this.optionsHandler as ITooltipOptionsHandler).getTooltipRenderer(),\n\t\t\tgetUserRendererParams : () => (this.optionsHandler as ITooltipOptionsHandler).getTooltipRendererParams()\n\t\t}\n        const userDetails = userComponentHandler && userComponentHandler.getTooltipRendererDetails(itemDetails, params);\n        \n\t\tif(userDetails) {\n\t\t\tconst instance = userDetails.newInstance();\n\t\t\tif(instance) {\n\t\t\t\tinstance!.then(callback);\n\t\t\t}\n\t\t}\n    }\n\n\t private afterTooltipRendererCallback(tooltipInstanceCopy: number, tooltipComponent: any): void {\n        const isDestroy = this.state !== TooltipStates.DISPLAYING || this.tooltipInstanceCount !== tooltipInstanceCopy;\n\n        if (isDestroy) {\n\t\t\tthis.destroyBean(tooltipComponent);\n\t\t\treturn;\n\t\t}\n\n        const eGui = tooltipComponent.getElement();\n\t\t// this.addClassNameForPopover(eGui);\n\n\t\tthis.tooltipComponentElement = eGui;\n\n        this.tooltipComponent = tooltipComponent;\n\n        if (!eGui.classList.contains('ZG-tooltip')) {\n            eGui.classList.add('ZG-tooltipCustom');\n        }\n\n        if (this.tooltipTrigger === TooltipTriggerStates.HOVER) {\n            eGui.classList.add('ZG-tooltipAnimate');\n        }\n\n        if (this.interactionModeEnabled) {\n            eGui.classList.add('ZG-tooltip-interactive');\n        }\n\n\t\tconst popupParentElement = (this.optionsHandler as ITooltipOptionsHandler).getPopupParent();\n\t\tconst documentElement    = (this.optionsHandler as ITooltipOptionsHandler).getDocumentElement();\n\t\tconst isRTL              = (this.optionsHandler as ITooltipOptionsHandler).isRTL();\n\t\tconst popupClassName     = (this.optionsHandler as ITooltipOptionsHandler).getPopupClassName();\n\n\n\n\t\tconst tooltipPopupHandler = this.getBeanInstanceByBeanName(TooltipBeanName.TOOL_TIP_POP_HANDLER) as TooltipPopupHandler;\n\n        const addPopupRes = tooltipPopupHandler.addPopup({\n\t\t\tchildElement: eGui,\n\t\t\tariaLabel   : 'tooltip',\n\t\t\trtl         : isRTL,\n\t\t\tpopupParentElement,\n\t\t\tdocumentElement,\n\t\t\tpopupClassName,\n\t\t});\n\n        if (addPopupRes) {\n            this.tooltipPopupDestroyFunction = addPopupRes.hideFunction;\n        }\n\n        this.positionTooltip();\n\n\n        if (this.interactionModeEnabled) {\n            if (this.tooltipTrigger === TooltipTriggerStates.HOVER) {\n                this.tooltipMouseEnterHandler = this.addListener(eGui, 'mouseenter', this.onTooltipMouseEnter.bind(this)) || null;\n                this.tooltipMouseLeaveHandler = this.addListener(eGui, 'mouseleave', this.onTooltipMouseLeave.bind(this)) || null;\n            } else {\n                this.tooltipFocusInHandler = this.addListener(eGui, 'focusin', this.onTooltipFocusIn.bind(this)) || null;\n                this.tooltipFocusOutHandler = this.addListener(eGui, 'focusout', this.onTooltipFocusOut.bind(this)) || null;\n            }\n        }\n\n\t\tthis.dispatchShowEvent();\n\n        this.startHideTimeout();\n    }\n\n\taddClassNameForPopover(eGui:HTMLElement){\n\t\tconst classNames = this.generateClassName();\n\t\tclassNames && classNames.forEach((className) => eGui.classList.add(className));\n\t}\n\n\tprivate generateClassName(): string[] | null {\n\t\tconst position: Position = this.optionsHandler.getPosition();\n\t\tconst tooltipHoverPosition = this.optionsHandler.getTooltipHoverPosition();\n\n\t\tif(!tooltipHoverPosition) {\n\t\t\treturn null;\n\t\t}\t\n\t\n\t\tconst classMap: { [key in Position]: string[] } = {\n\t\t\t[Position.under]      : ['dg-popover__pointer', 'dg-popover__pointer--under'],\n\t\t\t[Position.above]      : ['dg-popover__pointer', 'dg-popover__pointer--above'],\n\t\t\t[Position.over]       : ['dg-popover__pointer', 'dg-popover__pointer--over'],\n\t\t\t[Position.left]       : ['dg-popover__pointer', 'dg-popover__pointer--right'],\n\t\t\t[Position.right]      : ['dg-popover__pointer', 'dg-popover__pointer--left'],\n\t\t\t[Position.top]        : ['dg-popover__pointer', 'dg-popover__pointer--bottom'],\n\t\t\t[Position.topLeft]    : ['dg-popover__pointer', 'dg-popover__pointer--bottom-left'],\n\t\t\t[Position.topRight]   : ['dg-popover__pointer', 'dg-popover__pointer--bottom-right'],\n\t\t\t[Position.bottom]     : ['dg-popover__pointer', 'dg-popover__pointer--top'],\n\t\t\t[Position.bottomLeft] : ['dg-popover__pointer', 'dg-popover__pointer--top-left'],\n\t\t\t[Position.bottomRight]: ['dg-popover__pointer', 'dg-popover__pointer--top-right'],\n\t\t\t[Position.leftTop]    : ['dg-popover__pointer', 'dg-popover__pointer--right-top'],\n\t\t\t[Position.leftBottom] : ['dg-popover__pointer', 'dg-popover__pointer--right-bottom'],\n\t\t\t[Position.rightTop]   : ['dg-popover__pointer', 'dg-popover__pointer--left-top'],\n\t\t\t[Position.rightBottom]: ['dg-popover__pointer', 'dg-popover__pointer--left-bottom'],\n\t\t\t[Position.auto]       : ['dg-popover__pointer', 'dg-popover__pointer--auto'],\n\t\t\t[Position.center]     : ['dg-popover__pointer', 'dg-popover__pointer--center'],\n\t\t};\n\t\t\n\t\n\t\n\t\treturn classMap[position];\n\t}\n\t\n\n\tprivate positionTooltip(): void {\n\t\tconst tooltipPopupHandler = this.getBeanInstanceByBeanName(TooltipBeanName.TOOL_TIP_POP_HANDLER) as TooltipPopupHandler;\n\n\t\tconst popupParentElement = (this.optionsHandler as ITooltipOptionsHandler).getPopupParent();\n\t\tconst documentElement = (this.optionsHandler as ITooltipOptionsHandler).getDocumentElement();\n\n\t\tconst gapX = this.optionsHandler.getGapX();\n\t\tconst gapY = this.optionsHandler.getGapY();\n        if (this.lastMouseEvent) {\n            tooltipPopupHandler.positionPopupUnderMouseEvent({\n\t\t\t\tpopUpElement: this.tooltipComponentElement!,\n\t\t\t\tgapY,\n\t\t\t\tgapX,\n\t\t\t\tmouseEvent: this.lastMouseEvent,\n\t\t\t}, popupParentElement, documentElement);\n        } else {\n\t\t\tconst position         = this.optionsHandler.getPosition();\n\t\t\tconst keepWithinBounds = this.optionsHandler.isKeepWithinBounds();\n\t\t\tconst isRtl            = this.optionsHandler.isRTL();\n            tooltipPopupHandler.positionPopupByComponent({\n\t\t\t\tpopUpElement : this.tooltipComponentElement!,\n\t\t\t\tsourceElement: this.getBeanInstanceByBeanName( TooltipBeanName.TOOL_TIP_ELEMENT ) as HTMLElement,\n\t\t\t\tposition,\n\t\t\t\tkeepWithinBounds,\n\t\t\t\tgapY,\n\t\t\t\tgapX,\n\t\t\t\talignSide : isRtl ? 'right' : 'left',\n\t\t\t}, popupParentElement, documentElement, null, this.optionsHandler.getArrow());\n        }\n    }\n\n\t private onTooltipMouseEnter(): void {\n        this.isInteractingWithTooltip = true;\n        this.unlockTooltip();\n    }\n\n    private onTooltipMouseLeave(): void {\n        this.isInteractingWithTooltip = false;\n        this.lockTooltip();\n    }\n\n    private onTooltipFocusIn(): void {\n        this.isInteractingWithTooltip = true;\n    }\n\n    private onTooltipFocusOut(event: FocusEvent): void {\n        const parentGui     = this.getBeanInstanceByBeanName( TooltipBeanName.TOOL_TIP_ELEMENT ) as HTMLElement;\n        const tooltipGui    = this.tooltipComponentElement;\n        const relatedTarget = event.relatedTarget as Element;\n\n        if (tooltipGui?.contains(relatedTarget)) { return; }\n\n        this.isInteractingWithTooltip = false;\n\n        if (parentGui.contains(relatedTarget)) {\n            this.startHideTimeout();\n        }else {\n            this.hideTooltip();\n        }\n    }\n\n\tpublic hideTooltip(forceHide?: boolean): void {\n\t\tif (!forceHide && this.isInteractingWithTooltip) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.tooltipComponent) {\n\t\t\tthis.destroyTooltipComponent();\n\t\t\tthis.lastHiddenTimestamp = new Date().getTime();\n\t\t}\n\n\t\tthis.state = TooltipStates.IDLE;\n\t}\n\n\tprivate destroyTooltipComponent(): void {\n\t\tthis.tooltipComponentElement && this.tooltipComponentElement!.classList.add(\n\t\t\t'ZG-tooltipHiding',\n\t\t);\n\n\t\tconst tooltipPopupDestroyFunction = this.tooltipPopupDestroyFunction;\n\t\tconst tooltipComponent = this.tooltipComponent;\n\t\tconst shouldAttachEvents = (this.optionsHandler as ITooltipOptionsHandler).shouldAttachEvents()\n\t\tconst delay = this.tooltipTrigger === TooltipTriggerStates.HOVER ? (this.optionsHandler as ITooltipOptionsHandler).getFadeOutDelayAfterInteraction() : 0;\n\n\t\tif (!shouldAttachEvents) {\n\t\t\ttooltipPopupDestroyFunction && tooltipPopupDestroyFunction!();\n\t\t\tthis.destroyBean(tooltipComponent);\n\t\t}else {\n\t\t\twindow.setTimeout(() => {\n\t\t\t\ttooltipPopupDestroyFunction && tooltipPopupDestroyFunction!();\n\t\t\t\tthis.destroyBean(tooltipComponent);\n\t\t\t}, delay);\n\t\t}\n\t\t\t\n\t\t\n\t\tthis.clearTooltipListeners();\n\t\tthis.tooltipPopupDestroyFunction = undefined;\n\t\tthis.tooltipComponent = undefined;\n\t\tthis.tooltipComponentElement = null\n\n\t\t!this.tooltipDestroy && this.dispatchHideEvent();\n\t}\n\n\tprivate dispatchHideEvent() {\n\t\tthis.dispatchEvent({\n\t\t\ttype         : TooltipEvents.TOOLTIP_HIDE,\n\t\t\tparentElement: this.getBeanInstanceByBeanName( TooltipBeanName.TOOL_TIP_ELEMENT ) as HTMLElement\n\t\t})\n\t}\n\n\tprivate dispatchShowEvent() {\n\t\tthis.dispatchEvent({\n\t\t\ttype          : TooltipEvents.TOOLTIP_SHOW,\n\t\t\tparentElement : this.getBeanInstanceByBeanName( TooltipBeanName.TOOL_TIP_ELEMENT ) as HTMLElement,\n\t\t\ttooltipElement: this.tooltipComponentElement\n\t\t})\n\t}\n\n\tprivate clearTooltipListeners(): void {\n\t\tconst listenrs = [\n\t\t\tthis.tooltipMouseEnterHandler,\n\t\t\tthis.tooltipMouseLeaveHandler,\n\t\t\tthis.tooltipFocusInHandler,\n\t\t\tthis.tooltipFocusOutHandler,\n\t\t];\n\t\tlistenrs.forEach((listener) => listener && listener());\n\t\tthis.tooltipMouseEnterHandler = this.tooltipMouseLeaveHandler = this.tooltipFocusInHandler = this.tooltipFocusOutHandler = null;\n\t}\n\n\tprivate setIdleState(): void {\n\t\tif (this.state === TooltipStates.DISPLAYING) {\n\t\t\tthis.hideTooltip();\n\t\t}\n\n\t\tthis.clearTimeouts();\n\n\t\tthis.state = TooltipStates.IDLE;\n\n\t\tthis.lastMouseEvent = null;\n\t}\n\n\tprivate lockTooltip(): void {\n\t\tconst interactionHideDelay = this.optionsHandler.getInteractionHideDelay();\n\t\tthis.isTooltipLocked = true;\n\t\tthis.interactiveTooltipTimeoutId = window.setTimeout(() => { this.unlockTooltip(); this.setIdleState(); }, interactionHideDelay);\n\t}\n\n\tprivate unlockTooltip(): void {\n\t\tthis.isTooltipLocked = false;\n\t\tthis.clearInteractiveTimeout();\n\t}\n\n\tprivate startHideTimeout(): void {\n\t\tthis.clearHideTimeout();\n\t\tconst hideTooltip = this.optionsHandler.getHideTooltip();\n\t\tif(!hideTooltip){\n\t\t\treturn\n\t\t}\n\t\tthis.tooltipHideTimeoutId = window.setTimeout( this.hideTooltip.bind(this), this.delayForTooltipToHide );\n\t}\n\n\tprivate clearShowTimeout(): void {\n\t\tif (!this.tooltipShowTimeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this.tooltipShowTimeoutId);\n\t\tthis.tooltipShowTimeoutId = undefined;\n\t}\n\n\tprivate clearHideTimeout(): void {\n\t\tif (!this.tooltipHideTimeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this.tooltipHideTimeoutId);\n\t\tthis.tooltipHideTimeoutId = undefined;\n\t}\n\n\tprivate clearInteractiveTimeout(): void {\n\t\tif (!this.interactiveTooltipTimeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this.interactiveTooltipTimeoutId);\n\t\tthis.interactiveTooltipTimeoutId = undefined;\n\t}\n\n\tprivate clearTimeouts(): void {\n\t\tthis.clearShowTimeout();\n\t\tthis.clearHideTimeout();\n\t\tthis.clearInteractiveTimeout();\n\t}\n\n\tprivate getTooltipShowDelay(): number | undefined {\n\t\tconst delay = ( this.optionsHandler as ITooltipOptionsHandler ).getTooltipShowDelay();\n\t\tif (delay != null) {\n\t\t\treturn Math.max(0, delay);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate getTooltipHideDelay(): number | undefined {\n\t\tconst delay = (\n\t\t\tthis.optionsHandler as ITooltipOptionsHandler\n\t\t).getTooltipHideDelay();\n\t\tif (delay != null) {\n\t\t\treturn Math.max(0, delay);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate getTooltipDelay(type: 'show' | 'hide'): number {\n\t\tif (type === 'show') {\n\t\t\treturn (\n\t\t\t\tthis.getTooltipShowDelay() ??\n\t\t\t\tDEFAULT_TOOLTIP_VALUES.DEFAULT_SHOW_DELAY_ON_HOVER\n\t\t\t);\n\t\t} else {\n\t\t\treturn (\n\t\t\t\tthis.getTooltipHideDelay() ??\n\t\t\t\tDEFAULT_TOOLTIP_VALUES.DEFAULT_HIDE_DELAY_AFTER_SHOW\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic getTooltipParams() {\n        return {                                     \n            value              : (this.optionsHandler as ITooltipOptionsHandler).getTooltipValue(),\n            hideTooltipCallback: () => this.hideTooltip(true)\n        };\n    }\n\n\tpublic destroy(): void {\n\t\tif(this.tooltipDestroy) {return;}\n\n\t\tthis.tooltipDestroy = true;\n\n\t\tthis.destroyTooltipComponent();\n\n\t\tsuper.destroy();\n\t}\n}\n","import {  PostConstruct, toggleAttribute } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IToolTipHandler } from \"./Interface/IToolTipHandler\";\nimport { ITooltipOptionsHandler } from \"./Interface/ITooltipOptionsHandler\";\nimport { CustomTooltipHandler } from \"./CustomTooltip\";\nimport { TooltipEvents } from \"./Constants/TooltipEvents\";\n\nexport class ToolTipHandler extends EventEmitter implements IToolTipHandler {\n\n\tprivate element: HTMLElement;\n\n\tprivate tooltip: any;\n\n\tprivate browserTooltips!: boolean;\n\n\tprivate tooltipComponent: CustomTooltipHandler | null = null;\n\n\n\tconstructor(element: HTMLElement) {\n\t\tsuper();\n\t\tthis.element = element;\n\t}\n\n\tpublic setComponent(): void {\n\t\tthis.setupTooltip();\n\t}\n\n\t@PostConstruct()\n\tinit() : void {\n\t\tthis.setComponent();\n\t\tthis.addListener(this.eventHandler, TooltipEvents.TOOLTIP_REFRESH, this.setupTooltip.bind(this));\n\t}\n\n\tprivate setupTooltip(): void {\n\t\tthis.browserTooltips = (this.optionsHandler as ITooltipOptionsHandler).isBrowserTooltipEnabled();\n\t\tthis.updateTooltipText();\n\n\t\tthis.destroyTooltipComponent();\n\n\t\tif (this.browserTooltips) {\n\t\t\tthis.setBrowserTooltip(this.tooltip);\n\t\t} else {\n\t\t\tthis.createTooltip();\n\t\t}\n\t}\n\n\tprivate updateTooltipText(): void {\n\t\tthis.tooltip = (this.optionsHandler as ITooltipOptionsHandler).getTooltipValue();\n\t}\n\n\tprivate setBrowserTooltip(tooltip: string | null) {\n\t\tconst name = 'title';\n\t\tif (tooltip != null && tooltip != '') {\n\t\t\ttoggleAttribute(this.element, name, tooltip);\n\t\t} else {\n\t\t\ttoggleAttribute(this.element, name, null);\n\t\t}\n\t}\n\n\tprivate createTooltip(): void {\n\t\tif (this.tooltipComponent != null) { return; }\n\n        this.tooltipComponent = this.createManagedBean( new CustomTooltipHandler() );\n\t}\n\n\tpublic refreshToolTip() {\n        this.updateTooltipText();\n\n        if (this.browserTooltips) {\n            this.setBrowserTooltip(this.tooltip);\n        }\n    }\n\n\tpublic destroyTooltipComponent() : void {\n\t\tif(this.tooltipComponent) {\n\t\t\tthis.tooltipComponent.destroy();\n\t\t}\n\n\t\ttoggleAttribute(this.element,'title',null);\n\n\t\tthis.tooltipComponent = null;\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.destroyTooltipComponent();\n\t\tsuper.destroy();\n\t}\n}\n","import { TooltipBeanName } from \"./Constants/TooltipBeanName\";\nimport { ITooltipConfiguration } from \"./Interface/ITooltipConfiguration\";\nimport { ITooltipOptionsHandler } from \"./Interface/ITooltipOptionsHandler\";\nimport { DEFAULT_TOOLTIP_VALUES, TooltipTriggerStates } from \"./Constants/DefaultTooltipValues\";\nimport { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nimport { Position } from \"./PopupHandler/CorePopupHandler\";\n\nfunction getCallbackForEvent(eventName: string): string {\n\tif (eventName && eventName.length == 2) {\n\t\treturn eventName;\n\t}\n\treturn `on${eventName[0].toUpperCase()}${eventName.slice(1)}`;\n}\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class TooltipOptionsHandler extends EventEmitter implements ITooltipOptionsHandler {\n\t@AutoWired(TooltipBeanName.TOOL_TIP_OPTIONS) private options!: ITooltipConfiguration;\n\n\t@AutoWired(TooltipBeanName.TOOL_TIP_ELEMENT) private forElement!: HTMLElement;\n\n\tprivate globalEventHandler(eventName: string, event?: any) {\n\t\tconst callbackMethodName = getCallbackForEvent(eventName);\n\t\tif (typeof (this.options as any)[callbackMethodName] === 'function') {\n\t\t\t(this.options as any)[callbackMethodName](event);\n\t\t}\n\t}\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.eventHandler.addGlobalListener(\n\t\t\tthis.globalEventHandler.bind(this),\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tisBrowserTooltipEnabled(): boolean {\n\t\treturn this.options?.browserTooltip ?? false;\n\t}\n\n\tgetTooltipValue(): string {\n\t\treturn this.options?.tooltipValue ?? '';\n\t}\n\n\tisTooltipInteraction(): boolean {\n\t\treturn this.options?.tooltipInteraction ?? false;\n\t}\n\n\tisTooltipMouseTrack(): boolean {\n\t\treturn this.options?.tooltipMouseTrack ?? false;\n\t}\n\n\tgetTriggerState(): TooltipTriggerStates {\n\t\treturn this.options?.tooltipTrigger ?? TooltipTriggerStates.HOVER;\n\t}\n\n\tgetTooltipShowDelay(): number | null {\n\t\treturn this.options?.tooltipShowDelay ?? null;\n\t}\n\n\tgetTooltipHideDelay(): number | null {\n\t\treturn this.options?.tooltipHideDelay ?? null;\n\t}\n\n\tgetTooltipRenderer(): any {\n\t\treturn this.options?.renderer;\n\t}\n\n\tgetTooltipRendererParams(): any {\n\t\treturn this.options?.userRendererParams;\n\t}\n\n\tgetPopupParent(): HTMLElement {\n\t\tif (this.options?.popupParent) {\n\t\t\treturn this.options.popupParent;\n\t\t}\n\n\t\treturn document.body;\n\t}\n\n\tgetDocumentElement(): Document {\n\t\tif (this.forElement) {\n\t\t\treturn this.forElement.ownerDocument ?? document;\n\t\t}\n\n\t\treturn document;\n\t}\n\n\tisRTL() : boolean {\n\t\treturn this.options?.rtl ?? false\n\t}\n\n\tgetPopupClassName(): string {\n\t\treturn this.options?.popupClassName ?? '';\n\t}\n\n\tgetPosition(): Position {\n\t\treturn this.options?.position ?? Position.bottom;\n\t}\n\n\tisKeepWithinBounds() : boolean {\n\t\treturn this.options?.keepWithinBounds ?? true;\n\t}\n\n\tgetGapX() : number {\n\t\treturn this.options?.gapX ?? 5;\n\t}\n\n\tgetGapY() : number {\n\t\treturn this.options?.gapY ?? 10;\n\t}\n\n\tgetInteractionHideDelay() : number {\n\t\treturn this.options?.tooltipInteractionHideDelay ?? DEFAULT_TOOLTIP_VALUES.INTERACTIVE_HIDE_DELAY;\n\t}\n\n\tgetFadeOutDelayAfterInteraction() : number {\n\t\treturn this.options?.fadeOutDelayAfterInteraction ?? DEFAULT_TOOLTIP_VALUES.FADE_OUT_DELAY_AFTER_INTERACTION;\n\t}\n\n\tshouldShowTooltip(): () => boolean {\n\t\treturn this.options?.shouldShowTooltip ?? (() => false);\n\t}\n\n\tgetHideTooltip(){\n\t\treturn this.options?.hideTooltip ?? true;\n\t}\n\t\n\tshouldAttachEvents(): boolean {\n\t\treturn this.options?.shouldAttachEvents ?? true;\n\t}\n\n\tgetTooltipHoverPosition(): boolean {\n\t\treturn this.options.tooltipHoverPosition ?? true;\n\t}\n\n\tgetArrow(): boolean {\n\t\treturn this.options?.arrow ?? false;\n\t}\n\n\tshouldCancelOnEscape() : boolean{\n\t\treturn this.options?.cancelOnEscape ?? true;\n\t}\n\n\tshouldCancelOnMouseDown() : boolean{\n\t\treturn this.options?.cancelOnMouseDown ?? true;\n\t}\n\n\n}","import{AutoWired as e,Bean as t}from\"../Decorator/BeanFactoryDecorator.js\";import{BEAN_NAME as n}from\"../Constants/BeanName.js\";import{EventEmitter as o}from\"../Events/EventEmitter.js\";var r=function(e,t,n,o){var r,a=arguments.length,i=a<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,o);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(i=(a<3?r(i):a>3?r(t,n,i):r(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i};let a=class extends o{getComponentDetails(e,t,o,r){let{componentName:a,frameworkComponent:i,jsComponent:l}=this.getComponentMeta(e,t,o);const s=e=>{const t=this.getBeanInstance(n.USER_COMPONENT_REGISTRY).retrieve(e);t&&(l=t.componentFrameWork?void 0:t.component,i=t.componentFrameWork?t.component:void 0)};if(null!=a&&s(a),null==l&&null==i&&null!=r&&s(r),!l&&!i)return;const m=null==l,c=l||i;return{componentFramework:m,componentClass:c,params:o,propertyName:t,newInstance:()=>this.newInstance(c,m,t,o)}}getComponentMeta(e,t,n){let o=null,r=null,a=null;return(e=>{\"string\"==typeof e?o=e:null!=e&&!0!==e&&(this.getFrameWorkOverrides().isFrameworkComponent(e)?a=e:r=e)})(this.getComponent(e,t)),{componentName:o,frameworkComponent:a,jsComponent:r}}getComponent(e,t){}newInstance(e,t,o,r){var a,i;let l;const s=this.getBeanInstance(n.FRAME_WORK_COMPONENT_WRAPPER),m=this.getBeanInstance(n.COMPONENT_META_DATA_PROVIDER);if(t){const t=m.retrieve(o);l=s.wrap(e,t&&null!==(a=null==t?void 0:t.mandatoryMethodList)&&void 0!==a?a:[],t&&null!==(i=null==t?void 0:t.optionalMethodList)&&void 0!==i?i:[])}else l=new e;return this.initComponent(l,r),l}initComponent(e,t){if(this.context.createBean(e),null!=e.init)return e.init(t)}};r([e(n.BEANS)],a.prototype,\"getBeanInstance\",void 0),a=r([t(n.USER_COMPONENT_HANDLER)],a);export{a as UserComponentHandler};\n//# sourceMappingURL=UserComponentHandler.js.map\n","import { AutoWired, BEAN_NAME, Bean,  getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {   UserComponentHandler, } from '@dg/corecomponent/UserComponentHandler.js';\nimport {   UserComponentRegistry, } from '@dg/corecomponent/UserComponentRegistry.js';\nimport {   ComponentMetadata } from '@dg/corecomponent/ComponentMetadataProvider.js';\n\nexport const enum PropertyName {\n\tTOOL_TIP_RENDERER = 'tooltipRenderer',\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class TooltipUserComponentHandler extends UserComponentHandler {\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n\n\tgetTooltipRendererDetails(item: any, params?: any) {\n\t\treturn this.getComponentDetail( item, PropertyName.TOOL_TIP_RENDERER, params, PropertyName.TOOL_TIP_RENDERER);\n\t}\n\n\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif (\n\t\t\tjsComponent == null &&\n\t\t\tframeworkComponent == null &&\n\t\t\tdefautName != null\n\t\t) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent =\n\t\t\t\t\tthis.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass(\n\t\t\tthis.getComponent(item, propertyName),\n\t\t);\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.TOOL_TIP_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap( component, componentMeta.mandatoryMethodList, componentMeta.optionalMethodList, );\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.TOOL_TIP_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nimport { TooltipBeanName } from \"./Constants/TooltipBeanName\";\nimport { ITooltipConfiguration } from \"./Interface/ITooltipConfiguration\";\nimport { TooltipTriggerStates } from \"./Constants/DefaultTooltipValues\";\nimport { TooltipEvents } from \"./Constants/TooltipEvents\";\nimport { TooltipControllerHandler } from \"./ControllerHandler\";\n\n@Bean(TooltipBeanName.TOOL_TIP_API)\nexport class TooltipAPI extends EventEmitter  {\n\n    // private options !: ITooltipConfiguration\n\n    \n    private destroyCalled = false;\n\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !:  getBeanInstanceByBeanName;\n    @AutoWired(TooltipBeanName.TOOL_TIP_OPTIONS) private options !:  ITooltipConfiguration;\n\n\n\n    setTooltipValue(value : string) : void {\n        if(value) {\n            this.options.tooltipValue = value;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setBrowserTooltipEnabled(enabled : boolean) : void {\n        if(enabled != null) {\n            this.options.browserTooltip = enabled;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTooltipInteraction(tooltipInteraction : boolean) : void {\n        if(tooltipInteraction != null) {\n            this.options.tooltipInteraction = tooltipInteraction;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTooltipMouseTrack(tooltipMouseTrack : boolean) : void {\n        if(tooltipMouseTrack != null) {\n            this.options.tooltipMouseTrack = tooltipMouseTrack;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTriggerState(triggerState : TooltipTriggerStates) : void {\n        if(triggerState != null) {\n            this.options.tooltipTrigger = triggerState;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTooltipShowDelay(tooltipDelay : number) : void {\n        if(tooltipDelay != null) {\n            this.options.tooltipShowDelay = tooltipDelay;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTooltipHideDelay(tooltipDelay : number) : void {\n        if(tooltipDelay != null) {\n            this.options.tooltipHideDelay = tooltipDelay;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTooltipRenderer(renderer : any)  : void {\n        if(renderer) {\n            this.options.renderer = renderer;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setTooltipRendererParams(rendererParams : any) : void {\n        if(rendererParams != null) {\n            this.options.userRendererParams = rendererParams;\n            this.dispatchRefreshEvent();\n        }   \n    }\n\n    setPopupParent(popupParent : HTMLElement) : void {\n        if(popupParent) {\n            this.options.popupParent = popupParent;\n            this.dispatchRefreshEvent();\n        }\n    }\n\n    setDocumentElement(document : Document) : void {\n        if(document) {\n            this.options.documentElement = document;\n            this.dispatchRefreshEvent();\n        }\n    }\n    \n      openByMouse(event : MouseEvent) : void  {\n        this.dispatchEvent({\n            type : TooltipEvents.TOOLTIP_OPEN_BY_MOUSE,\n            event\n        })\n    }\n\n    closeByMouse(event : MouseEvent) : void {\n        this.dispatchEvent({\n            type : TooltipEvents.TOOLTIP_CLOSE_BY_MOUSE,\n            event\n        })\n    }\n\n    open(){\n        this.dispatchEvent({\n            type : TooltipEvents.TOOLTIP_OPEN\n        })\n       \n\n\n    }\n\n    close(){\n        this.dispatchEvent({\n            type : TooltipEvents.TOOLTIP_CLOSE\n        })\n\n    }\n\n    destroy(): void {\n        if(this.destroyCalled) {return};\n\n        this.close();\n\n        this.destroyCalled = true;\n        \n        const controller = this.getBeanInstanceByBeanName(TooltipBeanName.TOOL_TIP_CONTROLLER_HANDLER) as TooltipControllerHandler;\n        const tootipHandler = controller.getTooltipHandler();\n\n        if(tootipHandler) {\n            tootipHandler.destroy();\n        }\n\n        this.context.destroy();  \n\n    }\n\n    private dispatchRefreshEvent() : void {\n        this.dispatchEvent({\n            type : TooltipEvents.TOOLTIP_REFRESH\n        })\n    }\n}","import { getAbsoluteHeight, getAbsoluteWidth, getElementRectWithOffset, setAriaLabel, setAriaRole, IRect } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nexport interface IPosition {\n\tx: number;\n\ty: number;\n\tposition : Position | null;\n\tsourceRect : any;\n\tparentRect : any;\n}\n\nexport enum DIRECTION {\n\tvertical,\n\thorizontal,\n}\n\ninterface CalculatedPosition {\n    top: number;\n    left: number;\n}\n\nexport interface PopupPositionParams {\n\tpopUpElement     : HTMLElement;\n\tgapX            ?: number;\n\tgapY            ?: number;\n\tposition        ?: Position;\n\talignSide       ?: 'left' | 'right';\n\tkeepWithinBounds?: boolean;\n\tupdatePosition  ?: () => IPosition;\n\trelativePosition ?:boolean;\n}\n\nexport const enum Position {\n\tunder       = 'under',\n\tabove       = 'above',\n\tover        = 'over',\n\tleft        = 'left',\n\tright       = 'right',\n\ttop         = 'top',\n\ttopLeft     = 'topLeft',\n\ttopRight    = 'topRight',\n\tbottom      = 'bottom',\n\tbottomLeft  = 'bottomLeft',\n\tbottomRight = 'bottomRight',\n\tleftTop     = 'leftTop',\n\tleftBottom  = 'leftBottom',\n\trightTop    = 'rightTop',\n\trightBottom = 'rightBottom',\n\tauto        = 'auto',\n\tcenter      = 'center',\n}\n\nexport interface AfterGuiAttachedParams {\n\thidePopup?: () => void;\n\tsuppressFocus?: boolean;\n}\n\nexport interface PopupComponentPositionParams extends PopupPositionParams {\n\tsourceElement: HTMLElement;\n}\n\nexport interface Popup {\n\telement: HTMLElement;\n\twrapper: HTMLElement;\n\thideFunction: () => void;\n\tinstanceId: number;\n\talignedToElement: HTMLElement | undefined;\n\trelativeObserver : ResizeObserver | null;\n}\n\nexport interface AddPopupParams {\n    childElement       : HTMLElement;\n\t\n    closedCallback    ?: (e?: MouseEvent | TouchEvent | KeyboardEvent) => void;\n    afterGuiAttached  ?: (params: AfterGuiAttachedParams) => void;\n    positionCallback  ?: () => void;\n    ariaLabel          : string;\n    anchorToElement   ?: HTMLElement;\n    popupParentElement?: HTMLElement;\n    documentElement   ?: Document;\n    rtl               ?: boolean;\n    popupClassName    ?: string;\n}\n\nexport interface AddPopupOutput {\n\thideFunction: () => void;\n}\n\nexport class CorePopupHandler extends EventEmitter {\n\tprotected popupList: Popup[] = [];\n\n\tprotected instanceId = 0;\n\n\tpositionPopupByComponent( params: PopupComponentPositionParams, popupParentElement: HTMLElement = document.body, documentElement: Document = document, fallBackPositions : Position[] | null = null,arrow : boolean = false): void {\n\t\tlet { popUpElement, gapX = 0, gapY = 0, keepWithinBounds, sourceElement, alignSide = 'left', position = 'over', relativePosition} = params;\n\n\t\t\n\n\t\tconst popupIndex = this.getPopupIndex(popUpElement);\n\t\t\n\t\t\n\n\t\tconst updatePosition = () => {\n\n\t\t\tconst sourceRect = sourceElement.getBoundingClientRect();\n\t\t\tconst parentRect = this.getParentRect( popupParentElement, documentElement, ) as DOMRect;\n\n\t\t\tposition = this.flipPositionForAlign(position as Position, alignSide);\n\n\t\t\tposition = this.calculateAllPopupPosition(popUpElement, sourceRect, parentRect, position as Position, gapX, gapY, fallBackPositions)\n\n\t\t\tconst calculatedPosition = (this.calculatePositionByPosition(position as Position, alignSide, gapX as number, gapY as number, sourceRect, parentRect, popUpElement, arrow ));\n\n\t\t\treturn { x : calculatedPosition.left, y : calculatedPosition.top , position : position as any, sourceRect, parentRect};\n\t\t};\n\n\t\t\n\t\tif (popupIndex !== -1) {\n\t\t\tconst popup = this.popupList[popupIndex];\n\t\t\tpopup.alignedToElement = sourceElement;\n\t\t\tif(relativePosition) {\n\t\t\t\tlet observer = new ResizeObserver(() => {\n\t\t\t\t\tthis.positionPopup( { popUpElement, gapX, gapY, keepWithinBounds, updatePosition, }, popupParentElement, documentElement, );\n\t\t\t\t})\n\t\t\t\tpopup.relativeObserver = observer;\n\t\n\t\t\t\tobserver.observe(sourceElement);\n\t\t\t\tobserver.observe(popUpElement);\n\n\t\t\t}\n\t\t}\n\n\t\tthis.positionPopup( { popUpElement, gapX, gapY, keepWithinBounds, updatePosition, }, popupParentElement, documentElement,arrow );\n\t}\n\n\tgetWrapperElement(element: HTMLElement): HTMLElement {\n\t\tconst popupIndex = this.getPopupIndex(element);\n\t\treturn this.popupList[popupIndex].wrapper;\n\t}\n\n\tprivate flipPositionForAlign( position: Position, alignSide: string ): Position {\n\t\tif (alignSide === 'right') {\n\t\t\tswitch (position) {\n\t\t\t\tcase Position.left:\n\t\t\t\t\treturn Position.right;\n\t\t\t\tcase Position.right:\n\t\t\t\t\treturn Position.left;\n\t\t\t\tcase Position.leftTop:\n\t\t\t\t\treturn Position.rightTop;\n\t\t\t\tcase Position.leftBottom:\n\t\t\t\t\treturn Position.rightBottom;\n\t\t\t\tcase Position.rightTop:\n\t\t\t\t\treturn Position.leftTop;\n\t\t\t\tcase Position.rightBottom:\n\t\t\t\t\treturn Position.leftBottom;\n\t\t\t\tdefault:\n\t\t\t\t\treturn position;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn position; \n\t}\n\n\tprivate updateArrow( tooltip: HTMLElement, position: Position, sourceRect: DOMRect, parentRect: DOMRect, finalLeft: number, finalTop: number ) {\n\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"unset\");\n\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"unset\");\n\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"unset\");\n\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"unset\");\n\n\t\tthis.setArrowStyles(tooltip, position);\n\n\t\tconst srcLeft = sourceRect.left - parentRect.left;\n\t\tconst srcTop  = sourceRect.top  - parentRect.top;\n\n\t\tconst srcRight  = srcLeft + sourceRect.width;\n\t\tconst srcBottom = srcTop  + sourceRect.height;\n\n\t\tconst padding = 10;\n\n\t\tlet arrowLeft: number = 0;\n\t\tlet arrowTop: number = 0;\n\n\t\tswitch (position) {\n\t\t\tcase Position.leftTop:\n\t\t\t\tarrowTop = srcTop - finalTop + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.leftBottom:\n\t\t\t\tarrowTop = srcBottom - finalTop - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.left:\n\t\t\t\tarrowTop = srcTop + sourceRect.height / 2 - finalTop;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-right\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.rightTop:\n\t\t\t\tarrowTop = srcTop - finalTop + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.rightBottom:\n\t\t\t\tarrowTop = srcBottom - finalTop - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.right:\n\t\t\t\tarrowTop = srcTop + sourceRect.height / 2 - finalTop;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", `${arrowTop}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.topLeft:\n\t\t\t\tarrowLeft = srcLeft - finalLeft + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.topRight:\n\t\t\t\tarrowLeft = srcRight - finalLeft - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.top:\n\t\t\t\tarrowLeft = srcLeft + sourceRect.width / 2 - finalLeft;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-bottom\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottomLeft:\n\t\t\t\tarrowLeft = srcLeft - finalLeft + padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottomRight:\n\t\t\t\tarrowLeft = srcRight - finalLeft - 2 * padding;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottom:\n\t\t\tcase Position.under:\n\t\t\t\tarrowLeft = srcLeft + sourceRect.width / 2 - finalLeft;\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-top\", \"-5px\");\n\t\t\t\ttooltip.style.setProperty(\"--popover-pointer-left\", `${arrowLeft}px`);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\n\n\n\tpublic calculatePositionByPosition(position : Position, alignSide : 'right' | 'left', gapX : number, gapY : number, sourceRect : DOMRect, parentRect : DOMRect, toolTipElement : HTMLElement, arrow : boolean = false) : CalculatedPosition {\n\t\tlet top = 0;\n\t\tlet left = 0;\n\n\t\tswitch(position) {\n\t\t\tcase Position.left: \n\t\t\t\tleft = (sourceRect.left - parentRect.left) - toolTipElement.offsetWidth - gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top - (toolTipElement.offsetHeight / 2 )) + (sourceRect.height / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.leftTop: \n\t\t\t\tleft = (sourceRect.left - parentRect.left) - toolTipElement.offsetWidth - gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top);\n\t\t\t\tbreak;\n\t\t\tcase Position.leftBottom: \n\t\t\t\tleft = (sourceRect.left - parentRect.left) - toolTipElement.offsetWidth - gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - (toolTipElement.offsetHeight ) + (sourceRect.height);\n\t\t\t\tbreak;\n\t\t\tcase Position.right:\n\t\t\t\tleft = (sourceRect.left - parentRect.left) + sourceRect.width + gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top - (toolTipElement.offsetHeight / 2 )) + (sourceRect.height / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.rightTop:\n\t\t\t\tleft = (sourceRect.left - parentRect.left) + sourceRect.width + gapX;\n\t\t\t\ttop = sourceRect.top - parentRect.top;\n\t\t\t\tbreak;\n\t\t\tcase Position.rightBottom:\n\t\t\t\tleft = (sourceRect.left - parentRect.left) + sourceRect.width + gapX;\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - (toolTipElement.offsetHeight ) + (sourceRect.height);\n\t\t\t\tbreak;\n\t\t\tcase Position.top:\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - toolTipElement.offsetHeight - gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) - (toolTipElement.offsetWidth / 2)) + (sourceRect.width / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.topLeft:\n\t\t\tcase Position.above:\n\t\t\t\ttop = (sourceRect.top - parentRect.top) - toolTipElement.offsetHeight - gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left));\n\t\t\t\tbreak;\n\t\t\tcase Position.topRight:\n\t\t\t\ttop = sourceRect.top - parentRect.top - toolTipElement.offsetHeight - gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) + (sourceRect.width - toolTipElement.offsetWidth));\n\t\t\t\tbreak;\n\t\t\tcase Position.bottom:\n\t\t\t\ttop = (sourceRect.top - parentRect.top) + sourceRect.height + gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) - (toolTipElement.offsetWidth / 2)) + (sourceRect.width / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomLeft:\n\t\t\tcase Position.under:\n\t\t\t\ttop = sourceRect.top - parentRect.top + sourceRect.height + gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left));\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomRight:\n\t\t\t\ttop = sourceRect.top - parentRect.top + sourceRect.height + gapY;\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) + (sourceRect.width - toolTipElement.offsetWidth));\n\t\t\t\tbreak;\n\t\t\tcase Position.over:\n\t\t\t\ttop  = sourceRect.top - parentRect.top;\n\t\t\t\tleft = sourceRect.left - parentRect.left;\n\t\t\t\tif (alignSide === 'right') {\n\t\t\t\t\tleft -= toolTipElement.offsetWidth - sourceRect.width;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase Position.center:\n\t\t\t\tleft = ((sourceRect.left - parentRect.left) - (toolTipElement.offsetWidth / 2)) + (sourceRect.width / 2);\n\t\t\t\ttop = (sourceRect.top - parentRect.top - (toolTipElement.offsetHeight / 2 )) + (sourceRect.height / 2);\n\t\t\t\tbreak;\n\t\t\tcase Position.auto: {\n\t\t\t\tconst calculatedPosition = this.findAutoPosition(alignSide, gapX, gapY, sourceRect, parentRect, toolTipElement);\n\t\t\t\ttop = calculatedPosition.top;\n\t\t\t\tleft = calculatedPosition.left;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.setAlignedStyles(toolTipElement, position);\n\n\t\tconst ARROW_OFFSET = arrow ? 6 : 0;\n\n\t\tswitch (position) {\n\t\t\tcase Position.left:\n\t\t\tcase Position.leftTop:\n\t\t\tcase Position.leftBottom:\n\t\t\t\tleft -= ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.right:\n\t\t\tcase Position.rightTop:\n\t\t\tcase Position.rightBottom:\n\t\t\t\tleft += ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.top:\n\t\t\tcase Position.topLeft:\n\t\t\tcase Position.topRight:\n\t\t\t\ttop -= ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.bottom:\n\t\t\tcase Position.bottomLeft:\n\t\t\tcase Position.bottomRight:\n\t\t\t\ttop += ARROW_OFFSET;\n\t\t\t\tbreak;\n\n\t\t\tcase Position.over:\n\t\t\t\tbreak;\n\n\t\t\tcase Position.center:\n\t\t\tcase Position.auto:\n\t\t\t\tbreak;\n\t\t}\n\n\n\t\treturn {\n\t\t\ttop,\n\t\t\tleft\n\t\t}\n\t}\n\n\tprivate findAutoPosition( alignSide : 'right' | 'left', gapX : number, gapY : number,  sourceRect: DOMRect, parentRect: DOMRect, toolTipElement: HTMLElement ): CalculatedPosition {\n\t\tconst positionsToTry: Position[] = [\n\t\t\t// Position.bottomLeft,\n\t\t\tPosition.bottom,\n\t\t\t// Position.bottomRight,\n\t\t\t// Position.topLeft,\n\t\t\tPosition.top,\n\t\t\t// Position.topRight,\n\t\t\t// Position.leftTop,\n\t\t\tPosition.left,\n\t\t\t// Position.leftBottom,\n\t\t\t// Position.rightTop,\n\t\t\tPosition.right,\n\t\t\t// Position.rightBottom\n\t\t];\n\n\t\tlet bestPosition: CalculatedPosition = { top: 0, left: 0, };\n\n\t\tfor (let i = 0 ;i< positionsToTry.length ;i++) {\n\t\t\tconst position = positionsToTry[i];\n\n\t\t\tconst calculatedPosition = this.calculatePositionByPosition( position, alignSide, gapX, gapY, sourceRect, parentRect, toolTipElement );\n\n\t\t\tconst fitsInParent = calculatedPosition.left >= 0 && calculatedPosition.left + toolTipElement.offsetWidth <= parentRect.width && calculatedPosition.top >= 0 && calculatedPosition.top + toolTipElement.offsetHeight <= parentRect.height;\n\n\t\t\tif (fitsInParent) {\n\t\t\t\tbestPosition = calculatedPosition;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn bestPosition;\n\t}\n\n\tpublic positionPopupUnderMouseEvent( params: PopupPositionParams & { mouseEvent: MouseEvent | Touch; }, popupParentElement: HTMLElement = document.body, documentElement: Document = document , arrow : boolean = false): void {\n\t\tconst { popUpElement, gapX, gapY } = params;\n\n\n\t\tthis.positionPopup({ popUpElement, gapX, gapY, keepWithinBounds: true, updatePosition: () => this.calculatePointerAlign( params.mouseEvent, popupParentElement, documentElement)}, popupParentElement, documentElement, arrow);\n\t}\n\n\tprivate calculatePointerAlign( e: MouseEvent | Touch, popupParentElement: HTMLElement = document.body, documentElement: Document = document, ): { x: number; y: number;  position : any, sourceRect : any, parentRect : any} {\n\t\tconst parentRect = this.getParentRect( popupParentElement, documentElement, );\n\t\treturn {\n\t\t\tx: e.clientX - parentRect.left,\n\t\t\ty: e.clientY - parentRect.top,\n\t\t\tposition : null,\n\t\t\tsourceRect : null,\n\t\t\tparentRect : null\n\t\t};\n\t}\n\n\tpositionPopup( params: PopupPositionParams, popupParentElement: HTMLElement = document.body, documentElement: Document = document,arrow : boolean = false ): void {\n\t\tconst { popUpElement, keepWithinBounds,gapX = 0, gapY = 0, updatePosition } = params;\n\t\tconst lastSize = { width: 0, height: 0 };\n\n\t\tconst updatePopupPosition = () => {\n\t\t\tlet { x, y , position, sourceRect, parentRect} = updatePosition!();\n\n\t\t\tif ( popUpElement.clientWidth === lastSize.width && popUpElement.clientHeight === lastSize.height ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlastSize.width = popUpElement.clientWidth;\n\t\t\tlastSize.height = popUpElement.clientHeight;\n\n\t\t\tx += gapX;\n\n\t\t\ty += gapY\n\n\t\t\tif (keepWithinBounds) {\n\t\t\t\tx = this.ensureXYBoundaries( popUpElement, x, DIRECTION.horizontal, popupParentElement, documentElement, );\n\t\t\t\ty = this.ensureXYBoundaries( popUpElement, y, DIRECTION.vertical, popupParentElement, documentElement, );\n\t\t\t}\n\n\t\t\tarrow && position && this.updateArrow(popUpElement, position, sourceRect, parentRect, x, y);\n\t\t\tpopUpElement.style.left = `${x}px`;\n\t\t\tpopUpElement.style.top = `${y}px`;\n\t\t};\n\n\t\tupdatePopupPosition();\n\t}\n\n\taddPopup(params: AddPopupParams): AddPopupOutput {\n\t\tlet { childElement, ariaLabel, positionCallback, anchorToElement, afterGuiAttached, popupParentElement = document.body, documentElement = document, rtl, popupClassName } = params;\n\n\t\tif (!documentElement) {\n\t\t\treturn { hideFunction: () => {} };\n\t\t}\n\n\t\tconst popupIndex = this.getPopupIndex(childElement);\n\n\t\tif (popupIndex !== -1) {\n\t\t\tconst popup = this.popupList[popupIndex];\n\t\t\treturn { hideFunction: popup.hideFunction };\n\t\t}\n\n\t\t// this.initialisePopupPosition(childElement, popupParentElement);\n\n\t\tconst wrapperElement = this.createPopupWrapper(childElement, ariaLabel, popupClassName, rtl, popupParentElement);\n\t\tconst removePopup = () => {\n\t\t\tif (popupParentElement) {\n\t\t\t\tif (popupParentElement.contains(wrapperElement)) {\n\t\t\t\t\tpopupParentElement.removeChild(wrapperElement);\n\t\t\t\t}\n\t\t\t\tthis.removePopupFromPopupList(childElement);\n\t\t\t}\n\t\t};\n\n\t\tif (afterGuiAttached) {\n\t\t\tafterGuiAttached({\n\t\t\t\thidePopup: removePopup,\n\t\t\t});\n\t\t}\n\n\t\tthis.popupList.push({ element: childElement, wrapper: wrapperElement, hideFunction: removePopup, instanceId: this.instanceId++, alignedToElement: anchorToElement, relativeObserver : null });\n\n\t\tif (positionCallback) {\n\t\t\tpositionCallback();\n\t\t}\n\n\t\treturn {\n\t\t\thideFunction: removePopup,\n\t\t};\n\t}\n\n\tprotected setArrowStyles(popupElement: HTMLElement, positioned: Position | null) {\n\t\t// remove all pointer classes\n\t\tconst classes = [\n\t\t\t\"dg-popover__pointer--right-top\",\n\t\t\t\"dg-popover__pointer--right-middle\",\n\t\t\t\"dg-popover__pointer--right-bottom\",\n\t\t\t\"dg-popover__pointer--left-top\",\n\t\t\t\"dg-popover__pointer--left-middle\",\n\t\t\t\"dg-popover__pointer--left-bottom\",\n\t\t\t\"dg-popover__pointer--top-left\",\n\t\t\t\"dg-popover__pointer--top-center\",\n\t\t\t\"dg-popover__pointer--top-right\",\n\t\t\t\"dg-popover__pointer--bottom-left\",\n\t\t\t\"dg-popover__pointer--bottom-center\",\n\t\t\t\"dg-popover__pointer--bottom-right\",\n\t\t];\n\n\t\tclasses.forEach(cls => popupElement.classList.remove(cls));\n\n\t\tif (!positioned) return;\n\n\t\tswitch (positioned) {\n\n\t\t\t// RIGHT SIDE POINTERS\n\t\t\tcase Position.right:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--left-middle\");\n\t\t\t\tbreak;\n\t\t\tcase Position.rightTop:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--left-top\");\n\t\t\t\tbreak;\n\t\t\tcase Position.rightBottom:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--left-bottom\");\n\t\t\t\tbreak;\n\n\t\t\t// LEFT SIDE POINTERS\n\t\t\tcase Position.left:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--right-middle\");\n\t\t\t\tbreak;\n\t\t\tcase Position.leftTop:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--right-top\");\n\t\t\t\tbreak;\n\t\t\tcase Position.leftBottom:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--right-bottom\");\n\t\t\t\tbreak;\n\n\t\t\t// TOP SIDE POINTERS\n\t\t\tcase Position.top:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--bottom-center\");\n\t\t\t\tbreak;\n\t\t\tcase Position.topLeft:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--bottom-left\");\n\t\t\t\tbreak;\n\t\t\tcase Position.topRight:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--bottom-right\");\n\t\t\t\tbreak;\n\n\t\t\t// BOTTOM SIDE POINTERS\n\t\t\tcase Position.bottom:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--top-center\");\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomLeft:\n\t\t\tcase Position.under:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--top-left\");\n\t\t\t\tbreak;\n\t\t\tcase Position.bottomRight:\n\t\t\t\tpopupElement.classList.add(\"dg-popover__pointer--top-right\");\n\t\t\t\tbreak;\n\n\t\t\t// No arrow\n\t\t\tcase Position.over:\n\t\t\tcase Position.above:\n\t\t\tcase Position.center:\n\t\t\tcase Position.auto:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\tprotected setAlignedStyles( popupElement: HTMLElement, positioned: Position | null, ) {\n\t\tconst popupIndex = this.getPopupIndex(popupElement);\n\n\t\tif (popupIndex === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst popup = this.popupList[popupIndex];\n\n\t\tconst { alignedToElement } = popup;\n\n\t\tif (!alignedToElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst positions = [ Position.left, Position.leftTop, Position.leftBottom, Position.right, Position.rightTop, Position.rightBottom, Position.top, Position.topLeft, Position.topRight, Position.bottom, Position.bottomLeft, Position.bottomRight, Position.over, Position.above, Position.under];\n\n\t\tpositions.forEach((position) => {\n\t\t\talignedToElement.classList.remove('ZG-has-popup');\n\t\t\talignedToElement.classList.remove(\n\t\t\t\t`ZG-has-popup-positioned-${position}`,\n\t\t\t);\n\t\t\tpopupElement.classList.remove(`ZG-popup-positioned-${position}`);\n\t\t});\n\n\t\tif (!positioned) {\n\t\t\treturn;\n\t\t}\n\n\t\talignedToElement.classList.add('ZG-has-popup');\n\t\talignedToElement.classList.add(`ZG-has-popup-positioned-${positioned}`);\n\t\tpopupElement.classList.add(`ZG-popup-positioned-${positioned}`);\n\t}\n\n\tprotected getPopupIndex(element: HTMLElement): number {\n\t\treturn this.popupList.findIndex((popup) => popup.element === element);\n\t}\n\n\tprotected initialisePopupPosition(\n\t\telement: HTMLElement,\n\t\tpopupParentElement: HTMLElement = document.body,\n\t): void {\n\t\tconst popupParentElementRect =\n\t\t\tpopupParentElement.getBoundingClientRect();\n\n\t\tif (element) {\n\t\t\telement.style.top = `${popupParentElementRect.top * -1}px`;\n\t\t\telement.style.left = `${popupParentElementRect.left * -1}px`;\n\t\t}\n\t}\n\n\tprotected calculateAllPopupPosition( popupElement: HTMLElement, targetRect: DOMRect, parentRect: DOMRect, position: Position, gapX: number, gapY: number, userFallbacks : Position[] | null ): Position {\n\t\tconst spaceRightTarget = parentRect.right - targetRect.right;\n\t\tconst spaceLeftTarget  = targetRect.left - parentRect.left;\n\t\tconst spaceAboveTarget = targetRect.top - parentRect.top;\n\t\tconst spaceBelowTarget = parentRect.bottom - targetRect.bottom;\n\t\n\t\tconst spaceNeededHorizontal = popupElement.offsetWidth + gapX;\n\t\tconst spaceNeededVertical = popupElement.offsetHeight + gapY;\n\t\n\t\tconst isSpaceAvailableRight = spaceRightTarget > spaceNeededHorizontal;\n\t\tconst isSpaceAvailableLeft = spaceLeftTarget > spaceNeededHorizontal;\n\t\tconst isSpaceAvailableAbove = spaceAboveTarget > spaceNeededVertical;\n\t\tconst isSpaceAvailableBelow = spaceBelowTarget > spaceNeededVertical;\n\t\n\t\tconst fallbackMap: Record<Position, Position[]> = {\n\t\t\t[Position.bottomLeft] : [Position.topLeft, Position.right, Position.left],\n\t\t\t[Position.bottomRight]: [Position.topRight, Position.right, Position.left],\n\t\t\t[Position.topLeft]    : [Position.bottomLeft, Position.right, Position.left],\n\t\t\t[Position.topRight]   : [Position.bottomRight, Position.right, Position.left],\n\t\t\t[Position.leftTop]    : [Position.top, Position.right, Position.left],\n\t\t\t[Position.leftBottom] : [Position.leftTop, Position.rightBottom, Position.rightTop],\n\t\t\t[Position.rightTop]   : [Position.rightBottom, Position.leftTop, Position.leftBottom],\n\t\t\t[Position.rightBottom]: [Position.rightTop, Position.leftBottom, Position.leftTop],\n\t\t\t[Position.bottom]     : [Position.top, Position.left, Position.right],\n\t\t\t[Position.top]        : [Position.bottom, Position.right, Position.left],\n\t\t\t[Position.left]       : [Position.right, Position.top, Position.bottom],\n\t\t\t[Position.right]      : [Position.left, Position.top, Position.bottom],\n\t\t\t[Position.auto]       : [Position.bottom, Position.right, Position.left, Position.top],\n\t\t\t[Position.center]     : [Position.center],\n\t\t\t[Position.under]      : [],\n\t\t\t[Position.above]      : [],\n\t\t\t[Position.over]       : []\n\t\t};\n\t\n\t\tconst isPositionAvailable = (pos: Position): boolean => {\n\t\t\tswitch (pos) {\n\t\t\t\tcase Position.left:\n\t\t\t\t\treturn isSpaceAvailableLeft;\n\t\t\t\tcase Position.right:\n\t\t\t\t\treturn isSpaceAvailableRight;\n\t\t\t\tcase Position.top:\n\t\t\t\t\treturn isSpaceAvailableAbove;\n\t\t\t\tcase Position.bottom:\n\t\t\t\t\treturn isSpaceAvailableBelow;\n\t\t\t\tcase Position.topLeft:\n\t\t\t\t\treturn isSpaceAvailableAbove;\n\t\t\t\tcase Position.topRight:\n\t\t\t\t\treturn isSpaceAvailableAbove;\n\t\t\t\tcase Position.bottomLeft:\n\t\t\t\t\treturn isSpaceAvailableBelow;\n\t\t\t\tcase Position.bottomRight:\n\t\t\t\t\treturn isSpaceAvailableBelow;\n\t\t\t\tcase Position.leftTop:\n\t\t\t\t\treturn isSpaceAvailableLeft && isSpaceAvailableBelow;\n\t\t\t\tcase Position.leftBottom:\n\t\t\t\t\treturn isSpaceAvailableLeft && isSpaceAvailableAbove;\n\t\t\t\tcase Position.rightTop:\n\t\t\t\t\treturn isSpaceAvailableRight && isSpaceAvailableBelow;\n\t\t\t\tcase Position.rightBottom:\n\t\t\t\t\treturn isSpaceAvailableRight && isSpaceAvailableAbove;\n\t\t\t\tcase Position.center:\n\t\t\t\t\treturn true; // Center doesn't depend on space availability\n\t\t\t\tcase Position.auto:\n\t\t\t\t\treturn isSpaceAvailableRight || isSpaceAvailableLeft || isSpaceAvailableAbove || isSpaceAvailableBelow;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\t\n\t\tif (isPositionAvailable(position)) {\n\t\t\treturn position;\n\t\t}\n\t\n\t\tconst fallbacks = userFallbacks ? userFallbacks :fallbackMap[position] || [];\n\t\tfor (const fallback of fallbacks) {\n\t\t\tif (isPositionAvailable(fallback)) {\n\t\t\t\treturn fallback;\n\t\t\t}\n\t\t}\n\t\n\t\t// Default fallback to the best available position\n\t\tif (isSpaceAvailableRight) return Position.right;\n\t\tif (isSpaceAvailableLeft) return Position.left;\n\t\tif (isSpaceAvailableBelow) return Position.bottom;\n\t\tif (isSpaceAvailableAbove) return Position.top;\n\t\n\t\tconst spaces = {\n\t\t\t[Position.right]: spaceRightTarget,\n\t\t\t[Position.left]: spaceLeftTarget,\n\t\t\t[Position.top]: spaceAboveTarget,\n\t\t\t[Position.bottom]: spaceBelowTarget\n\t\t};\n\n\t\tconst directionWithMostSpace = Object.entries(spaces)\n\t\t\t.sort((a, b) => b[1] - a[1])[0][0]; \n\n\t\treturn directionWithMostSpace as Position;\n\t}\n\t\n\tprotected calculatePopupPosition( popupElement: HTMLElement, targetRect: DOMRect, parentRect: DOMRect, position: Position, gapY: number, ): Position {\n\t\tconst spaceBelowTarget = parentRect.bottom - targetRect.bottom;\n\t\tconst spaceAboveTarget = targetRect.top - parentRect.top;\n\t\tconst spaceNeeded = popupElement.offsetHeight + gapY;\n\t\tconst isSpaceAvailibleUnder = spaceBelowTarget > spaceNeeded;\n\t\tconst isSpaceAvailibleAbove =\n\t\t\tspaceAboveTarget > spaceNeeded ||\n\t\t\tspaceAboveTarget > spaceBelowTarget;\n\n\t\tif ( position === Position.top || position === Position.topLeft || position === Position.topRight ) {\n\t\t\tif (isSpaceAvailibleAbove) {\n\t\t\t\treturn Position.above;\n\t\t\t}\n\t\t}\n\t\tif (isSpaceAvailibleUnder) {\n\t\t\treturn Position.bottom;\n\t\t}\n\n\t\tif (isSpaceAvailibleAbove) {\n\t\t\treturn Position.top;\n\t\t}\n\n\t\treturn Position.bottom;\n\t}\n\n\tprotected calculateLeftOrRightPopupPosition( popupElement: HTMLElement, targetRect: DOMRect, parentRect: DOMRect, position: Position, gapX: number, ): Position {\n\t\tconst spaceRightTarget = parentRect.right - targetRect.right;\n\t\tconst spaceLeftTarget = targetRect.left - parentRect.left;\n\t\tconst spaceNeeded = popupElement.offsetWidth + gapX;\n\t\tconst isSpaceAvailibleRight = spaceRightTarget > spaceNeeded;\n\t\tconst isSpaceAvailibleLeft =\n\t\t\tspaceLeftTarget > spaceNeeded || spaceLeftTarget > spaceRightTarget;\n\n\t\tif (position === Position.left) {\n\t\t\tif (isSpaceAvailibleLeft) {\n\t\t\t\treturn Position.left;\n\t\t\t}\n\t\t}\n\n\t\tif (isSpaceAvailibleRight) {\n\t\t\treturn Position.right;\n\t\t}\n\n\t\tif (isSpaceAvailibleLeft) {\n\t\t\treturn Position.left;\n\t\t}\n\n\t\treturn Position.right;\n\t}\n\tprivate ensureXYBoundaries(\n\t\tpopUpElement: HTMLElement,\n\t\tposition: number,\n\t\tdirection: DIRECTION,\n\t\tpopupParentElement: HTMLElement = document.body,\n\t\tdocumentElement: Document = document,\n\t): number {\n\t\tconst isVertical = direction === DIRECTION.vertical;\n\t\tconst sizeProperty = isVertical ? 'clientHeight' : 'clientWidth';\n\t\tconst anchorProperty = isVertical ? 'top' : 'left';\n\t\tconst offsetProperty = isVertical ? 'offsetHeight' : 'offsetWidth';\n\t\tconst scrollPositionProperty = isVertical ? 'scrollTop' : 'scrollLeft';\n\n\t\tconst docElement = documentElement.documentElement;\n\t\tlet popupParent = popupParentElement;\n\t\tif(this.isPopUpElementIsStatic(popupParent)) {\n\t\t\tpopupParent.offsetParent && (popupParent = popupParent.offsetParent as HTMLElement);\n\t\t}\n\t\tconst parentRect = this.getParentRect(popupParentElement, documentElement);\n\t\tconst documentRect =\n\t\t\tdocumentElement.documentElement.getBoundingClientRect();\n\n\t\tconst isBody = popupParent === documentElement.body;\n\n\t\tconst offsetSize = popUpElement[offsetProperty];\n\t\tconst getSize = isVertical ? getAbsoluteHeight : getAbsoluteWidth;\n\n\t\tlet sizeOfParent = isBody\n\t\t\t? getSize(docElement) + docElement[scrollPositionProperty]\n\t\t\t: popupParent[sizeProperty];\n\n\t\tif (isBody) {\n\t\t\tsizeOfParent -= Math.abs(\n\t\t\t\tdocumentRect[anchorProperty] - parentRect[anchorProperty],\n\t\t\t);\n\t\t}\n\n\t\tconst max = sizeOfParent - offsetSize;\n\n\t\treturn Math.min(Math.max(position, 0), Math.abs(max));\n\t}\n\n\tprotected getParentRect(\n\t\tpopupParentElement: HTMLElement = document.body,\n\t\tdocumentElement: Document = document,\n\t): IRect {\n\t\tlet popupParent = popupParentElement;\n\n\t\tif (popupParent === documentElement.body) {\n\t\t\tpopupParent = documentElement.documentElement;\n\t\t} else if (this.isPopUpElementIsStatic(popupParent)) {\n\t\t\tpopupParent = popupParent.offsetParent as HTMLElement;\n\t\t}\n\n\t\treturn getElementRectWithOffset(popupParent);\n\t}\n\n\tprivate isPopUpElementIsStatic(element: HTMLElement): boolean {\n\t\treturn getComputedStyle(element).position === 'static';\n\t}\n\n\tprotected createPopupWrapper( element: HTMLElement, ariaLabel: string, popupClassName : string = '', rtl : boolean = false, popupParentElement: HTMLElement = document.body, ): HTMLElement {\n\t\tconst wrapperElement = document.createElement('div');\n        (popupClassName && popupClassName != '') && wrapperElement.classList.add(popupClassName);\n\t\twrapperElement.classList.add('ZG-popup');\n\t\telement.classList.add( rtl ? 'ZG-rtl' : 'ZG-ltr', 'ZG-popup-child', );\n\n\t\tif (!element.hasAttribute('role')) {\n\t\t\tsetAriaRole(element, 'dialog');\n\t\t}\n\n\t\tsetAriaLabel(element, ariaLabel);\n\n\t\twrapperElement.appendChild(element);\n\t\tpopupParentElement.appendChild(wrapperElement);\n\n\t\treturn wrapperElement;\n\t}\n\n\tprotected removePopupFromPopupList(element: HTMLElement): void {\n\t\tconst popupEntry = this.popupList.find((popup) => popup.element === element);\n\t\tif (popupEntry?.relativeObserver) {\n\t\t\tpopupEntry.relativeObserver.disconnect();\n\t\t}\n\t\tthis.setAlignedStyles(element, null);\n\t\tthis.popupList = this.popupList.filter(\n\t\t\t(popup) => popup.element !== element,\n\t\t);\n\t}\n}\n","import { Bean } from \"@dg/corecomponent\";\nimport { TooltipBeanName } from \"./Constants/TooltipBeanName\";\nimport { CorePopupHandler } from \"./PopupHandler/CorePopupHandler\";\n\n@Bean(TooltipBeanName.TOOL_TIP_POP_HANDLER)\nexport class TooltipPopupHandler extends CorePopupHandler {\n   \n}","import{BEAN_NAME as e}from\"../Constants/BeanName.js\";import{EventEmitter as t}from\"../Events/EventEmitter.js\";import{Components as s,getFunctionName as i}from\"../Decorator/ReferenceSelector.js\";import{cloneNodeList as r,forEachAttributeInNamedNodeMap as o,isNodeOrHTMLElement as n,setVisible as l,setDisplayed as a}from\"../utils/dom.js\";import{AutoWired as c,PreConstruct as h}from\"../Decorator/BeanFactoryDecorator.js\";var u=function(e,t,s,i){var r,o=arguments.length,n=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,s):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)n=Reflect.decorate(e,t,s,i);else for(var l=e.length-1;l>=0;l--)(r=e[l])&&(n=(o<3?r(n):o>3?r(t,s,n):r(t,s))||n);return o>3&&n&&Object.defineProperty(t,s,n),n};class d extends t{constructor(e){super(),this.displayed=!0,this.visible=!0,e&&this.setTemplate(e)}preConstructMethods(){this.createChildComponentsPreConstruct()}createChildComponentsFromTags(e,t){r(e.childNodes).forEach((s=>{if(!(s instanceof HTMLElement))return;const i=this.createComponentFromElement(s,(e=>{e.getGui()&&this.copyAttributesFromNode(s,e.getGui())}),t);if(i){if(i.addItems&&s.children.length){this.createChildComponentsFromTags(s,t);const e=Array.prototype.slice.call(s.children);i.addItems(e)}this.swapComponentForNode(i,e,s)}else s.childNodes&&this.createChildComponentsFromTags(s,t)}))}createComponentFromElement(e,t,s){const i=e.nodeName,r=s?s[e.getAttribute(\"ref\")]:void 0,o=this.componentRegistry.getComponentClass(i);if(o){d.elementGettingCreated=e;const s=new o(r);return s.setParentComponent(this),this.createBean(s,null,t),s}return null}copyAttributesFromNode(e,t){o(e.attributes,((e,s)=>{\"class\"!==e?t.setAttribute(e,s):(s||\"\").split(\" \").forEach((e=>t.classList.add(e)))}))}swapComponentForNode(e,t,s){const i=e.getGui();t.replaceChild(i,s),this.addDestroyFunc(this.destroyBean.bind(this,e)),this.swapInComponentForRefSelectors(e,s)}swapInComponentForRefSelectors(e,t){const s=this;this.iterateOverQuerySelectors((i=>{s[i.attributeName]===t&&(s[i.attributeName]=e)}))}iterateOverQuerySelectors(e){let t=Object.getPrototypeOf(this);for(;null!=t;){const r=Reflect.get(t,s.METADATA),o=i(t.constructor);r&&Reflect.has(r,o)&&Reflect.has(r[o],\"querySelectors\")&&r[o].querySelectors.forEach((t=>e(t))),t=Object.getPrototypeOf(t)}}createChildComponentsPreConstruct(){this.getGui()&&this.createChildComponentsFromTags(this.getGui())}activateTabIndex(e){e||(e=[]),e.length||e.push(this.getGui()),e.forEach((e=>e.setAttribute(\"tabindex\",\"0\")))}wireQuerySelectors(){if(!this.eGui)return;const e=this;this.iterateOverQuerySelectors((t=>{const s=s=>e[t.attributeName]=s;if(t.refSelector&&this.getAttribute(\"ref\")===t.refSelector)s(this.eGui);else{const e=this.eGui.querySelector(t.querySelector);e&&s(e.Component||e)}}))}setGui(e){this.eGui=e}queryForHtmlElement(e){return this.eGui.querySelector(e)}queryForHtmlInputElement(e){return this.eGui.querySelector(e)}destroy(){this.parentComponent&&(this.parentComponent=void 0),super.destroy()}setTemplate(e,t){this.setTemplateFromElement(e,t)}setTemplateFromElement(e,t){this.eGui=e,this.eGui.Component=this,this.wireQuerySelectors(),this.getContext()&&this.createChildComponentsFromTags(this.getGui(),t)}getGui(){return this.eGui}getFocusableElement(){return this.eGui}getAriaElement(){return this.getFocusableElement()}setParentComponent(e){this.parentComponent=e}getParentComponent(){return this.parentComponent}appendChild(e,t=this.eGui){if(null!=e)if(n(e))t.appendChild(e);else{const s=e;t.appendChild(s.getGui())}}isDisplayed(){return this.displayed}setVisible(e,t={}){if(e!==this.visible){this.visible=e;const{skipAriaHidden:s}=t;l(this.eGui,e,{skipAriaHidden:s})}}setDisplayed(e,t={}){if(e!==this.displayed){this.displayed=e;const{skipAriaHidden:s}=t;a(this.eGui,e,{skipAriaHidden:s});const i={type:d.EVENT_DISPLAYED_CHANGED,visible:this.displayed};this.dispatchEvent(i)}}addGuiEventListener(e,t,s){this.eGui.addEventListener(e,t,s),this.addDestroyFunc((()=>this.eGui.removeEventListener(e,t)))}addCssClass(e){const t=this.getGui(),s=(e||\"\").split(\" \");null==t||t.classList.add(...s)}removeCssClass(e){const t=this.getGui(),s=(e||\"\").split(\" \");null==t||t.classList.remove(...s)}containsCssClass(e){const t=this.getGui();return!!t&&t.classList.contains(e)}addOrRemoveCssClass(e,t){if(e){if(e.indexOf(\" \")>=0){const s=(e||\"\").split(\" \");if(s.length>1)return void s.forEach((e=>this.addOrRemoveCssClass(e,t)))}if(e.length){const s=this.getGui();s&&s.classList.toggle(e,t)}}}getAttribute(e){const t=this.getGui();return t?t.getAttribute(e):null}getRefElement(e){return this.queryForHtmlElement(`[ref=\"${e}\"]`)}}d.EVENT_DISPLAYED_CHANGED=\"displayedChanged\",u([c(e.COMPONENT_REGISTRY)],d.prototype,\"componentRegistry\",void 0),u([h()],d.prototype,\"preConstructMethods\",null);export{d as Component};\n//# sourceMappingURL=Component.js.map\n","import {Component} from '@dg/corecomponent/Component.js'\n\nfunction getTemplate() {\n    // Create the tooltip element directly\n    const tooltipDiv = document.createElement('div');\n    tooltipDiv.className = 'ZCC-tooltip';\n    \n    return tooltipDiv;\n}\nexport class TooltipRenderer extends Component {\n    \n\tinit(params : any ) : void {\n        this.setTemplate(getTemplate())\n        this.setTooltip(params.value);\n    }\n\n    getElement() : HTMLElement {\n        return this.getGui();\n    }\n\n    private setTooltip(value : string) : void {\n        const element = this.getGui();\n\n        if(element) {\n            element.textContent = value\n        }\n    }\n}\n","import {  Bean } from \"@dg/corecomponent\";\nimport {   EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TooltipBeanName } from \"./Constants/TooltipBeanName\";\nimport { ToolTipHandler } from \"./TooltipHandler\";\n\n@Bean(TooltipBeanName.TOOL_TIP_CONTROLLER_HANDLER)\nexport class TooltipControllerHandler extends EventEmitter {\n\n    private tooltipHandler!: ToolTipHandler;\n\n    registerTooltipHandler(handler : ToolTipHandler) : void {\n        this.tooltipHandler = handler;\n    }\n\n    getTooltipHandler() : ToolTipHandler {\n        return this.tooltipHandler;\n    }\n}","import { BEAN_NAME,traverseObject } from \"@dg/corecomponent\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport {EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport {ComponentsRegistry} from \"@dg/corecomponent/ComponentRegistry.js\";\nimport {Context,} from \"@dg/corecomponent/Context.js\";\nimport { ITooltipAPI } from \"./Interface/ITolltipAPI\";\nimport { ITooltipConfiguration } from \"./Interface/ITooltipConfiguration\";\nimport { ToolTipHandler } from \"./TooltipHandler\";\nimport { TooltipBeanName } from \"./Constants/TooltipBeanName\";\nimport { TooltipOptionsHandler } from \"./TooltipOptionsHandler\";\nimport { TooltipUserComponentHandler } from \"./Components/TooltipUserComponentHandler\";\nimport { TooltipAPI } from \"./TooltipAPI\";\nimport { TooltipPopupHandler } from \"./TooltipPopHandler\";\nimport { TooltipRenderer } from \"./Components/TooltipRenderer\";\nimport { TooltipControllerHandler } from './ControllerHandler';\n\nexport interface IUserParams {\n\tglobalEventListener?: Function;\n\tframeworkOverrides?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n}\n\nexport class Tooltip {\n    public api !: ITooltipAPI;\n\tconstructor(element : HTMLElement,configuration: ITooltipConfiguration, params?: IUserParams) {\n        const setContextApi = (api : ITooltipAPI) => {\n            this.api = api;\n        }\n\t\tnew TooltipCoreComponent().initializeTooltip(\n\t\t\telement,\n\t\t\tconfiguration,\n\t\t\tsetContextApi,\n\t\t\tparams,\n\t\t);\n\t}\n}\nclass TooltipCoreComponent {\n\tinitializeTooltip(element : HTMLElement, configuration: ITooltipConfiguration,  callBack : CallableFunction, params: IUserParams = {}): void {\n\t\tconst userConfigurations = this.createuserConfiguration(\n            element,\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t);\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n\t\t\n\t\tthis.registryDefaultComponent(context);\n\n        const tooltip = context.createBean(new ToolTipHandler(element));\n\n        this.registerHandler(context, tooltip);\n        \n        this.setApi(context, callBack);\n\n        (window as any).context = context;\n\t}\n\n    private setApi(context : Context, callBack : CallableFunction) : void {\n        const api = context.getBean(TooltipBeanName.TOOL_TIP_API) as ITooltipAPI;\n        callBack && callBack(api);\n    }\n\n    private registerHandler(context : Context, handler : ToolTipHandler) : void {\n        const controller = context.getBean(TooltipBeanName.TOOL_TIP_CONTROLLER_HANDLER) as TooltipControllerHandler;\n        controller.registerTooltipHandler(handler);\n    } \n\n\tprivate CreateBeanClasses(): Set<any> {\n\t\treturn new Set([\n\t\t\tTooltipOptionsHandler,\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tTooltipUserComponentHandler,\n\t\t\tTooltipAPI,\n\t\t\tEventHandler,\n\t\t\tTooltipPopupHandler,\n\t\t\tComponentMetadataProvider,\n\t\t\tTooltipControllerHandler,\n\t\t]);\n\t}\n\n\tprivate registryDefaultComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean( BEAN_NAME.USER_COMPONENT_REGISTRY ) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n\t\t\ttooltipRenderer : TooltipRenderer\n\t\t};\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\tprivate createuserConfiguration( element : HTMLElement, configuration: any, params: IUserParams, ): {\n\t\ttooltipElement           : HTMLElement,\n\t\ttooltipOptions            : any;\n\t\tframeWorkOverrides       : IFrameworkOverrides | null;\n\t\tglobalEventListener      : Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\ttooltipElement: element,\n\t\t\ttooltipOptions : configuration,\n\t\t\tframeWorkOverrides,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n}\n","import {  Bean } from \"@dg/corecomponent\";\nimport { ChipTooltipHandlerType } from \"./chip-tooltip-handler.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Tooltip } from \"../../../../Tooltip/src/Tooltip\";\nimport { ChipBeanConstants } from \"../../constants/chip-constants\";\nimport { TooltipTriggerStates } from \"../../../../Tooltip/src/Constants/DefaultTooltipValues\";\nimport { ITooltipConfiguration } from \"../../../../Tooltip/src/Interface/ITooltipConfiguration\";\n\n\n\n@Bean(ChipBeanConstants.CHIP_TOOLTIP_HANDLER)\nexport class ChipTooltipHandler extends EventEmitter implements ChipTooltipHandlerType {\n    private tooltipComponent: any | null = null;\n    // private tooltipTimeoutId: number | null = null;\n    // private openState: boolean = false;\n\n\n    createToolTip(Component: HTMLElement): void {\n        if (this.tooltipComponent) {\n            this.destroyTooltip();\n\n        }\n        const tooolTipConfiguration  : ITooltipConfiguration = {\n            popupParent: this.optionsHandler.getTooltipAppendto(),\n            tooltipValue: this.optionsHandler.getTooltipMessage(),\n            shouldShowTooltip: () => true,\n            shouldAttachEvents: true,\n            position: this.optionsHandler.getTooltipPosition(),\n            gapX: 9,\n            gapY: 7,\n            tooltipHoverPosition: false,\n            hideTooltip : false,\n            tooltipTrigger      : TooltipTriggerStates.HOVER,\n            tooltipShowDelay : 0\n        }\n\n        this.tooltipComponent = new Tooltip(Component, tooolTipConfiguration);\n    }\n\n    openToolTip(): void {\n        // if (this.openState) {\n        //     this.destroyTooltip();\n        //     this.openState = false;\n        // }\n\n        // if (!this.tooltipComponent) {\n        //     return;\n        // }\n\n        // this.tooltipComponent.api.open();\n        // this.openState = true;\n        // // const tooltipDelay = this.optionsHandler.getTooltipHideDelay();\n\n        // if (this.tooltipTimeoutId) {\n        //     clearTimeout(this.tooltipTimeoutId);\n        //     this.tooltipTimeoutId = null;\n        // }\n\n        // this.tooltipTimeoutId = window.setTimeout(() => {\n        //     this.destroyTooltip();\n        //     this.tooltipTimeoutId = null;\n        // }, tooltipDelay);\n    }\n\n    destroyTooltip(): void {\n        if (!this.tooltipComponent) {\n            return;\n        }\n\n        this.tooltipComponent.api.destroy();\n        // this.openState = false;\n        // this.tooltipComponent = null;\n        // if (this.tooltipTimeoutId) {\n        //     clearTimeout(this.tooltipTimeoutId);\n        //     this.tooltipTimeoutId = null;\n        // }\n    }\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { IChipConfiguration } from \"./chip-configuration.types\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ChipUserComponentHandler, PropertyName } from \"./src/core/model/chip-user-component-handler\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ChipAPI } from \"./src/core/model/chip-api\";\nimport { ChipOptionHandler } from \"./src/core/model/chip-options-handler\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { ChipThumbNailView } from \"./src/core/chip-thumbnail/chip-thumbnail-view\";\nimport { ChipRemoveView } from \"./src/core/chip-remove/chip-remove-view\";\nimport { ChipStateHandler } from \"./src/core/model/chip-state-handler\";\nimport { ChipIconRenderer } from \"./src/core/user-component/chip-icon-renderer\";\nimport { ChipControllerHandler } from \"./src/core/model/chip-controller-handler\";\nimport { ChipTooltipHandler } from \"./src/core/model/chip-tooltip-handler\";\n\nlet nextInstanceId = 1;\n\n\nexport class ChipCoreComponent {\n\tinitialize( configuration: IChipConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\t\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n        // Model classes\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n\t\tthis.registerCoreComponent(context);\n        // Default user compoent registry\n\t\tthis.registerDefaultUserComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tlet beanList = [\n            ChipAPI,\n            ChipOptionHandler,\n            ChipUserComponentHandler,\n            ChipStateHandler,\n            ChipControllerHandler,\n\n\t\t\tComponentsRegistry,\n\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n\t\t\tEventHandler,\n\t\t\tChipTooltipHandler,\n            \n\t\t];\n\t\treturn new Set(beanList);\n\t}\n\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): {\n\t\tconfiguration: any;\n\t\tframeWorkOverrides: IFrameworkOverrides | null;\n\t\tglobalEventListener: Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t\tinstanceID : string;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n            [PropertyName.REMOVE_CHIP_RENDERER] : ChipIconRenderer,\n            [PropertyName.THUMBNAIL_CHIP_RENDERER] : ChipIconRenderer\n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'chip-thumbnail',\n\t\t\tcomponentClass: ChipThumbNailView,\n\t\t},\n        {\n            componentName: 'chip-remove',\n            componentClass : ChipRemoveView\n        }\n    ];\n\n\treturn components;\n}\n\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { IChipConfiguration } from \"./chip-configuration.types\";\nimport { ChipAPITypes } from \"./src/core/model/chip-api.types\";\nimport { ChipBeanConstants } from \"./src/constants/chip-constants\";\nimport { ChipRootView } from \"./src/core/chip-root/chip-root-view\";\nimport { ChipCoreComponent } from \"./chip-core-component\";\n\n\nexport class Chip {\n\tpublic api: ChipAPITypes | undefined;\n\tconstructor(configuration: IChipConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(ChipBeanConstants.CHIP_API) as ChipAPITypes;\n            context.createBean(new ChipRootView(configuration.appendTo));\n\t\t};\n\t\tnew ChipCoreComponent().initialize(configuration, params, createUI);\n\t}\n}","const LinkBeanConstants = {\n    LINK_CONFIGURATION : 'configuration',\n    LINK_API : 'linkApi',\n    LINK_STATE : 'linkState',\n    LINK_CONTROLLER_HANDLER : 'linkControllerHandler'\n}\n\nexport {\n    LinkBeanConstants\n}","interface IValue{\n    value: string | HTMLElement;\n}\n\nexport interface IRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\ninterface ILinkConfiguration {\n    appendTo ?: HTMLElement;\n    href     ?: string;\n    target ?: linkTarget;//target\n    value ?: IValue| string; //value\n    type ?: ILinkType; //type\n    title ?: boolean; //title\n\n    readOnly ?: boolean;\n    disabled ?: boolean;\n    editable ?: boolean;\n    \n    // onClick ?: listenerCallback; //events\n\n    onClick ?:(event :any) =>void;\n    onBlur ?:(event :any) =>void;\n    onFocus ?:(event :any) =>void;\n    onContextMenu ?:(event :any) =>void;\n    onMouseDown ?:(event :any) =>void;\n    onChange ?:(oldValue: string, newValue: string, eventOrigin?: LinkEventOrigin) => void;\n\n\n    //onfocus\n    //keyboard navigation -> on Enter open new tab\n    // rel // string | string[] with validation\n    ariaLabel ?: string;\n\n    instanceID ?: string;//\n\n    //css \n    underline ?: boolean;\n\n    isInEditorPanel ?:  boolean;\n\n    //commonConfig \n    rtl ?:  boolean;\n    format ?: string;\n    label ?: string;\n    description ?: string;\n    ariaLabelledby ?: string;\n    descriptionRenderer ?: {}; // need to discuss\n    descriptionRendererParams       ?: object,\n    generateEmptyDom ?: boolean,\n\n    showErrorState                 ?: boolean;\n    status                         ?: 'error' | \"none\";\n    validationMessage              ?: string;\n    ariaDescribedby                ?: string;\n    validationMessageRenderer      ?: new() => ILinkErrorRenderer ;\n    validationMessageRendererParams?: object;\n\n    labelRenderer ?: { new(): IRenderer } | undefined;\n    labelRendererParams ?: object;\n\n    required ?: boolean;\n\n\n}\n\nexport interface ILinkErrorRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\n\n// type ILinkType = 'mail' | 'telephone' | 'file'\ntype ILinkType = 'mail' | 'telephone' | 'file' | 'url' | 'whatsapp' | 'sms' | 'facetime' | 'skype' | 'ftp' | 'element' | 'javascript';\n\ntype LinkEventOrigin = 'api' | 'ui';\n\ntype listenerCallback = (event : Event) => void;\n\n// type linkTarget = '_blank' | '_self' | '_parent' | '_top' | string // frame validation no need\ntype linkTarget = '_blank' | '_self' | '_parent' | '_top' |'none'| string // frame validation no need\n\nfunction getAnchorHref(type: ILinkType, value: string): string {\n    switch (type) {\n        case 'mail':\n            return `mailto:${value}`;\n        case 'telephone':\n            return `tel:${value}`;\n        case 'file':\n            return `/${value}`;\n        case 'url':\n            return value.startsWith('http://') || value.startsWith('https://') ? value : `http://${value}`;\n        case 'whatsapp':\n            return `https://wa.me/${value}`;\n        case 'sms':\n            return `sms:${value}`;\n        case 'facetime':\n            return `facetime:${value}`;\n        case 'skype':\n            return `skype:${value}?call`;\n        case 'ftp':\n            return `ftp://${value}`;\n        case 'element':\n            return `#${value}`;\n        case 'javascript':\n            return `javascript:${value}`;\n        default:\n            return ''; \n    }\n}\nfunction getClassName(type : any) {\n    const typeToClassMap = {\n        mail        : 'dg-email__root',\n        telephone   : 'dg-telephone__root',\n        file        : 'dg-file__root',\n        url         : 'dg-url__root',\n        whatsapp    : 'dg-whatsapp__root',\n        sms         : 'dg-sms__root',\n        facetime    : 'dg-facetime__root',\n        skype       : 'dg-skype__root',\n        ftp         : 'dg-ftp__root',\n        element     : 'dg-element__root',\n        javascript  : 'dg-javascript__root'\n    };\n\n    return (typeToClassMap as any)[type] || 'dg-default__root';\n}\n\n\nfunction setMaxVisibleLines(anchorElement :  any){\n    setTimeout(()=>{\n        const computedStyles    = window.getComputedStyle(anchorElement);\n        const fontSize          = parseFloat(computedStyles.fontSize);\n        const lineHeight        = parseFloat(computedStyles.lineHeight) || fontSize * 1.2;\n        const containerHeight   = anchorElement.clientHeight;\n        const maxLines          = Math.floor(containerHeight / lineHeight)\n        anchorElement.style.overflow = 'hidden';\n        anchorElement.style.webkitLineClamp = maxLines.toString(); \n    })\n}\nconst linkProperties= [\n    'appendTo', \n    'href',     \n    'target', \n    'value', \n    'type', \n    'title', \n    'readOnly', \n    'disabled', \n    'editable',\n    'onClick',\n    'onBlur',\n    'onFocus',\n    'ariaLabel', \n    'instanceID', \n    'underline', \n    'isInEditorPanel', \n    'rtl', \n    'format', \n    'label',\n    'description', \n    \"required\",\n    \"label\"\n]\nexport {\n    ILinkConfiguration,\n    listenerCallback,\n    linkTarget,\n    IValue,\n    getAnchorHref,\n    getClassName,\n    linkProperties,\n    setMaxVisibleLines,\n    LinkEventOrigin\n}\n\n","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { LinkBeanConstants } from \"../../constants/link-constants\";\nimport { ILinkConfiguration, ILinkErrorRenderer, LinkEventOrigin, linkProperties, linkTarget, listenerCallback } from \"../../link-configuration.types\";\nimport { LinkOptionHandlerTypes } from \"./link-option-handler.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nclass LinkOptionHandler  extends EventEmitter implements LinkOptionHandlerTypes{\n\n    @AutoWired(LinkBeanConstants.LINK_CONFIGURATION) configuration !: ILinkConfiguration;\n    private initialValue !:  string;\n    getHref() : string {\n        return this.configuration.href ?? \"\";\n    }\n\n    getAriaLabel(): string {\n        return this.configuration.ariaLabel ?? \"\";\n    }\n    getAppendTo() : HTMLElement {\n        return this.configuration.appendTo ?? document.body;\n    }\n\n    getTarget() : linkTarget {\n        return this.configuration?.target ?? '_self';\n    }\n\n    getUndlerLine() : boolean {\n        return this.configuration.underline ?? false;\n    }\n\n    getValue() : string{\n        return typeof this.configuration.value === 'string' ? this.configuration.value : \"\";\n    }\n\n    getType() : string {\n        return this.configuration.type ?? \"url\";\n    }\n\n    isTooltipEnabled() : boolean {\n        return this.configuration.title ?? false;\n    }\n\n    isReadOnly() : boolean {\n        return this.configuration.readOnly ?? false;\n    }\n\n    isDisabled() : boolean {\n        return this.configuration.disabled ??  false;\n    }\n\n    isEditable() : boolean {\n        return this.configuration.editable ?? false;\n    }\n\n    getClickCallback() : listenerCallback {\n        return this.configuration.onClick  || (() => {});\n    }\n\n    getOnBlurCallback() {\n        return this.configuration.onBlur;\n    }\n\n    updateAnchorText(value : string) : void {\n        this.configuration.value = value;\n    }\n\n    isInEditorPanel(): boolean {\n        return this.configuration.isInEditorPanel ?? false;\n    }\n\n    isRTL(): boolean {\n        return this.configuration.rtl ?? false;\n    }\n\n    setDisabled(value : boolean): void {\n        this.configuration.disabled = value;\n    }\n\n    setInitailValue(value: any): void {\n        this.initialValue = value;\n    }\n    getInitailValue(): string {\n        return this.initialValue ?? \"\";\n    }\n\n    onBlur(event: FocusEvent): void {\n        if(this.configuration.onBlur){\n            this.configuration.onBlur(event);\n        }\n        \n    }\n    onFocus(event: FocusEvent): void {\n        if(this.configuration.onFocus){\n            return this.configuration?.onFocus(event);\n        }\n    }\n    onClick(event: MouseEvent): void {\n        if(this.configuration.onClick){\n            return this.configuration?.onClick(event);\n        }\n    }\n\n    onMouseDown(event: MouseEvent): void {\n        if(this.configuration.onMouseDown){\n            return this.configuration.onMouseDown(event);\n        }\n    }\n\n    onChange(oldValue: string, newValue: string, eventOrigin: LinkEventOrigin = 'ui'): void {\n        const onChangeHandler = this.configuration.onChange;\n        if (!onChangeHandler) {\n            return;\n        }\n        onChangeHandler(oldValue, newValue, eventOrigin);\n    }\n\n    onContextMenu(event: MouseEvent): void {\n        if(this.configuration.onContextMenu){\n            return this.configuration.onContextMenu(event);\n        }\n    }\n\n    getFormat(): string | null {\n        return this.configuration.format || null;\n    }\n    updateProperties(options: ILinkConfiguration): void {\n        const userProperty = Object.keys(options);\n        for(let i = 0; i < userProperty.length; i++){\n            const userKey = userProperty[i]\n            const isValidProperty = linkProperties.includes(userKey);\n            if(isValidProperty){\n                (this.configuration as any)[userKey] = (options as any)[userKey];\n            }  else {\n                console.warn(`Invalid property ${userKey} in options. Ignoring.`);\n            }\n        }\n\n        this.dispatchEvent({\n            type : 'PROPERTY_CHANGED'\n        })\n    }\n\n    getLabel(): string {\n        return this.configuration.label ?? \"\"    \n    }\n    getDescription(): string {\n        return this.configuration.description ?? \"\"    \n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n    getAriaLabelledby(): string {\n        return this.configuration.ariaLabelledby?? \"CheckBox label\"    \n    }\n\n    getDescriptionRenderer() {\n        // return this.configuration.descriptionRenderer ?? '';\n        return this.configuration?.descriptionRenderer;\n    }\n    getDescriptionRendererParams() {\n        // return this.configuration.descriptionRendererParams ?? '';\n        return this.configuration?.descriptionRendererParams;\n    }\n\n    shouldGenerateEmptyDom(): boolean {\n        return this.configuration?.generateEmptyDom ?? false;\n    }\n\n    showErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getAriaDescribedby(): string {\n        return this.configuration.ariaDescribedby ?? '';\n    }\n\n    getValidationMessage(): string {\n        return this.configuration.validationMessage ?? '';\n    }\n\n    getValidationMessageRenderer(): ( new() => ILinkErrorRenderer ) | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n}\n\nexport {\n    LinkOptionHandler\n}","const maxIteraction = 20;\nfunction formatValue(value : string, format : string) {\n    if (typeof format !== 'string' || !format) {\n        return value;\n    }\n    if (value === '') {\n        return '';\n    }\n    let xCount = format.split('').filter(char => char === 'x').length;\n    if (value.length > xCount) {\n        return value;\n    }\n    let matchCount = 0;\n    let formattedValue = '';\n    const iteration = Math.min(format.length, maxIteraction);\n    for (let index = 0; index < iteration; index++) {\n        formattedValue += (format[index] === 'x') ? value[matchCount++] : format[index];\n        if (matchCount === value.length) break;\n    }\n    return formattedValue;\n}\nexport {\n    formatValue\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../modules/CSSRegistry\";\n\nfunction getMutliLineUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n    const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n    return generateUtilityClass('text', slots.slot, slots.modifiers,globalNameSpace as string[]);\n  }\ninterface OwnerStateType {\n    selected: boolean;\n    disabled : boolean;\n    readonly : boolean;\n}\nfunction setFocusAtFirst(textareaElement : HTMLTextAreaElement | undefined) {\n    if (textareaElement) {\n        textareaElement.focus({ preventScroll: true });\n        textareaElement.setSelectionRange(0, 0);\n    }\n}\n\nfunction setFocusAtLast(textareaElement : HTMLTextAreaElement | undefined , scrollPrevented ?: boolean) {\n    if (textareaElement && textareaElement.value.length > 0) {\n        if(scrollPrevented){\n        textareaElement.focus({ preventScroll: true });\n        }\n        else{\n            textareaElement.focus();\n        }\n        textareaElement.setSelectionRange(textareaElement.value.length, textareaElement.value.length);\n    }\n}\nfunction selectAllText(textareaElement : HTMLTextAreaElement |  undefined) {\n    if (textareaElement && textareaElement.tagName === 'TEXTAREA') {\n        textareaElement.focus();\n        textareaElement.focus({ preventScroll: true });\n        textareaElement.select();\n    }\n}\n\nfunction getCapitalizedString(text :  string) : string {\n    return  text.split('\\n').map(line => line.split(' ').map(word => word ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() : '' ).join(' ')).join('\\n');\n}\nfunction getFormattedText(value :  string,format ?: string) : string{\n    let text = value;\n    switch (format) {\n        case 'capitalize':\n            text = getCapitalizedString(text);\n            break;\n        case 'lower':\n            text = text.toLowerCase();\n            break;\n        case 'upper':\n            text = text.toUpperCase();\n            break;\n        case 'sentence':\n            text = text .split('\\n') .map(line => line ? line.charAt(0).toUpperCase() + line.slice(1).toLowerCase() : '' ) .join('\\n');\n            break;\n        case 'none':\n        default:\n            break;\n    }\n    return text;\n}\n\nfunction applyLineClamp(element : HTMLElement, lineClampValue :  number) {\n    const supportsLineClamp = 'webkitLineClamp' in document.documentElement.style;\n  \n    if (supportsLineClamp) {\n\n      element.style.display = '-webkit-box';\n      element.style.webkitBoxOrient = 'vertical';\n      element.style.webkitLineClamp = `${lineClampValue}`;\n      element.style.overflow = 'hidden';\n    } else {\n      const lineHeight = parseInt(window.getComputedStyle(element).lineHeight);\n      const maxHeight = lineHeight * lineClampValue;\n  \n      element.style.maxHeight = `${maxHeight}px`;\n      element.style.overflow = 'hidden';\n      element.style.display = 'block';\n  \n      const ellipsis = document.createElement('span');\n      ellipsis.textContent = '...';\n      element.appendChild(ellipsis);\n  \n      while (element.scrollHeight > element.offsetHeight) {\n        const text = element.innerText;\n        element.innerText = text.replace(/\\W*\\s(\\S)*$/, '...');\n      }\n    }\n  }\n\n\nfunction calculateMaxLines(spanElement :  HTMLElement) {\n    const computedStyles = window.getComputedStyle(spanElement);\n    const fontSize = parseFloat(computedStyles.fontSize);\n    const lineHeight = parseFloat(computedStyles.lineHeight) || fontSize * 1.2;\n    const containerHeight = spanElement.clientHeight;\n    const maxLines = Math.floor(containerHeight / lineHeight);\n    return maxLines;\n}\n\nfunction onElementAppended(targetElement : HTMLElement, callback : CallableFunction) : void {\n  const observer = new MutationObserver((mutations, observerInstance) => {\n\n    for (const mutation of mutations) {\n      for (const node of mutation.addedNodes) {\n        // Check if the node is the target or contains it\n        if (node === targetElement || node.contains(targetElement)) {\n          callback(targetElement);\n          observerInstance.disconnect(); // Stop observing after first match\n          return;\n        }\n      }\n    }\n  });\n\n  observer.observe(document.body, {\n    childList: true,\n    subtree: true\n  });\n}\n\nexport function onElementNodeAppended( element: HTMLElement, callback: (el: HTMLElement) => void ): void {\n  // Save original methods\n  const originalAppendChild = Node.prototype.appendChild;\n  const originalInsertBefore = Node.prototype.insertBefore;\n\n  // Called on each append/insert\n  function handleInsert(_parent: Node, child: Node) {\n    // Check if the appended node is the target or contains it\n    if (child === element || child.contains(element)) {\n      restore();        // Restore original methods (stop monkey patching)\n      callback(child as HTMLElement);  // Call the callback with the appended element\n    }\n  }\n\n  // Restore the original DOM insertion methods\n  function restore() {\n    Node.prototype.appendChild = originalAppendChild;\n    Node.prototype.insertBefore = originalInsertBefore;\n  }\n\n  // Monkey-patch appendChild\n  (Node as any).prototype.appendChild = function(this: Node, child: Node): Node {\n    const result = originalAppendChild.call(this, child);  // Append first\n    handleInsert(this, child);                            // Then call callback\n    return result;\n  };\n\n  (Node as any).prototype.insertBefore = function(this: Node, newNode: Node, referenceNode: Node | null): Node {\n    const result = originalInsertBefore.call(this, newNode, referenceNode);  // Insert first\n    handleInsert(this, newNode);                                             // Then callback\n    return result;\n  };\n}\n\n\n\nexport { \n    getMutliLineUtilityClass,\n    OwnerStateType,\n    setFocusAtFirst,\n    setFocusAtLast,\n    selectAllText,\n    getFormattedText,\n    calculateMaxLines,\n    applyLineClamp,\n    onElementAppended\n}","import { composeClasses, generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\ninterface OwnerStateType {\n    disabled : boolean;\n}\n\nfunction getTextUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n    const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n    return generateUtilityClass('text', slots.slot, slots.modifiers,globalNameSpace as string[]);\n  }\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'root',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getTextUtilityClass );\n};\n\nexport {\n    useUtilityClasses,\n    OwnerStateType,\n    getTextUtilityClass\n}","const MULTI_TEXT_BEAN_NAME = {\n\tMULTI_LINE_API: 'MultilineAPI',\n\tMULTI_LINE_CONFIGURATION: 'configuration',\n\tCSSCLASSNAMEGENERATOR: 'CSSClassNameGenartor',\n\tMULTI_LINE_ADJUSTER_HANDLER: 'MultilineAdjusterHandler',\n\tFORMATTER: 'formatter',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tMULTI_LINE_EVENT_HANDLER: 'MultilineEventHandler',\n\tMULTI_LINE_CONTROLLER_HANDLER: 'MultilineControllerHandler',\n}\nexport {\n    MULTI_TEXT_BEAN_NAME\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { MULTI_TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { MultilineRootController } from \"../multiline-root/multiline-root-controller\";\nimport { RenderMultilineRootController } from \"../render-multiline-root/render-multiline-root-controller\";\n\n\n@Bean(MULTI_TEXT_BEAN_NAME.MULTI_LINE_CONTROLLER_HANDLER)\nclass MultilineControllerHandler extends EventEmitter {\n\tprivate textCtrl !: MultilineRootController | RenderMultilineRootController;\n\tregisterMultiline(textCtrl: MultilineRootController | RenderMultilineRootController): void {\n\t\tthis.textCtrl = textCtrl;\n\t}\n\n\tgetMultilineCtrl(): MultilineRootController | RenderMultilineRootController {\n\t\treturn this.textCtrl;\n\t}\n}\n\nexport {\n    MultilineControllerHandler\n}","\nimport { AutoWired, BEAN_NAME, setAriaDisabled, setAriaLabel } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { TextComponentType } from \"./multiline-root-types\";\nimport { MultilineOptionsHandlerTypes } from \"../model/multiline-options-handler.types\";\nimport { onElementAppended, OwnerStateType } from \"../utility\";\nimport { useUtilityClasses } from \"./multiline-root-classes\";\nimport { MultilineControllerHandler } from \"../model/multiline-controller\";\nimport { MULTI_TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IMultilineConfiguration } from \"../../multiline-configuration.types\";\nimport type { MultilineStateManager } from \"../model/multiline-state-manager\";\n\nclass MultilineRootController extends AbstractController<TextComponentType> {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: MultilineOptionsHandlerTypes;\n    @AutoWired(MULTI_TEXT_BEAN_NAME.MULTI_LINE_CONTROLLER_HANDLER) controllerHandler !: MultilineControllerHandler;\n    @AutoWired('stateManager') private stateManager !: MultilineStateManager;\n\n\n\n    init(): void {\n        this.registerEvent();\n        this.refresh();\n        this.controllerHandler.registerMultiline(this);\n\n        const isAutosize = this.optionsHandler.getAutoSize();\n\n        isAutosize && onElementAppended(this.component?.getElement()!, () => {\n            this.dispatchEvent({\n                type : \"DOM_APPENDED\"\n            })\n        })\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n        this.addErrorClassName();\n    }\n\n     private addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.component!.getElement().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n    registerEvent(){\n    }\n    \n    private applyClasses() {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.component?.addOrRemoveCssClassName(classes.root);\n        this.component?.getElement().classList.add('dg-textarea__root');\n        this.component?.getElement().classList.add('dg-field__root');\n    }\n\n    private setAccessibility() : void { \n        const inputElement         = this.component?.getElement()\n        const ariaLabel       = this.optionsHandler.getAriaLabel();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n\n    setAutosize(){\n        const inputElement = this.component?.getRootElement();\n        if(inputElement){\n            inputElement.style.height = 'auto';\n            const elementViewportHeight       = Math.ceil(parseFloat(getComputedStyle(inputElement).height));\n            const absoluteScrollDifference    = Math.ceil(parseFloat(getComputedStyle(inputElement).height)) - Math.floor(parseFloat(getComputedStyle(inputElement).height));\n            const scrollHeight                = inputElement.scrollHeight +  absoluteScrollDifference;\n            inputElement.style.height = Math.max(elementViewportHeight,scrollHeight)+\"px\";\n        }\n    }\n    getElement() : HTMLElement| undefined{\n        return this.component?.getElement() ;\n    }\n    getRootElement() {\n        return this.component?.getRootElement();\n    }\n    getValue() : string | number {\n        return this.getRootElement()?.value ?? '';\n    }\n    private getOwnerState() : OwnerStateType {\n        const selected = this.optionsHandler.isSelected();\n        const disabled = this.optionsHandler.isDisabled();\n        const readonly = this.optionsHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readonly\n        }\n    }\n    updateProperties(options : IMultilineConfiguration ,  force ?: boolean){\n        this.applyClasses();\n        this.optionsHandler.updateProperties(options);\n        const isDisabled    = this.optionsHandler.isDisabled();\n        const isReadOnly    = this.optionsHandler.isReadOnly();\n        if( (!isDisabled && !isReadOnly ) || force){\n            this.refresh(force);\n        }\n    }\n    getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-text__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-text__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-text__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-text__description\"\n\t\t\t}\n\t\t};\n    }\n    getCharacterCount(): number {\n        return  this.getRootElement()?.textContent?.length || 0;\n    }\n    appendText(text: string |  number, force ?: boolean): void {\n        const rootElement   = this.getRootElement() as HTMLTextAreaElement | null;\n        const readOnly      = this.optionsHandler.isReadOnly();\n        if(rootElement && (!readOnly || force)){\n            this.setValue(rootElement.value + text.toString(),force);\n        }\n    }\n    setValue(value :  string |  number , force ?: boolean) {\n        const isDisabled    = this.optionsHandler.isDisabled();\n        const isReadOnly    = this.optionsHandler.isReadOnly();\n        if( (!isDisabled && !isReadOnly) || force ){\n            const rootElement = this.getRootElement();\n            rootElement && (rootElement.value =value.toString()); \n        }\n    }\n    updateMinValue() {\n        const rootElement = this.getRootElement();\n        if(rootElement){\n            rootElement.setAttribute('aria-min',`${this.optionsHandler.getMinCount()}`)\n        }\n    }\n    updateMaxValue() {\n        const rootElement   = this.getRootElement();\n        const maxCount      = this.optionsHandler.getMaxCount();\n        if (maxCount && rootElement) {\n            rootElement.setAttribute('aria-max',`${maxCount}`)\n        }\n    }\n\n    updatePlaceholder() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.placeholder = this.optionsHandler.getPlaceHolder());\n    }\n    updateRequired() {\n        const rootElement       = this.getRootElement();\n        const isRequired        = this.optionsHandler.isRequired();\n        if (rootElement) {\n            rootElement.setAttribute('aria-required', `${isRequired}`)\n            this.dispatchEvent({ type: 'PROPERTY_CHANGED' });\n           \n        }\n    }\n    updateAriaLabel() {\n        const ariaLabel       = this.optionsHandler.getAriaLabel();\n        const inputElement    = this.getRootElement();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n    updateDisabled() {\n        const isDisabled =  this.optionsHandler.isDisabled();\n       this.disable(isDisabled)\n    }\n\n    updateReadOnly() {\n        const isReadOnly    = this.optionsHandler.isReadOnly();\n        const element       = this.getRootElement();\n        if (element) {\n            element.readOnly = isReadOnly;\n        }\n    }\n    updateValue(force ?: boolean) {\n        const defaultValue    = this.optionsHandler.getDefaultValue();\n        const element         = this.getRootElement();\n        if(element) {\n            this.setValue(defaultValue,force);\n        };\n    }\n    updateLabel() {\n        const label =  this.getElement()?.querySelector('label');\n        const spanElement =  label?.querySelector('span');\n        if(label && spanElement) {\n            const labelText =  this.optionsHandler.getLabel();\n            spanElement.textContent =  labelText;\n        }\n    }\n\n    updateDescription(){\n        const description =  this.getElement()?.querySelector('.dg-field__description');\n        if(description) {\n            const descriptionText =  this.optionsHandler.getDescription();\n            description.textContent =  descriptionText;\n        }\n    }\n    \n    private refresh(force ?: boolean) : void { \n        this.applyClasses();\n        this.setAccessibility();\n\n        this.updateMinValue();\n        this.updateMaxValue();\n        this.updatePlaceholder();\n        this.updateRequired();\n        this.updateDisabled();\n        this.updateAriaLabel();\n        this.updateValue(force);\n        this.updateLabel();\n        this.updateDescription();\n\n    }\n    disable(value: boolean): void {\n        const element = this.getRootElement();\n        const rootElement = this.component?.getElement();\n        if(!element) return ;\n        rootElement!.classList.toggle('dg-input__status--disabled', value);\n        element.classList.toggle('dg-text__user-text--disabled', value === true);\n        element.disabled = value;\n        this.optionsHandler.setDisabled(value);\n        setAriaDisabled(element,value);\n    }\n    resetValue()   : void {\n        const initialValue =  this.optionsHandler.getDefaultValue();\n        (initialValue.length>1) && this.setValue(initialValue);\n    }\n    hide(subElements?: string[]): void {\n        const element = this.getElement();\n        if (!element) return;\n    \n        if (!subElements || subElements.length === 0) {\n            element.style.display = 'none';\n            return;\n        }\n    \n        subElements.forEach(sub => {\n            if (sub === 'label') {\n                this.hideLabel();\n            } else if (sub === 'description') {\n                this.hideDescription();\n            }\n        });\n    }\n    \n    show(subElements?: string[]): void {\n        const element = this.getElement();\n        if (!element) return;\n    \n        if (!subElements || subElements.length === 0) {\n            element.style.display = 'block';\n            return;\n        }\n    \n        subElements.forEach(sub => {\n            if (sub === 'label') {\n                this.showLabel();\n            } else if (sub === 'description') {\n                this.showDescription();\n            }\n        });\n    }\n    \n    hideLabel(){\n        const label = this.getElement()?.querySelector('.dg-field__label') as HTMLElement;\n        label && (label.style.display='none')\n    }\n    hideDescription(){\n        const description = this.getElement()?.querySelector('.dg-field__description') as HTMLElement;\n        description && (description.style.display = 'none');\n    }\n    showLabel(){\n        const label = this.getElement()?.querySelector('.dg-field__label') as HTMLElement;\n        label && (label.style.display='block')\n    }\n    showDescription(){\n        const description = this.getElement()?.querySelector('.dg-field__description') as HTMLElement;\n        description && (description.style.display = 'block')\n    }\n\n\n    clear() :  void {\n        this.setValue('')\n    }\n}\n\nexport {\n    MultilineRootController\n}","\nimport { AutoWired, BEAN_NAME, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { TextComponentType } from \"./multiline-root-types\";\nimport { MultilineRootController } from \"./multiline-root-controller\";\nimport { MultilineOptionsHandlerTypes } from \"../model/multiline-options-handler.types\";\n\nconst multiTag ='multiTag'\nconst rootTemplate = ( props :  any,emptyDom :  boolean) => {\n    const div = document.createElement(\"div\");\n    if (emptyDom || props.label) {\n        const textLabel = document.createElement(\"text-label\");\n        textLabel.setAttribute(\"ref\", 'label');\n        div.appendChild(textLabel);\n    }\n    const divWrapper = document.createElement(\"div\");\n    divWrapper.classList.add('dg-text__container');\n    divWrapper.classList.add('dg-field__container');\n    const textInput = document.createElement(\"text-area-element\");\n    textInput.setAttribute('ref',multiTag);\n    (props?.rtl) && (div.setAttribute('dir','rtl'));\n    divWrapper.appendChild(textInput);\n    div.append(divWrapper);\n    if (emptyDom || props.helper) {\n        const textHelper = document.createElement(\"text-helper\");\n        textHelper.setAttribute(\"ref\", 'description');\n        div.appendChild(textHelper);\n    }\n\n    if(emptyDom || props.error) {\n        const errorElement = document.createElement(\"multiline-error\");\n        errorElement.setAttribute(\"ref\", 'error');\n        div.appendChild(errorElement);\n    }\n    return div;\n}\n\nclass MutliLineRootComponent  extends Component{\n    private componentHolder : HTMLElement |  null;\n    @queryAssignedNodes(multiTag) private multiTags : any ;\n    constructor(appendTo ?: HTMLElement) {\n        super();\n        this.componentHolder =  appendTo ?? null;\n\n        if (appendTo) {\n            appendTo.style.width = '100%';\n            appendTo.style.minHeight = '0';\n        }\n        \n\n    }\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: MultilineOptionsHandlerTypes;\n    @PostConstruct()\n    init() : void {\n\n        const component : TextComponentType = {\n            addOrRemoveCssClassName : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement : () => this.getGui(),\n            getRootElement :()=>{return this.multiTags.textAreaElement} \n        }\n\n        const controller = this.createBean(new MultilineRootController());\n\n        const props = {\n             label : this.optionHandler.getLabel().length > 0,\n             helper: this.optionHandler.getDescription().length > 0,\n             rtl   : this.optionHandler.isRTL(),\n             error : this.optionHandler.showErrorState()\n        }\n\n\t\tconst properties = controller.getParamsProperty();\n        const emptyDom = this.shouldGenerateEmptyDom()\n        const template=  rootTemplate(props,emptyDom);\n        this.setTemplate(template,{\n            label      : properties.label,\n            description: properties.description,\n            error      : properties.description\n        });\n\n        controller.setComponent(component);\n        this.appendElementIntoUserDom();\n    }\n\n    shouldGenerateEmptyDom(){\n        const generateEmptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\treturn generateEmptyDom\n\t}\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui() as HTMLElement;\n\n\t\tthis.componentHolder && this.componentHolder.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.componentHolder && this.componentHolder.removeChild(eGui);\n\t\t\tthis.componentHolder = null;\n\t\t});\n\t}\n\n}\n\nexport {\n    MutliLineRootComponent\n}","\n\nconst multiLineFormatter ={\n    none   : \"none\" ,\n    capitalize : \"capitalize\" ,\n    lower : \"lower\" ,\n    upper : \"upper\" ,\n    sentence : \"sentence\"\n}\n\n\ninterface IResizable {\n    resizable?: 'horizontal' | 'vertical' | 'both' | 'none';\n}\n\ninterface ISize {\n    size ?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\nexport interface IRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\n\n\ninterface IMultilineConfiguration {\n    appendTo      ?: HTMLElement,\n    instanceID ?  : string,\n    min ?    : number,\n    max ?    : number,\n\n    clampValueOnBlur  ? : boolean,\n    keepWithInRange ?   : boolean,\n    showTotal ?         : boolean,\n    // lineClampValue ?    : number\n\n    onChange ?            : CallableFunction,\n    onInput ?             : CallableFunction,\n    onFocus ?             : CallableFunction,\n    onBlur ?              : CallableFunction,\n    onKeydown           ? : CallableFunction,\n    onError             ?:  CallableFunction,\n\n    description ?    : string,\n    addonBefore  ?  : string |  number,\n    addonAfter  ?   : string |  number,\n    clearButton ?   : boolean |  string | HTMLElement,\n    bordered ?        : 'none' | 'outline' | 'standard' | 'filled',\n    pattern  ?        : RegExp | 'url' |  'email',\n\n    characterCase ?   : string,\n    format ?          : string,\n    label ?           : string,\n    ariaLabelledBy ?  : string,\n    ariaRole ?        : string,\n\n    invalidHelperTextRendererParams ?   : any,\n    invalidHelperTextRenderer ?         : any;\n    helperTextRendererParams ?          : any;\n    helperTextRenderer ?                : any;\n    ariaDescribedby  ?                  : string\n    // className ?: , // need to discuss\n   \n\n     // commmon API's \n     value             ?: string , // need to discuss\n    //  defaultValue      ?: string,\n     readonly          ?: boolean,\n     disabled          ?: boolean,\n     size              ?: ISize,\n     validator         ?: CallableFunction,\n     validationMessage ?: string,\n     required          ?: boolean,\n     name              ?: string,\n     allowNull         ?: boolean, // need to discuss\n     placeholder       ?: string,\n     title             ?: string,\n \n     ariaLabel            ?: string,\n     prefix               ?: boolean |  string | HTMLElement,\n     prefixRenderer       ?: CallableFunction,\n     prefixRendererParams ?: object,\n     suffix               ?: boolean |  string | HTMLElement,\n     suffixRenderer       ?: CallableFunction,\n     suffixRendererParams ?: object,\n \n     // descriptionRenderer ?: { new(): IRenderer }; // need to discuss\n     descriptionRendererParams       ?: object,\n     validationMessageRenderer    ?: { new(): IMultilineErrorRenderer }; // need to discuss\n     validationMessageRendererParams ?: object,\n     className                       ?: string[] | CallableFunction,   // need to discuss\n\n\n     rtl ?: boolean,\n\n    // Multi Line Component Based API //\n    maxlength ?: number,\n    rows ? :number,\n    columns ?:  number,\n    resizable ?: IResizable,\n\n     // Events API's\n    onResizeStart ?: CallableFunction,\n    onResize ? : CallableFunction,\n    onResizeEnd ?: CallableFunction,\n\n    ignoreEmptyDOM ?: boolean,\n    autosize ?: boolean,\n\n    hasDynamicHeight ?: boolean,\n\n    showErrorState?: boolean;\n    status        ?: 'error' | \"none\" | 'warning';\n\n    labelRenderer ?: { new(): IRenderer } | undefined;\n    labelRendererParams ?: object;\n    \n\n}\nconst multilinePropeties = [\n    'appendTo',\n    'instanceID',\n    'min',\n    'max',\n    'clampValueOnBlur',\n    'keepWithInRange',\n    'showTotal',\n    'onChange',\n    'onInput',\n    'onFocus',\n    'onBlur',\n    'onKeydown',\n    'description',\n    'addonBefore',\n    'addonAfter',\n    'clearButton',\n    'bordered',\n    'pattern',\n    'status',\n    'characterCase',\n    'format',\n    'label',\n    'ariaLabelledBy',\n    'ariaRole',\n    'invalidHelperTextRendererParams',\n    'invalidHelperTextRenderer',\n    'helperTextRendererParams',\n    'helperTextRenderer',\n    'ariaDescribedby',\n    'value',\n    'readonly',\n    'disabled',\n    'size',\n    'validator',\n    'validationMessage',\n    'required',\n    'name',\n    'allowNull',\n    'placeholder',\n    'title',\n    'ariaLabel',\n    'prefix',\n    'prefixRenderer',\n    'prefixRendererParams',\n    'suffix',\n    'suffixRenderer',\n    'suffixRendererParams',\n    'descriptionRendererParams',\n    'validationMessageRendererParams',\n    'className',\n    'rtl',\n    'maxlength',\n    'rows',\n    'columns',\n    'resizable',\n    'onResizeStart',\n    'onResize',\n    'onResizeEnd',\n    'autosize',\n    'labelRenderer',\n    'labelRendererParams'\n]\n\nexport interface IMultilineErrorRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\nexport {\n    IMultilineConfiguration,\n    multiLineFormatter,\n    multilinePropeties\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\n\nimport { MULTI_TEXT_BEAN_NAME} from \"../../constants/beanname-constants\";\nimport { IMultilineConfiguration, IMultilineErrorRenderer, multilinePropeties } from \"../../multiline-configuration.types\";\nimport { IErrorMeta, MultilineOptionsHandlerTypes } from \"./multiline-options-handler.types\";\nimport { IInputMeta } from \"./multiline-event-handler.types\";\nimport { IMultilineAPI } from \"./multiline-api.types\";\n\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nclass MultilineOptionHandler extends EventEmitter implements MultilineOptionsHandlerTypes{\n\n  \n    @AutoWired(MULTI_TEXT_BEAN_NAME.MULTI_LINE_CONFIGURATION) configuration !: IMultilineConfiguration;\n\t@AutoWired(MULTI_TEXT_BEAN_NAME.MULTI_LINE_API) api!: IMultilineAPI;\n    private scrollPrevented:boolean = false;\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n    isSelected(): boolean {\n       return false\n    }\n    isReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n    getLabel(): string {\n        return this.configuration.label ?? \"\";\n    }\n\n    getAriaLabelledby(){\n        return this.configuration.ariaLabelledBy ?? \"\";\n    }\n\n    getAriaLabel(): string {\n        return this.configuration.ariaLabel ?? \"\";\n    }\n    onFocus(event: FocusEvent): void  {\n        this.configuration.onFocus?.(event);\n    }\n    onBlur(event: FocusEvent): void {\n        this.configuration.onBlur?.(event);\n    }\n\n    onError(errorMeta: IErrorMeta): void {\n        this.configuration.onError?.(errorMeta)\n    }\n    \n    getAppendTo(): HTMLElement | null{\n        return this.configuration.appendTo ?? null\n    }\n    getVariant() {\n       return this.configuration.bordered ?? 'none'\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n    getMinCount() :  number{\n        return  this.configuration.min ?? 0\n    }\n    getMaxCount() :  number  {\n        return this.configuration.max ??  0;\n    }\n\n    setScrollPrevented(value: boolean): void {\n        this.scrollPrevented = value;\n    }\n    isScrollPrevented(): boolean {\n        return this.scrollPrevented\n    }\n\n    getDefaultValue(): string {\n        return this.configuration.value ?? \"\"\n    }\n    getPlaceHolder(): string {\n        return this.configuration.placeholder ?? \"\";\n    }\n\n    onInput(event: IInputMeta): void {\n        this.configuration.onInput?.(event);\n    }\n    onKeydown(event: KeyboardEvent): void {\n        this.configuration.onKeydown?.(event)\n    }\n    onChange(oldValue: string, newValue: string, eventOrigin?: 'api' | 'ui'): void {\n        if (this.configuration.onChange) {\n            this.configuration.onChange(oldValue, newValue, eventOrigin);\n        }\n    }\n    getDescription() :string {\n        return this.configuration.description ?? \"\";\n    }\n    getDescriptionRenderer() {\n        return this.configuration.helperTextRenderer ?? '';\n    }\n    getDescriptionRendererParams() {\n        return this.configuration.helperTextRendererParams ?? '';\n    }\n    getInvalidHelperTextRenderer() {\n        return this.configuration.invalidHelperTextRenderer ?? '';\n    }\n    getInvalidHelperTextRendererParams() {\n        return this.configuration.invalidHelperTextRendererParams ?? '';\n    }\n    getValidationMessage(): string {\n        return this.configuration.validationMessage ?? '';\n    }\n    getAriaDescribedby(): string {\n        return this.configuration.ariaDescribedby ?? '';\n    }\n    showTotal(): boolean {\n        return this.configuration.showTotal ?? false;\n    }\n    getRole(): string {\n        return this.configuration.ariaRole ?? 'text-box';\n    }\n    getFormat(): string {\n        return this.configuration.format ?? '';\n    }\n\n    isRTL(): boolean {\n        return this.configuration.rtl ?? false;\n    }\n\n    setDisabled(value: boolean): void {\n        this.configuration.disabled = value;\n    }\n    setConfiguration(configuration: IMultilineConfiguration): void {\n        this.configuration  = configuration;\n    }\n    getConfiguration(): IMultilineConfiguration {\n        return this.configuration;\n    }\n\n    updateProperties(options: IMultilineConfiguration): void {\n        const userProperty = Object.keys(options);\n        for(let i = 0; i < userProperty.length; i++){\n            const userKey = userProperty[i]\n            const isValidProperty = multilinePropeties.includes(userKey);\n            if(isValidProperty){\n                (this.configuration as any)[userKey] = (options as any)[userKey];\n            }  else {\n                console.warn(`Invalid property ${userKey} in options. Ignoring.`);\n            }\n        }\n    }\n\n    shouldGenerateEmptyDom(): boolean {\n        return this.configuration?.ignoreEmptyDOM !== undefined\n            ? !this.configuration.ignoreEmptyDOM\n            : false;\n    }\n\n    getAutoSize(): boolean {\n        return this.configuration?.autosize ?? false;\n    }\n\n    hasDynamicHeight(): boolean {\n        return this.configuration?.hasDynamicHeight ?? false;\n    }\n\n\n    getKeepWithInRange(): boolean {\n        return this.configuration?.keepWithInRange ??  true;\n    }\n\n    getClampValueOnBlur(): boolean {\n        return this.configuration?.clampValueOnBlur ?? false;\n    }\n\n    setValue(value: string): void {\n        this.configuration.value = value;\n    }\n\n    showErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getValidationMessageRenderer(): { new(): IMultilineErrorRenderer } | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n}\n\nexport {\n    MultilineOptionHandler\n}\n\n","\nimport {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { MultilineOptionsHandlerTypes } from \"./multiline-options-handler.types\";\n\n@Bean('stateManager')\n class MultilineStateManager extends EventEmitter {\n    isInValid() : boolean {\n        return (this.optionsHandler as MultilineOptionsHandlerTypes).isValid();\n    }\n}\nexport {\n    MultilineStateManager\n}","import { EventEmitter, IEventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME, setAriaDescribedBy, setAriaDisabled, setAriaInvalid, setAriaLabel, setAriaLabelledBy, setAriaReadOnly, setAriaRequired } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { OwnerStateType } from \"../multiline-root/multiline-root-classes\";\nimport { getFormattedText, getMutliLineUtilityClass } from \"../utility\";\nimport { MultilineCompType } from \"./multiline-textArea.types\";\nimport { MultilineOptionsHandlerTypes } from \"../model/multiline-options-handler.types\";\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'input-wrapper',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getMutliLineUtilityClass);\n};\nclass MultiLineController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: MultilineOptionsHandlerTypes;\n    private component !: MultilineCompType;\n    private oldValue : string | null = null;\n\n    private addInputDestroyFunc : CallableFunction[]         = [];\n    private addAutosiseInputDestroyFunc : CallableFunction[] = [];\n\n\n    private addInputEventListener(object: Window | HTMLElement | IEventEmitter, event: string, listener: (event?: any) => void): (() => null) | any {\n        object.addEventListener(event, listener);\n        this.addInputDestroyFunc.push(() => {\n            object.removeEventListener(event, listener);\n        })\n    }\n\n    private addAutoSizeInputEventListener(object: Window | HTMLElement | IEventEmitter, event: string, listener: (event?: any) => void): (() => null) | any {\n        object.addEventListener(event, listener);\n        this.addAutosiseInputDestroyFunc.push(() => {\n            object.removeEventListener(event, listener);\n        })\n    }\n\n    private destroyInputEvent(eventHandler : CallableFunction[]) : void {\n        eventHandler.forEach((destroyFunc) => {\n            destroyFunc();\n        })\n    }\n\n    setComp(comp : MultilineCompType ) {\n        this.component    = comp;\n        this.applyClasses();\n        this.setValue();\n        this.setAriaAttributes();\n        this.addListener(this.eventHandler, 'PROPERTY_CHANGED', () => {\n            this.setRequired();\n            this.setValue();\n            this.setAriaAttributes();\n            this.registerEventHandler();\n        });\n\n        this.addListener(this.eventHandler, \"DOM_APPENDED\", this.setAutosize.bind(this));\n   \n        this.registerEventHandler();\n        // this.setAutosize();\n    }\n\n    private applyClasses() : void {\n        const ownerState    = this.getOwnerState();\n        const classes       = useUtilityClasses(ownerState);\n        this.component.addOrRemoveCSSClass(classes.root);\n        this.component.getElement().classList.add('dg-field__input-wrapper');\n\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadOnly()\n\t\t}\n\t}\n\n    private registerEventHandler() {\n        const ownerState = this.getOwnerState();\n        const inputElement = this.component.getRootElement();\n        const autosize =  this.optionHandler.getAutoSize();\n        this.destroyInputEvent(this.addAutosiseInputDestroyFunc);\n        this.destroyInputEvent(this.addInputDestroyFunc);\n        if(!(ownerState.readonly || ownerState.disabled) || autosize) {\n            this.addAutoSizeInputEventListener(inputElement, 'focus', this.onFocus.bind(this));\n            this.addAutoSizeInputEventListener(inputElement, 'keydown', this.onKeydown.bind(this))\n        }\n\n        if(!(ownerState.readonly || ownerState.disabled)) {\n            this.addInputEventListener(inputElement, 'blur', this.onBlur.bind(this));\n            this.addInputEventListener(inputElement, \"input\", this.onInput.bind(this));\n        }\n    }\n\n    private setAccessibility() : void {\n        this.setAriaAttributes();\n        this.assignValueBoundaries();\n    }\n\n    private assignValueBoundaries() :  void {\n        const inputElement   = this.component.getRootElement();\n        const minCount       = this.optionsHandler.getMinCount();\n        const maxCount       = this.optionsHandler.getMaxCount();\n        const defaultValue   = this.optionsHandler.getDefaultValue();\n        const isReadOnly     = this.optionsHandler.isReadOnly();\n        const isDisabled     = this.optionsHandler.isDisabled();\n        const wrapperElement = this.component.getRootElement();\n        const isRequired     = this.optionsHandler.isRequired();\n        const format         = this.optionHandler.getFormat();\n        const formattedText  = getFormattedText(defaultValue, format);\n\n        inputElement.value        = formattedText;\n        inputElement.disabled     = isDisabled;\n        inputElement.readOnly     = isReadOnly;\n        setAriaRequired(inputElement,isRequired);\n        if(minCount){\n            inputElement.setAttribute('aria-min',`${minCount}`)\n        }\n        if(maxCount > minCount) {\n            inputElement.setAttribute('aria-max',`${maxCount}`);\n        };\n        if (maxCount > minCount && maxCount > 0) {\n            inputElement.setAttribute('aria-max',`${maxCount}`)\n        }\n        wrapperElement.classList.toggle('dg-input__status--disabled', isDisabled);\n        wrapperElement.classList.toggle('dg-text__status--disabled', isDisabled);\n        wrapperElement.classList.toggle('dg-text__status--read-only', isReadOnly);\n    }\n\n\n    private setAriaAttributes() : void {\n        const element   = this.component.getRootElement();\n        setAriaDisabled(element, this.optionHandler.isDisabled());\n        setAriaReadOnly(element, this.optionHandler.isReadOnly());\n        setAriaRequired(element, this.optionHandler.isRequired());\n        setAriaLabel(element, this.optionHandler.getAriaLabel());\n        setAriaLabelledBy(element, this.optionHandler.getAriaLabelledby());\n        setAriaDescribedBy(element, this.optionHandler.getAriaDescribedby());\n    }\n\n    private setValue() : void {\n        this.setAccessibility();\n    }\n\n    private setRequired(){\n        const element   = this.component.getRootElement();\n        setAriaRequired(element, this.optionHandler.isRequired());\n    }\n\n\n\n    private setAutosize(){\n        const inputElement          = this.component.getRootElement();\n        inputElement.style.height   = 'auto';\n        inputElement.style.height   = 1+'px';\n        const scrollHeight          = inputElement.scrollHeight;\n        inputElement.style.height   = scrollHeight+\"px\"\n    }\n\n    private onBlur(event: FocusEvent): void { \n    const inputElement    = this.component.getRootElement();\n    const minCount        = this.optionsHandler.getMinCount();\n    const maxCount        = this.optionsHandler.getMaxCount();\n    const inputLength     = inputElement.value.length;\n    const rootElement     = this.optionsHandler.api.getElement();\n    const isRequired      = this.optionsHandler.isRequired();\n    const clampValue      = this.optionsHandler.getClampValueOnBlur();\n\n    if (clampValue && inputLength > maxCount) {\n        inputElement.value = inputElement.value.slice(0, maxCount);\n    }\n\n    const finalLength = inputElement.value.length;\n\n    setAriaInvalid(inputElement, finalLength < minCount ? 'true' : 'false');\n\n    if (!inputElement.value && isRequired) {\n        inputElement.reportValidity();\n    }\n\n    rootElement.classList.remove('dg-input__status--focus');\n    this.optionsHandler.onBlur(event);\n    \n    // Trigger onChange if value has changed\n    if (this.oldValue !== null && this.oldValue !== inputElement.value) {\n        this.optionsHandler.onChange(this.oldValue, inputElement.value, 'ui');\n    }\n    this.oldValue = null;\n}\n\n    private onInput(event: InputEvent): void {\n        const wrapperElement  = this.component.getElement();\n        const inputElement    = this.component.getRootElement();\n        const format          = this.optionHandler.getFormat();\n        const maxCount        = this.optionsHandler.getMaxCount();\n        const minCount        = this.optionsHandler.getMinCount();\n        \n        const formattedText   = getFormattedText(inputElement.value, format);\n        inputElement.value = formattedText;\n\n        const currentLength = formattedText.length;\n        this.setAutosize();\n\n        const eventMeta = {\n            event: event,\n            value: formattedText\n        };\n\n        const isOutOfRange   = currentLength > maxCount || currentLength < minCount;\n        if(isOutOfRange){\n            setAriaInvalid(inputElement, 'true');\n            if(currentLength > maxCount){\n                this.optionHandler.onError({type    : 'max' ,event :event })\n            }\n            else if(currentLength < minCount){\n                this.optionHandler.onError({type    : 'min',event : event})\n            }\n        }\n        else{\n             setAriaInvalid(inputElement, 'false');\n        }\n\n        wrapperElement.classList.toggle('dg-text__status--error', isOutOfRange);\n\n        this.optionsHandler.onInput(eventMeta);\n\n        this.optionHandler.setValue(formattedText);\n    }\n\n    private onFocus(event: FocusEvent): void {\n        const rootElement   = this.optionsHandler.api.getElement();\n        const inputElement  = this.component.getRootElement();\n        const isAutosize    = this.optionHandler.getAutoSize();\n\n        this.oldValue = inputElement.value;\n\n        if (!isAutosize) {\n            rootElement.classList.add('dg-input__status--focus');\n            this.optionsHandler.onFocus(event);\n        }\n\n        if (!this.optionsHandler.hasDynamicHeight()) {\n            this.setAutosize();\n        }\n\n        // setTimeout(() => {\n        //     setFocusAtLast(inputElement);\n        // }, 1);\n    }\n\n    private onKeydown(event: KeyboardEvent): void {\n        const inputElement = this.component.getRootElement();\n        const maxCount     = this.optionsHandler.getMaxCount();\n        const inputLength  = inputElement.value.length;\n        const keepWithinRange = this.optionsHandler.getKeepWithInRange();\n\n        const allowedKeys = [\n            'Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n            'Tab', 'Enter', 'Escape', 'Home', 'End'\n        ];\n\n        if (keepWithinRange && maxCount && inputLength >= maxCount && !allowedKeys.includes(event.key)) {\n            event.preventDefault();\n            setAriaInvalid(inputElement, 'true');\n        } else {\n            this.optionsHandler.onKeydown(event);\n            setAriaInvalid(inputElement, 'false');\n        }\n    }\n\n    destroy(): void {\n        super.destroy();\n    }\n}\nexport {\n    MultiLineController\n}","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { MultilineCompType } from \"./multiline-textArea.types\";\nimport { MultiLineController } from \"./multiline-textArea-controller\";\n\nconst textAreaTag = 'textAreaTag';\n\nconst TextAreaTemplate = () => {\n    const div = document.createElement(\"div\");\n    let textarea = document.createElement('textarea');\n    textarea.setAttribute('ref',textAreaTag);\n    textarea.classList.add(\"dg-text__input\");\n    textarea.classList.add(\"dg-field__input\");\n    textarea.setAttribute('aria-label', \"Input description\");\n    textarea.setAttribute('aria-required', \"true\");\n    textarea.setAttribute('aria-invalid', \"false\");\n    div.appendChild(textarea);\n    return  div\n}\n\n\nclass MultilineViewComponent extends Component {\n    constructor() {\n        super();\n        this.setTemplate(TextAreaTemplate())\n    }\n    @queryAssignedNodes(textAreaTag) private textAreaElement !: HTMLTextAreaElement;\n\n    @PostConstruct()\n    init() {\n        const comp : MultilineCompType = {\n            getElement            : () => this.getGui(),\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className),\n            getRootElement        : () =>{ return this.textAreaElement }\n        }\n        const controller = this.createBean(new MultiLineController());\n        controller.setComp(comp);\n    }\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n}\n\nexport {\n    MultilineViewComponent\n}","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { IMultilineUserComponentHandlerTypes } from \"./multiline-user-component-handler.types\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport {  IComponentDetails, UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { ILabelUserComponentHandler } from \"../../../../label/label.types\";\n\n\nconst enum PropertyName {\n\tHELPER_TEXT_RENDERER = 'helpTextRenderer',\n\tLABEL_RENDERER       = 'labelRenderer',\n\tERROR_RENDERER = 'errorRenderer',\n}\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nclass MultiLineUserComponentHandler extends UserComponentHandler implements IMultilineUserComponentHandlerTypes, ILabelUserComponentHandler{\n\t\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\t\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\n\t\n\tprotected getComponentDetail(item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta{\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, _params : any) : any {\n        switch(propertyName) {\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getUserRendererParams();\n            default:\n                return {};\n        }\n\n    }\n\n\n}\nexport{\n\tMultiLineUserComponentHandler,\n\tPropertyName\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport {EventEmitter}from '@dg/corecomponent/EventEmitter.js';\nimport { MULTI_TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IMultilineAPI } from \"./multiline-api.types\";\nimport { IMultilineConfiguration } from \"../../multiline-configuration.types\";\nimport { MultilineOptionsHandlerTypes } from \"./multiline-options-handler.types\";\nimport { MultilineControllerHandler } from \"./multiline-controller\";\nimport { getFormattedText, selectAllText, setFocusAtFirst, setFocusAtLast } from \"../utility\";\n\n\n\n@Bean(MULTI_TEXT_BEAN_NAME.MULTI_LINE_API)\nexport class MultiLineAPI extends EventEmitter implements IMultilineAPI {\n   \n    @AutoWired('configuration') configuration !: IMultilineConfiguration;\n    @AutoWired(MULTI_TEXT_BEAN_NAME.MULTI_LINE_CONTROLLER_HANDLER) controllerHandler !: MultilineControllerHandler;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: MultilineOptionsHandlerTypes;\n\n    getName() { return MULTI_TEXT_BEAN_NAME.MULTI_LINE_API};\n\n    updateProperties(options : IMultilineConfiguration ,  force ?: boolean) {\n        this.controllerHandler.getMultilineCtrl().updateProperties(options,force ?? true);\n        this.dispatchEvent({\n            type : \"PROPERTY_CHANGED\"\n        })\n    }\n\n    getElement() : HTMLElement | undefined {\n        return this.controllerHandler.getMultilineCtrl().getElement();\n    }\n\n    getValue(){\n        return this.controllerHandler.getMultilineCtrl().getValue();\n    }\n    \n    setFocusAtFirst(): void {\n        setFocusAtFirst(this.getRootElement());\n    }\n    setFocusAtLast(): void {\n        setFocusAtLast(this.getRootElement());\n    }\n    selectAllText(): void {\n        selectAllText(this.getRootElement());\n    }\n\n    getRootElement() {\n        return this.controllerHandler.getMultilineCtrl().getRootElement();\n    }\n\n    onFocus(): void {\n       this.getElement()?.focus();\n    }\n    onBlur(): void {\n        this.getElement()?.blur();\n    }\n\n    focus(preventScroll ?: boolean): void {\n        if(preventScroll){\n            this.optionHandler.setScrollPrevented(preventScroll);\n            this.getRootElement()?.focus({ preventScroll: true });  \n        }\n        else{\n            this.getRootElement()?.focus();\n        }\n    }\n    blur(): void {\n        this.getRootElement()?.blur();\n    }\n    // destroy(): void {\n    //     const rootElement = this.getRootElement();\n    //     if(rootElement){\n    //         const newElement = rootElement.cloneNode(true);\n    //         if(rootElement.parentNode){\n    //             rootElement.parentNode.replaceChild(newElement, rootElement);\n    //         }\n    //         // rootElement.parentNode?.replaceChild(newElement, rootElement);\n    //     }\n    //     this.getElement()?.remove();\n    // }\n\n    destroy(): void {\n        const rootElement = this.getRootElement();\n    \n        if (rootElement && rootElement.parentNode && rootElement.parentNode.contains(rootElement)) {\n            const newElement = rootElement.cloneNode(true);\n            rootElement.parentNode.replaceChild(newElement, rootElement);\n        }\n    \n        this.getElement()?.remove();\n    }\n    \n\n\n    getCharacterCount(): number {\n        return this.controllerHandler.getMultilineCtrl().getCharacterCount();\n    }\n    appendText(text: string |  number,force ?:  boolean): void {\n        const oldValue = this.getValue()?.toString() ?? '';\n        this.controllerHandler.getMultilineCtrl().appendText(text,force);\n        const newValue = this.getValue()?.toString() ?? '';\n        if(oldValue !== newValue) {\n            this.optionHandler.onChange(oldValue, newValue, 'api');\n        }\n    }\n    setValue(value: string | number,force ?:  boolean): void {\n        const oldValue = this.getValue()?.toString() ?? '';\n        const newValue = value.toString();\n        if(oldValue !== newValue) {\n            this.controllerHandler.getMultilineCtrl().setValue(value,force);\n            this.optionHandler.onChange(oldValue, newValue, 'api');\n        }\n    }\n    disable(value: boolean): void {\n        this.controllerHandler.getMultilineCtrl().disable(value ?? true);\n    }\n    resetValue(): void {\n        const oldValue = this.getValue()?.toString() ?? '';\n        this.controllerHandler.getMultilineCtrl().resetValue();\n        const newValue = this.getValue()?.toString() ?? '';\n        if(oldValue !== newValue) {\n            this.optionHandler.onChange(oldValue, newValue, 'api');\n        }\n    }\n    show(subElements ?: string[]): void {\n        this.controllerHandler.getMultilineCtrl().show(subElements);\n    }\n    hide(subElements ?: string[]): void {\n        this.controllerHandler.getMultilineCtrl().hide(subElements);\n    }\n    clear(): void {\n        const oldValue = this.getValue()?.toString() ?? '';\n        this.controllerHandler.getMultilineCtrl().clear();\n        const newValue = this.getValue()?.toString() ?? '';\n        if(oldValue !== newValue) {\n            this.optionHandler.onChange(oldValue, newValue, 'api');\n        }\n    }\n\n    getFormattedValue(): string | number {\n        return getFormattedText(this.controllerHandler.getMultilineCtrl().getValue() as string, this.optionHandler.getFormat());\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME, setAriaDescribedBy, setAriaDisabled, setAriaLabel, setAriaLabelledBy, setAriaReadOnly, setAriaRequired } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { OwnerStateType } from \"../multiline-root/multiline-root-classes\";\nimport { getMutliLineUtilityClass } from \"../utility\";\n\nimport { MultilineOptionsHandlerTypes } from \"../model/multiline-options-handler.types\";\nimport { RenderMultilineCompType } from \"./render-multiline-textArea.types\";\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'input-wrapper',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getMutliLineUtilityClass);\n};\nclass RenderMultiLineController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: MultilineOptionsHandlerTypes;\n    private component !: RenderMultilineCompType;\n    setComp(comp : RenderMultilineCompType ) {\n        this.component    = comp;\n        this.applyClasses();\n        this.setValue();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n    }\n\n    private applyClasses() : void {\n        const ownerState    = this.getOwnerState();\n        const classes       = useUtilityClasses(ownerState);\n        this.component.addOrRemoveCSSClass(classes.root);\n        this.component.getElement().classList.add('dg-field__input-wrapper');\n\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadOnly()\n\t\t}\n\t}\n\n    private registerEventHandler() {\n        const ownerState = this.getOwnerState();\n\n        if(ownerState.readonly || ownerState.disabled) {\n            return \n        }\n        \n        const inputElement = this.component.getRootElement();\n        this.addListener(inputElement, 'blur', this.onBlur.bind(this));\n        this.addListener(inputElement, 'focus', this.onFocus.bind(this));\n    }\n\n    private setAccessibility() : void {\n        this.setAriaAttributes();\n        this.assignValueBoundaries();\n    }\n\n    private assignValueBoundaries() : void {\n        const spanELement     = this.component.getRootElement();\n        const minCount        = this.optionsHandler.getMinCount();\n        const maxCount        = this.optionsHandler.getMaxCount();\n        const defaultValue    = this.optionsHandler.getDefaultValue();\n        const isReadOnly      = this.optionsHandler.isReadOnly();\n        const isDisabled      = this.optionsHandler.isDisabled();\n        const wrapperElement  = this.component.getRootElement();\n    \n        spanELement.textContent = defaultValue;\n        minCount && (spanELement.dataset.minLength = minCount.toString());\n        (maxCount > minCount) && (spanELement.dataset.maxLength = maxCount.toString());\n    \n        if (maxCount > minCount && maxCount > 0) {\n            spanELement.dataset.maxLength = maxCount.toString();\n        }\n        \n        wrapperElement.classList.toggle('dg-input__status--disabled', isDisabled);\n        wrapperElement.classList.toggle('dg-text__status--disabled', isDisabled);\n        wrapperElement.classList.toggle('dg-text__status--read-only', isReadOnly);\n    }\n    \n\n\n    private setAriaAttributes() : void {\n        const element   = this.component.getRootElement();\n        setAriaDisabled(element, this.optionHandler.isDisabled());\n        setAriaReadOnly(element, this.optionHandler.isReadOnly());\n        setAriaRequired(element, this.optionHandler.isRequired());\n        setAriaLabel(element, this.optionHandler.getAriaLabel());\n        setAriaLabelledBy(element, this.optionHandler.getAriaLabelledby());\n        setAriaDescribedBy(element, this.optionHandler.getAriaDescribedby());\n\n       \n    }\n\n    private setValue() : void {\n        this.setAccessibility();\n    }\n\n    private onBlur(event: FocusEvent): void { \n        const rootElement = this.optionsHandler.api.getElement();\n        rootElement.classList.remove('dg-input__status--focus');\n        this.optionsHandler.onBlur(event);\n    }\n\n    private onFocus(event: FocusEvent): void {\n        const rootElement = this.optionsHandler.api.getElement();\n        rootElement.classList.add('dg-input__status--focus');\n        this.optionsHandler.onFocus(event);\n    }\n    \n    destroy(): void {\n        super.destroy();\n    }\n}\nexport {\n    RenderMultiLineController\n}","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { RenderMultilineCompType } from \"./render-multiline-textArea.types\";\nimport { RenderMultiLineController } from \"./render-multiline-textArea-controller\";\n\nconst RenderTextAreaTag = 'renderTextAreaTag';\n\nconst TextAreaTemplate = () => {\n    const div = document.createElement(\"div\");\n    let textarea = document.createElement('span');\n    textarea.setAttribute('ref',RenderTextAreaTag);\n    textarea.classList.add(\"dg-text__input\");\n    textarea.classList.add(\"dg-field__input\");\n    div.appendChild(textarea);\n    return  div\n}\n\n\nclass RenderMultilineViewComponent extends Component {\n    constructor() {\n        super();\n        this.setTemplate(TextAreaTemplate())\n    }\n    @queryAssignedNodes(RenderTextAreaTag) private textAreaElement !: HTMLTextAreaElement;\n\n    @PostConstruct()\n    init() {\n        const comp : RenderMultilineCompType = {\n            getElement            : () => this.getGui(),\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className),\n            getRootElement        : () =>{ return this.textAreaElement }\n        }\n        const controller = this.createBean(new RenderMultiLineController());\n        controller.setComp(comp);\n    }\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n}\n\nexport {\n    RenderMultilineViewComponent\n}","import { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { BEAN_NAME } from \"@dg/corecomponent\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { UserComponentRegistry } from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IModule } from '../../core/modules.types';\nimport { MultilineOptionHandler } from \"./core/model/multiline-option-handler\";\nimport { Label } from \"../../label/label-view\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { MultilineStateManager } from \"./core/model/multiline-state-manager\";\nimport { MultilineViewComponent } from \"./core/multiline-textArea/multiline-textArea-view\";\nimport { IMultilineConfiguration } from \"./multiline-configuration.types\";\nimport { MultiLineUserComponentHandler } from \"./core/model/multiline-user-component-handler\";\nimport { MultiLineAPI } from \"./core/model/multiline-api\";\nimport { MultilineControllerHandler } from \"./core/model/multiline-controller\";\nimport { RenderMultilineViewComponent } from \"./core/render-multiline-textArea/render-multiline-textArea-view\";\nimport { ErrorComponent } from \"../../error/error-view\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\n\n\n\ninterface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IModule[];\n}\n\nexport const enum PropertyName {\n\tText_RENDERER = 'textRenderer',\n}\nlet nextInstanceId = 1;\n\nclass  MultilineCoreComponent {\n    constructor(){\n\n    }\n    initializeText( configuration: IMultilineConfiguration, params: IUserParams = {}, createUI: CallableFunction, ): void {\n\t\tconst instanceID = configuration?.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n\n\t\t\n\t\tthis.registerCoreComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\n    }\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tconst beanList= [\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tEventHandler,\n\t\t\tMultilineOptionHandler,\n\t\t\tMultilineStateManager,\n\t\t\tMultiLineUserComponentHandler,\n\t\t\tMultiLineAPI,\n\t\t\tMultilineControllerHandler,\n\t\t\tComponentMetadataProvider\n\t\t]\n\t\treturn new Set(beanList);\n\t}\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID : string; } {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nfunction createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'text-label',\n\t\t\tcomponentClass: Label\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'text-helper',\n            componentClass : DescriptionComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :'text-area-element',\n\t\t\tcomponentClass : MultilineViewComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :'render-text-area-element',\n\t\t\tcomponentClass : RenderMultilineViewComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : 'multiline-error',\n\t\t\tcomponentClass : ErrorComponent\n\t\t}\n    ];\n\n\treturn components;\n}\n\nexport { \n    MultilineCoreComponent,\n    IUserParams,\n    createComponentList\n\n}","\nimport { AutoWired, BEAN_NAME, setAriaDisabled, setAriaLabel } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { MultilineOptionsHandlerTypes } from \"../model/multiline-options-handler.types\";\nimport { getFormattedText, OwnerStateType } from \"../utility\";\nimport { MultilineControllerHandler } from \"../model/multiline-controller\";\nimport { MULTI_TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IMultilineConfiguration } from \"../../multiline-configuration.types\";\nimport { RenderTextComponentType } from \"./render-multiline-root-types\";\nimport { useUtilityClasses } from \"../multiline-root/multiline-root-classes\";\n\nclass RenderMultilineRootController extends AbstractController<RenderTextComponentType> {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: MultilineOptionsHandlerTypes;\n    @AutoWired(MULTI_TEXT_BEAN_NAME.MULTI_LINE_CONTROLLER_HANDLER) controllerHandler !: MultilineControllerHandler;\n\n\n    init(): void {\n        this.registerEvent();\n        this.refresh();\n        this.controllerHandler.registerMultiline(this)\n\n    }\n    registerEvent(){\n    }\n    \n    private applyClasses() {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.component?.addOrRemoveCssClassName(classes.root);\n        this.component?.getElement().classList.add('dg-textarea__root');\n        this.component?.getElement().classList.add('dg-field__root');\n        this.component?.getElement().classList.add('dg-field--render-state');\n    }\n\n    private setAccessibility() : void { \n        const inputElement         = this.component?.getElement()\n        const ariaLabel       = this.optionsHandler.getAriaLabel();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n    getElement() : HTMLElement| undefined{\n        return this.component?.getElement() ;\n    }\n    getRootElement() {\n        return this.component?.getRootElement();\n    }\n    getValue() : string | number {\n        return this.getRootElement()?.value ?? '';\n    }\n    private getOwnerState() : OwnerStateType {\n        const selected = this.optionsHandler.isSelected();\n        const disabled = this.optionsHandler.isDisabled();\n        const readonly = this.optionsHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readonly\n        }\n    }\n    updateProperties(options : IMultilineConfiguration){\n        this.applyClasses();\n        this.optionsHandler.updateProperties(options);\n        this.refresh();\n    }\n    getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-text__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-text__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-text__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-text__description\"\n\t\t\t}\n\t\t};\n    }\n    getCharacterCount(): number {\n        return  this.getRootElement()?.textContent?.length || 0;\n    }\n    appendText(text: string |  number): void {\n        const rootElement = this.getRootElement() as HTMLTextAreaElement | null;\n        (rootElement) && (this.setValue(rootElement.value + text.toString()));\n    }\n    setValue(value :  string |  number){\n        value = getFormattedText(value as string, this.optionsHandler.getFormat());\n        const isDisabled    = this.optionsHandler.isDisabled();\n        const isReadOnly    = this.optionsHandler.isReadOnly();\n        if( !isDisabled && !isReadOnly){\n            const rootElement = this.getRootElement();\n            rootElement && (rootElement.textContent =value.toString()); \n            rootElement && (rootElement.value =value.toString()); \n\n        }\n    }\n    updateMinValue() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.minLength = this.optionsHandler.getMinCount());\n    }\n    updateMaxValue() {\n        const rootElement   = this.getRootElement();\n        const maxCount      = this.optionsHandler.getMaxCount();\n        if (maxCount && rootElement) {\n            rootElement.maxLength = maxCount;\n        }\n    }\n\n    updatePlaceholder() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.placeholder = this.optionsHandler.getPlaceHolder());\n    }\n    updateRequired() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.required = this.optionsHandler.isRequired());\n    }\n    updateAriaLabel() {\n        const ariaLabel       = this.optionsHandler.getAriaLabel();\n        const inputElement    = this.getRootElement();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n    updateDisabled() {\n        const isDisabled =  this.optionsHandler.isDisabled();\n       this.disable(isDisabled)\n    }\n\n    updateReadOnly() {\n        const isReadOnly    = this.optionsHandler.isReadOnly();\n        const element       = this.getRootElement();\n        if (element) {\n            element.readOnly = isReadOnly;\n        }\n    }\n    updateValue() {\n        const defaultValue    = this.optionsHandler.getDefaultValue();\n        const element         = this.getRootElement();\n        if(element) {\n            this.setValue(defaultValue);\n        };\n    }\n    updateLabel() {\n        const label =  this.getElement()?.querySelector('label');\n        const spanElement =  label?.querySelector('span');\n        if(label && spanElement) {\n            const labelText =  this.optionsHandler.getLabel();\n            spanElement.textContent =  labelText;\n        }\n    }\n\n    updateDescription(){\n        const description =  this.getElement()?.querySelector('.dg-field__description');\n        if(description) {\n            const descriptionText =  this.optionsHandler.getDescription();\n            description.textContent =  descriptionText;\n        }\n    }\n    \n    private refresh() : void { \n        this.applyClasses();\n        this.setAccessibility();\n\n        this.updateMinValue();\n        this.updateMaxValue();\n        this.updatePlaceholder();\n        this.updateRequired();\n        this.updateAriaLabel();\n        this.updateDisabled();\n        this.updateAriaLabel();\n        this.updateValue();\n        this.updateLabel();\n        this.updateDescription();\n\n    }\n    disable(value: boolean): void {\n        const isComponentDisabled =  this.optionsHandler.isDisabled();\n        if(isComponentDisabled == value){return}\n        const element = this.getRootElement();\n        if(!element) return ;\n        element.classList.toggle('dg-text__user-text--disabled', value === true);\n        element.disabled = value;\n        this.optionsHandler.setDisabled(value);\n        setAriaDisabled(element,value);\n    }\n    resetValue()   : void {\n        const initialValue =  this.optionsHandler.getDefaultValue();\n        (initialValue.length>1) && this.setValue(initialValue);\n    }\n    hide(): void {\n        const element =  this.getElement()\n       element && (element.style.display = 'none');\n    }\n    show(): void {\n        const element =  this.getElement()\n        element && (element.style.display = 'block');\n    }\n    clear() :  void {\n        this.setValue('')\n    }\n}\n\nexport {\n    RenderMultilineRootController\n}","\nimport { AutoWired, BEAN_NAME, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\n\nimport { MultilineOptionsHandlerTypes } from \"../model/multiline-options-handler.types\";\nimport { RenderTextComponentType } from \"./render-multiline-root-types\";\nimport { RenderMultilineRootController } from \"./render-multiline-root-controller\";\n\nconst multiTag ='multiTag'\nconst rootTemplate = ( props :  any,emptyDom :  boolean) => {\n    const div = document.createElement(\"div\");\n    if (emptyDom || props.label) {\n        const textLabel = document.createElement(\"text-label\");\n        textLabel.setAttribute(\"ref\", 'label');\n        div.appendChild(textLabel);\n    }\n    const divWrapper = document.createElement(\"div\");\n    divWrapper.classList.add('dg-text__container');\n    divWrapper.classList.add('dg-field__container');\n\n    const textInput = document.createElement(\"render-text-area-element\");\n    textInput.setAttribute('ref',multiTag);\n    (props?.rtl) && (div.setAttribute('dir','rtl'));\n    divWrapper.appendChild(textInput);\n    div.append(divWrapper);\n    if (emptyDom || props.helper) {\n        const textHelper = document.createElement(\"text-helper\");\n        textHelper.setAttribute(\"ref\", 'description');\n        div.appendChild(textHelper);\n    }\n    return div;\n}\n\nclass RenderMutliLineRootComponent  extends Component{\n    private componentHolder : HTMLElement |  null;\n    @queryAssignedNodes(multiTag) private multiTags : any ;\n    constructor(appendTo ?: HTMLElement) {\n        super();\n        this.componentHolder =  appendTo ?? null;\n        if (appendTo) {\n            appendTo.style.width = '100%';\n            appendTo.style.height = '100%';\n            appendTo.style.minHeight = '0';\n        }\n    }\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: MultilineOptionsHandlerTypes;\n    @PostConstruct()\n    init() : void {\n\n        const component : RenderTextComponentType = {\n            addOrRemoveCssClassName : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement : () => this.getGui(),\n            getRootElement :()=>{return this.multiTags.textAreaElement} \n        }\n\n        const controller = this.createBean(new RenderMultilineRootController());\n\n        const props = {\n             label :  this.optionHandler.getLabel().length > 0,\n             helper :  this.optionHandler.getDescription().length > 0,\n             rtl :  this.optionHandler.isRTL(),\n        }\n\n\t\tconst properties = controller.getParamsProperty();\n        const emptyDom = this.shouldGenerateEmptyDom()\n\n        const template=  rootTemplate(props,emptyDom);\n        this.setTemplate(template,{\n            label : properties.label,\n\t\t\tdescription : properties.description\n        });\n\n        controller.setComponent(component);\n        this.appendElementIntoUserDom();\n    }\n    shouldGenerateEmptyDom(){\n\t\tconst generateEmptyDom = this.optionHandler.shouldGenerateEmptyDom();\n        return generateEmptyDom\n\t}\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.componentHolder && this.componentHolder.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.componentHolder && this.componentHolder.removeChild(eGui);\n\t\t\tthis.componentHolder = null;\n\t\t});\n\t}\n\n}\n\nexport {\n    RenderMutliLineRootComponent\n}","import { Context } from \"@dg/corecomponent/Context.js\";\n\nimport  {IMultilineAPI} from \"./core/model/multiline-api.types\"\nimport { MutliLineRootComponent } from \"./core/multiline-root/multiline-root-view\";\nimport { IMultilineConfiguration } from \"./multiline-configuration.types\";\nimport { IUserParams, MultilineCoreComponent } from \"./multi-core-component\";\nimport { MULTI_TEXT_BEAN_NAME } from \"./constants/beanname-constants\";\nimport { RenderMutliLineRootComponent } from \"./core/render-multiline-root/render-multiline-root-view\";\n\nclass MultilineComponent {\n\tpublic api: IMultilineAPI | undefined;\n    constructor(configuration: IMultilineConfiguration, params?: IUserParams){\n        if(configuration == undefined){return};\n        const createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(MULTI_TEXT_BEAN_NAME.MULTI_LINE_API) as IMultilineAPI;\n            context.createBean(new MutliLineRootComponent(configuration?.appendTo));\n\t\t};\n\t\tnew MultilineCoreComponent().initializeText(configuration, params, createUI);\n    }\n}\n\nclass RenderMultilineComponent {\n\tpublic api: IMultilineAPI | undefined;\n    constructor(configuration: IMultilineConfiguration, params?: IUserParams){\n        if(configuration == undefined){return};\n        const createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(MULTI_TEXT_BEAN_NAME.MULTI_LINE_API) as IMultilineAPI;\n            context.createBean(new RenderMutliLineRootComponent(configuration?.appendTo));\n\t\t};\n\t\tnew MultilineCoreComponent().initializeText(configuration, params, createUI);\n    }\n}\n\nexport { \n    MultilineComponent,\n    RenderMultilineComponent\n}","import { AutoWired, BEAN_NAME, setAriaLabel } from \"@dg/corecomponent\";\nimport { LinkOptionHandler } from \"../model/link-options-handler\";\nimport { LinkBeanConstants } from \"../../constants/link-constants\";\nimport { LinkComponentType } from \"./link-root-types\";\nimport { AbstractController } from \"../../../utility/abstract-controller\";\nimport { LinkControllerHandlerType } from \"./link-controller-handler.types\";\nimport { getClassName, ILinkConfiguration, LinkEventOrigin } from \"../../link-configuration.types\";\nimport { formatValue } from \"../model/PhoneFormatter\";\nimport type { LinkStateManager } from \"../model/link-state-manager\";\nimport { MultilineComponent } from \"../../../Multiline/src/multiline\";\nimport { IMultilineConfiguration } from \"../../../Multiline/src/multiline-configuration.types\";\n\nclass LinkRootController extends AbstractController<LinkComponentType> {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler! : LinkOptionHandler;\n    @AutoWired(LinkBeanConstants.LINK_CONTROLLER_HANDLER) private controllerHandler! : LinkControllerHandlerType;\n    @AutoWired('stateManager') private stateManager !: LinkStateManager;\n\n\n    init() : void {\n        this.registerEvent();\n        this.refresh();\n        this.controllerHandler.registerCtrl(this);\n        const initialValue    = this.optionsHandler.getValue();\n        this.optionsHandler.setInitailValue(initialValue);\n        const isDisabled      = this.optionsHandler.isDisabled();\n        const isEditable      = this.optionsHandler.isEditable();\n        const wrapper         = this.component?.getLinkWrapperElement();\n        const anchorElement   = this.component?.getAnchorElement();\n\n        if(!isDisabled && wrapper && anchorElement){\n            this.addListener(wrapper, 'blur', this.onBlur.bind(this));\n            this.addListener(wrapper, 'focus', this.onFocus.bind(this));\n            this.addListener(anchorElement, 'click', this.click.bind(this))\n            this.addListener(anchorElement,'contextmenu', this.onContextMenu.bind(this));\n            this.addListener(anchorElement, 'mousedown', this.mouseDown.bind(this));\n            if(isEditable) {\n                if(this.component?.getElement()){   \n                    this.addListener(this.component.getElement(), 'focus', this.onFocusEdit.bind(this));\n                }\n            }\n        }\n\n\t\tthis.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n        this.addErrorClassName();\n\n    }\n\n    private addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.component!.getElement().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n\n    private onBlur(event: FocusEvent): void {\n        this.optionsHandler.onBlur(event);\n     }\n    private onFocus(event: FocusEvent): void {\n        this.optionsHandler.onFocus(event);\n\n \n    }\n    private click(event: MouseEvent): void {\n        event.stopPropagation();\n        this.optionsHandler.onClick(event);\n    }\n\n    private mouseDown(event: MouseEvent): void {\n        this.optionsHandler.onMouseDown(event);\n    }\n\n    private onContextMenu(event: MouseEvent): void {\n        this.optionsHandler.onContextMenu(event);\n    }\n\n\n    private onFocusEdit(event: FocusEvent): void {\n        event.preventDefault();\n        event.stopPropagation();\n        this.enableEdit();\n    }\n\n    updateProperties(options : ILinkConfiguration){\n        this.optionsHandler.updateProperties(options);\n        this.refresh();\n    }\n\n    registerEvent() : void {\n       this.addListener;\n       const element =  this.component?.getElement();\n       element?.classList.add('dg-textarea__root');\n       element?.classList.add('dg-field__root');\n       element?.classList.add('dg-link__root');    \n       element?.classList.add('dg-field--render-state');\n       const type =  this.optionsHandler.getType();\n       const classType = getClassName(type);\n       element?.classList.add(classType); \n\n    }\n\n    getElement() :  HTMLElement |  null{\n        return this.component?.getElement() ?? null;\n    }\n\n    getURL() :  string{\n        const element =  this.component?.getAnchorElement();\n        return element?.href?? '';\n    }\n\n    private enableEdit() : void { \n        const isReadOnly = this.optionsHandler.isReadOnly();\n        if(isReadOnly){\n            return;\n        }\n        const element = this.component?.getElement(); \n        const linkElement = this.component?.getElement().querySelector('a') as HTMLAnchorElement;\n        \n        let multilineInstance : MultilineComponent;\n        const multilineConfiguration : IMultilineConfiguration = {\n            appendTo :  element ?? undefined ,\n            value : this.optionsHandler.getValue(),\n            min : 1,\n            max : 1000,\n            onKeydown :(event :  KeyboardEvent )=>{\n                event.stopPropagation();\n                if (event.key === 'Enter' && !event.shiftKey) {\n                    const newValue = multilineInstance.api?.getValue();\n                    const normalizedValue = newValue !== undefined && newValue !== null ? newValue.toString() : undefined;\n                    if (normalizedValue) {\n                        this.applyValueChange(normalizedValue, 'ui');\n                        this.editRefresh(multilineInstance, linkElement, normalizedValue);\n                    }\n                }\n            },\n\n            onBlur :(event :  FocusEvent ) =>{\n                const newValue = multilineInstance.api?.getValue();\n                const normalizedValue = newValue !== undefined && newValue !== null ? newValue.toString() : undefined;\n                if (normalizedValue) {\n                    this.applyValueChange(normalizedValue, 'ui');\n                    this.editRefresh(multilineInstance, linkElement, normalizedValue);\n                }\n                const onBlur = this.optionsHandler.getOnBlurCallback()\n                const textComponentValue =  multilineInstance.api?.getValue() ??'';\n                \n                onBlur && onBlur({\n                    value : textComponentValue,\n                    event : event\n                });\n            }\n        }\n        multilineInstance  =  new MultilineComponent(multilineConfiguration);\n        linkElement && (linkElement.style.display = 'none');        \n        multilineInstance.api?.focus();\n    }\n\n    private applyValueChange(newValue: string | undefined, eventOrigin: LinkEventOrigin): boolean {\n        if (newValue === undefined || newValue === null) {\n            return false;\n        }\n        const normalizedValue = newValue.toString();\n        const previousValue = this.optionsHandler.getValue();\n\n        if (normalizedValue === previousValue) {\n            return false;\n        }\n\n        this.optionsHandler.updateAnchorText(normalizedValue);\n        this.component?.refresh();\n        this.optionsHandler.onChange(previousValue, normalizedValue, eventOrigin);\n        return true;\n    }\n\n    private editRefresh(multilineInstance : MultilineComponent,linkElement : HTMLAnchorElement,newValue : string | undefined) : void {\n        multilineInstance.api?.destroy();\n        if(linkElement && newValue){\n            linkElement.style.display = '';\n            linkElement.href = newValue;\n            linkElement.innerText = newValue;\n        }\n    }\n\n    private refresh() : void { \n        this.updateLabel();\n        this.updateTarget();\n        this.updateValue();\n        this.setAccessibility();\n    }\n\n    private updateValue() : void {\n        const newValue = this.optionsHandler.getValue();\n        const element = this.component?.getAnchorElement();\n        if(element){\n            const type = this.optionsHandler.configuration.type;\n            const format = this.optionsHandler.configuration.format;\n            if(type && format) {\n                const value =  formatValue(newValue,format);\n                element.innerText = value;\n\n            }else{\n                element.innerText = newValue;\n            }\n        }\n\n    }\n\n    private updateLabel() : void {\n        const label = this.optionsHandler.getLabel();\n        const labelElement = this.component?.getElement().querySelector('label');\n        const spanElement = labelElement?.querySelector('span');\n        if(spanElement && label){\n            spanElement.textContent =label\n        }\n    }\n\n    private updateTarget() :  void{\n        const target = this.optionsHandler.getTarget();\n        const element = this.component?.getAnchorElement();\n        if(element){\n            if(target == 'none'){\n                element.href ='#';\n                element.target = '_self'\n            }\n            else {\n                element.target = target;\n                this.optionsHandler.configuration.href ? element.href= this.optionsHandler.configuration.href: null;\n            }\n        }\n    }\n\n    // private updateTitle()  {\n    //     // const title = this.optionsHandler.;\n    //     // const element = this.component?.getAnchorElement();\n    //     // if(element){\n    //     //     element.title = title;\n    //     // }\n    // }\n\n    // private updateReadOnly() : void {\n    //     const element = this.component?.getElement();\n    //     const isReadOnly = this.optionsHandler.isReadOnly();\n    //     if(isReadOnly){\n    //         element?.classList.add('disabled');\n    //     }else {\n    //         element?.classList.remove('disabled');\n    //     }\n    // }\n\n    // private updateType() {\n\n    // }\n\n    // private updateDisabled(){\n\n    // }\n\n    // private updateFormat() {\n\n    // }\n\n    // private udateRTL(){\n\n    // }\n\n\n\n    setAccessibility() : void {\n        const rootElement = this.component?.getElement()\n        if(rootElement){\n            const inputElement = rootElement.childNodes[0] as HTMLElement;\n            if(!inputElement)  return;\n            const ariaLabel = this.optionsHandler.getAriaLabel();\n            const isDisabled   =  this.optionsHandler.isDisabled();\n            ariaLabel && setAriaLabel(inputElement, ariaLabel);\n            (isDisabled) &&inputElement.classList.add('disabled');\n            // const wrapperElement = this.component?.getLinkWrapperElement()\n            // setMaxVisibleLines(wrapperElement);\n\n        }\n\n    }\n\n    getProperty() {\n        const linkProperties = {\n            href                : this.optionsHandler.getHref(),\n            target              : this.optionsHandler.getTarget(),\n            underline           : this.optionsHandler.getUndlerLine(),\n            value               : this.optionsHandler.getValue(),\n            isToolTipEnabled    : this.optionsHandler.isTooltipEnabled(),\n            isReadOnly          : this.optionsHandler.isReadOnly(),\n            isDisabled          : this.optionsHandler.isDisabled(),\n            isEditable          : this.optionsHandler.isEditable(),\n            type                : this.optionsHandler.getType(),\n            rtl                 : this.optionsHandler.isRTL(),\n            format              : this.optionsHandler.getFormat()\n        }\n        return linkProperties;\n    }\n\n    getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-link__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-link__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses: ()=>  \"dg-link__validation-message\",\n\t\t\t\tgetDescriptionClasses      : ()=> \"dg-link__description\"\n\t\t\t}\n\t\t};\n    }\n\n    getValue() : any {\n        return this.optionsHandler.getValue();\n    }\n\n    getFormattedValue() {\n        const type =  this.optionsHandler.getType();\n        if(type == 'telephone'){\n            const element=this.component?.getAnchorElement();\n            return element?.textContent;\n        }\n        else{\n            return  this.optionsHandler.getValue();\n        }\n\n    }\n\n    setValue(value : string |  number) {\n        const isDisabled =  this.optionsHandler.isDisabled();\n        const isReadOnly = this.optionsHandler.isReadOnly();\n        if(isDisabled || isReadOnly){\n            return;\n        }\n\n        const normalizedValue = value !== undefined && value !== null ? value.toString() : undefined;\n        this.applyValueChange(normalizedValue, 'api');\n    }\n\n    focus() : void {\n        this.enableEdit()\n    }\n\n    blur() : void {\n\n    }\n    disable(value :  boolean) : void {\n        const isComponentDisabled =  this.optionsHandler.isDisabled();\n        if(isComponentDisabled == value){return}\n        const element = this.component?.getAnchorElement();\n        if(!element) return ;\n        if(value == true){\n            element.classList.add('disabled');\n            this.optionsHandler.setDisabled(value)\n        }\n        else{\n            element.classList.remove('disabled');\n            this.optionsHandler.setDisabled(value)\n        }\n        this.refresh();\n    }\n    \n    enable(value: boolean): void {\n        const isComponentEnabled = !this.optionsHandler.isDisabled();\n        if (isComponentEnabled == value) { return; }\n    \n        const element = this.component?.getAnchorElement();\n        if (!element) return;\n    \n        if (value === true) {\n            element.classList.remove('disabled');\n            this.optionsHandler.setDisabled(false);\n        } else {\n            element.classList.add('disabled');\n            this.optionsHandler.setDisabled(true);\n        }\n    \n        this.refresh();\n    }\n    \n    \n    resetValue() {\n        const initialValue =  this.optionsHandler.getInitailValue();\n        (initialValue.length>1) && this.setValue(initialValue);\n    }\n\n    hide(): void {\n       this.component && (this.component.getElement().style.display = 'none');\n    }\n    show(): void {\n        this.component && (this.component.getElement().style.display = 'block');\n    }\n    clear() :  void {\n        this.setValue('')\n    }\n}\n\n\nexport {\n    LinkRootController\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../label/modules/CSSRegistry\";\n\nexport function getLinkUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n    const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n    return generateUtilityClass('link', slots.slot, slots.modifiers,globalNameSpace as string[]);\n}","import { AutoWired, BEAN_NAME, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\"\nimport { LinkComponentType } from \"./link-root-types\";\nimport { LinkRootController } from \"../controller/link-root-controller\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getLinkUtilityClass } from \"../link-root-classes\";\nimport { LinkOptionHandlerTypes } from \"../model/link-option-handler.types\";\nimport { getAnchorHref } from \"../../link-configuration.types\";\nimport { formatValue } from \"../model/PhoneFormatter\";\n\n\nconst anchorTag = 'anchorTag';\nconst wrapper  = 'wrapper';\nconst useUtilityClasses = () => {\n    return composeClasses(\n        {\n            value: { slot: 'anchor-text', modifiers: [] },\n            root: { slot: 'root', modifiers: [] }\n        },\n        getLinkUtilityClass\n    );\n};\n\n\nconst rootTemplate = (props :  any, emptyDom : boolean, error : boolean) => {\n    const classes = useUtilityClasses();\n    const rootDiv = document.createElement('div');\n    rootDiv.classList.add(classes.root);\n    props.rtl && rootDiv.setAttribute('dir', 'rtl');\n    \n    if (props.isEditable) {\n        rootDiv.setAttribute('data-editable', 'true');\n        rootDiv.setAttribute('tabindex', '0');\n    }\n\n    const aTag = document.createElement('a');\n    aTag.target = props.target ?? '_blank';\n    aTag.setAttribute('ref', 'anchorTag');\n    if (aTag.target === '_blank') {// needed only for blank targeted\n        aTag.rel = 'noopener noreferrer'; // security and privacy\n      }\n    aTag.href = getAnchorHref(props.type,props.href);\n    if(props.target =='none'){\n        aTag.href ='#';\n        aTag.target = '_self'\n    }\n    \n    if (props.type === 'file') aTag.download = '';\n    if (props.value) {\n        if(props.type =='telephone' && props.format){\n            const value =  formatValue(props.value,props.format);\n            aTag.textContent = value;\n        }\n        else{\n            typeof props.value === 'string' ? aTag.textContent = props.value : aTag.append(props.value);\n        }\n    }\n    \n    \n    aTag.classList.add('dg-text__input', 'dg-field__input');\n\n    const linkWrapper = document.createElement('div');\n    linkWrapper.setAttribute('ref','wrapper');\n    linkWrapper.classList.add('dg-text__input-wrapper', 'dg-field__input-wrapper');\n    linkWrapper.append(aTag);\n    \n    if(emptyDom){\n        const textLabel = document.createElement(\"text-label\");\n        textLabel.setAttribute(\"ref\", 'label');\n        rootDiv.appendChild(textLabel);\n    }\n\n    const linkContainer = document.createElement('div');\n    linkContainer.classList.add('dg-text__container', 'dg-field__container');\n    linkContainer.append(linkWrapper);\n    rootDiv.append(linkContainer);\n\n    if(emptyDom){\n        const textHelper = document.createElement(\"text-helper\");\n        textHelper.setAttribute(\"ref\", 'description');\n        rootDiv.appendChild(textHelper);\n    }\n\n     if(emptyDom || error) {\n        const errorElement = document.createElement(\"link-error\");\n        errorElement.setAttribute(\"ref\", 'error');\n        rootDiv.appendChild(errorElement);\n    }\n    \n    return rootDiv;\n};\n\nclass LinkRootView extends Component{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: LinkOptionHandlerTypes;\n\n    @queryAssignedNodes(anchorTag) private anchorElement !: HTMLAnchorElement;\n    @queryAssignedNodes(wrapper) private wrapperElement !: HTMLElement;\n\n    private appendTo : HTMLElement |  null;\n\n    constructor(appendTo : HTMLElement) {\n        super();\n        this.appendTo = appendTo;\n        if (appendTo) {\n            appendTo.style.width = '100%';\n            appendTo.style.height = '100%';\n            appendTo.style.minHeight = '0';\n        }\n    }\n\n    @PostConstruct()\n    init() : void {\n\n        const component : LinkComponentType = {\n            addOrRemoveCssClassName : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement              : () => this.getGui(),\n            refresh                 : () => this.refresh(),\n            destroy                 : () => this.destroy(),\n            getAnchorElement        : () => { return this.anchorElement},\n            getLinkWrapperElement   : () => { return this.wrapperElement},\n\n        }\n\n        const controller = this.createBean(new LinkRootController());\n        \n        const props = controller.getProperty();\n        const properties = controller.getParamsProperty();\n        const emptyDom = this.shouldGenerateEmptyDom()\n        this.setTemplate(rootTemplate(props,emptyDom, this.optionHandler.showErrorState()), {\n            error      : properties.description,\n            label      : properties.label,\n            description: properties.description\n        });\n\n\n        controller.setComponent(component);\n\n        this.appendElementIntoUserDom();\n    }\n\n    shouldGenerateEmptyDom(){\n\t\tconst generateEmptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\tconst label = this.optionHandler.getLabel();\n\t\tconst description = this.optionHandler.getDescription();\n        const isLabel =  label.length > 0;\n        const isDescription = description.length > 0;\n\t\tif( isLabel || isDescription){\n\t\t\treturn true\n\t\t}else if(generateEmptyDom){\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo && this.appendTo.removeChild(eGui);\n\t\t\tthis.appendTo = null;\n\t\t});\n\t}\n\n    private refresh() : void {\n        const anchorTextValue = this.optionsHandler.getValue();\n        this.anchorElement && (this.anchorElement.innerText = anchorTextValue);\n    }\n\n}\n\nexport {\n    LinkRootView\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { LinkAPITypes } from \"./link-api.types\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { LinkBeanConstants } from \"../../constants/link-constants\";\nimport { LinkControllerHandlerType } from \"../controller/link-controller-handler.types\";\nimport { ILinkConfiguration } from \"../../link-configuration.types\";\nimport { LinkOptionHandlerTypes } from \"./link-option-handler.types\";\n\n\n@Bean(LinkBeanConstants.LINK_API)\nclass LinkAPI extends EventEmitter implements LinkAPITypes {\n\n    @AutoWired(LinkBeanConstants.LINK_CONTROLLER_HANDLER) private controller !: LinkControllerHandlerType;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: LinkOptionHandlerTypes;\n\n    focus(): void {\n        return this.controller.getLinkCtrl().focus();\n    }\n\n    blur(): void {\n        return this.controller.getLinkCtrl().blur();\n    }\n\n    getValue() : any {\n        return this.controller.getLinkCtrl().getValue();\n    }\n\n    setValue(value: number |  string): void {\n        return this.controller.getLinkCtrl().setValue(value);\n    }\n\n    disable(value : boolean): void {\n        return this.controller.getLinkCtrl().disable(value ?? true);\n    }\n\n    resetValue(): void {\n        return this.controller.getLinkCtrl().resetValue();\n    }\n\n    hide(): void {\n        this.controller.getLinkCtrl().hide();\n    }\n    show(): void {\n        this.controller.getLinkCtrl().show();\n    }\n    clear(): void {\n        this.controller.getLinkCtrl().clear();\n    }\n    destroy(): void {\n        const component = this.controller.getLinkCtrl().component\n        const rootElement = component?.getAnchorElement();\n        if(rootElement){\n            const newElement = rootElement.cloneNode(true);\n            rootElement.parentNode?.replaceChild(newElement, rootElement);\n        }\n        component?.getElement().remove();\n    }\n    enable(value: boolean): void {\n        return this.controller.getLinkCtrl().enable(value ?? true);\n    }\n\n    getElement(): HTMLElement |  null{\n        return this.controller.getLinkCtrl().getElement() ?? null;\n    }\n    getURL(): string {\n        return this.controller.getLinkCtrl().getURL();\n    }\n\n    updateProperties(options: ILinkConfiguration): void {\n        this.controller.getLinkCtrl().updateProperties(options);\n    }\n\n    getLabel(): string {\n        return this.optionHandler.getLabel();\n    }\n    getDescription(): string {\n        return this.optionHandler.getDescription();\n    }\n\n    getFormattedValue(): string {\n        return this.controller.getLinkCtrl().getFormattedValue() ?? \"\";\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}\n\nexport {\n    LinkAPI\n}","import { Bean } from \"@dg/corecomponent\";\nimport { LinkBeanConstants } from \"../../constants/link-constants\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { LinkControllerHandlerType } from \"./link-controller-handler.types\";\nimport { LinkRootController } from \"./link-root-controller\";\n\n@Bean(LinkBeanConstants.LINK_CONTROLLER_HANDLER)\nclass LinkControllerHandler extends EventEmitter implements LinkControllerHandlerType {\n    private linkCtrl !: LinkRootController;\n    registerCtrl(linkCtrl : LinkRootController) : void {\n        this.linkCtrl = linkCtrl;\n    }\n\n    getLinkCtrl() : LinkRootController {\n        return this.linkCtrl;\n    }\n}\n\nexport {\n    LinkControllerHandler\n}\n\n\n","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\n\n// import { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport {  UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { LinkUserComponentHandlerType } from \"./link-user-component-handler.types\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\nimport { ILabelUserComponentHandler } from \"../../../label/label.types\";\n\n\nexport const enum PropertyName {\n\tHELPER_TEXT_RENDERER = 'helpTextRenderer',\n\tERROR_RENDERER       = 'errorRenderer',\n\tLABEL_RENDERER       = 'labelRenderer'\n}\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nclass LinkUserComponentHandler extends UserComponentHandler implements LinkUserComponentHandlerType, ILabelUserComponentHandler{\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\t\n\t// protected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t// \tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n    //     const looUpRegistry = (name: string) => {\n\t// \t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t// \t\tconst item = userComponentRegistry.retrieve(name);\n\t// \t\tif (item) { \n    //             jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t// \t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n    //         }\n\t// \t};\n\n\t// \tif (componentName != null) {\n\t// \t\tlooUpRegistry(componentName);\n\t// \t}\n\n\t// \tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t// \t\tlooUpRegistry(defautName);\n\t// \t}\n\n\t// \tif (!jsComponent && !frameworkComponent) {\n\t// \t\treturn undefined;\n\t// \t}\n\n\t// \tconst componentFramework = jsComponent == null;\n\t// \tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n    //     const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t// \treturn {\n\t// \t\tcomponentFramework,\n\t// \t\tcomponentClass,\n\t// \t\tparams : mergedParams,\n\t// \t\tpropertyName,\n\t// \t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t// \t};\n\t// }\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta{\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\t// case PropertyName.PREFIX_RENDERER:\n\t\t\t// \treturn item.getRenderer();\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\t// case PropertyName.BUTTON_RENDERER:\n\t\t\t// \treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n\nexport {\n\tLinkUserComponentHandler\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { LinkStateHandlerType } from \"./link-state-handler.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { LinkOptionHandlerTypes } from \"./link-option-handler.types\";\n\nclass LinkStateHandler extends EventEmitter implements LinkStateHandlerType {\n\n\n    private focused !: boolean;\n    private disabled !: boolean;\n    private opened !: boolean;\n    private activated !: boolean;\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) linkOptionHandler !: LinkOptionHandlerTypes;\n    setURLFocuseState(_isFocused: boolean): void {\n        \n    }\n\n    setURLActiveState(_isActive: boolean): void {\n        \n    }\n\n    setURLDisableState(_isDisabled: boolean): void {\n        \n    }\n\n    setURLasOpenState(_isOpened: boolean): void {\n        \n    }\n\n    isURLOpened(): boolean {\n        return this.opened;\n    }\n\n    isURLActive(): boolean {\n        return this.activated;\n    }\n\n    isURLDisabled(): boolean {\n        return this.disabled;\n    }\n\n    isURLFocused(): boolean {\n        return this.focused;\n    }\n\n}\n\nexport {\n    LinkStateHandler\n}","\nimport {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { LinkOptionHandlerTypes } from \"./link-option-handler.types\";\n\n@Bean('stateManager')\n class LinkStateManager extends EventEmitter {\n\n    isInValid() : boolean {\n        return (this.optionsHandler as LinkOptionHandlerTypes).isValid();;\n    }\n}\nexport {\n    LinkStateManager\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ILinkConfiguration } from \"./link-configuration.types\";\nimport { LinkAPI } from \"./core/model/link-api\";\nimport { LinkOptionHandler } from \"./core/model/link-options-handler\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { LinkControllerHandler } from \"./core/controller/link-controller-handler\";\nimport { LinkUserComponentHandler } from \"./core/model/link-user-component-handler\";\nimport { LinkStateHandler } from \"./core/model/link-state-handler\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\n// import { DescriptionComponent } from \"../description/description-view\";\nimport { Label } from \"../label/label-view\";\nimport { LinkStateManager } from \"./core/model/link-state-manager\";\nimport { ErrorComponent } from \"../error/error-view\";\nimport { DescriptionComponent } from \"../description/description-view\";\n\n\ninterface IUserConfigurationMergedParams {\n    configuration: any;\n    frameWorkOverrides: IFrameworkOverrides | null;\n    globalEventListener: Function | null;\n    frameworkComponentWrapper: any | null;\n    instanceID : string;\n}\n\nlet nextInstanceId = 1;\n\nclass LinkCoreComponent {\n\n    initialize(configuration : ILinkConfiguration, params : IUserParams = {}, createUI : CallableFunction) {\n\n        const instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n        const beanClasses = this.createBeanClasses();\n\n        const context = new Context();\n\n        const userConfiguration = this.createuserConfiguration(configuration, params, instanceID);\n\n        context.registerBeanClasses(beanClasses, userConfiguration);\n\n        this.registerCoreComponent(context);\n\n        this.registerDefaultUserComponent(context);\n\n        createUI(context);\n\n        (window as any).linkContext = context;\n\n    }\n\n    createBeanClasses() : Set<any> {\n        let beanClassList = [\n            LinkAPI,\n            LinkOptionHandler,\n            LinkControllerHandler,\n            LinkStateHandler,\n            LinkUserComponentHandler,\n\t\t\tUserComponentRegistry,\n            ComponentsRegistry,\n            EventHandler,\n            ComponentMetadataProvider,\n            LinkStateManager\n        ];\n        const beanClassSet = new Set(beanClassList);\n        return beanClassSet;\n    }\n\n    private createuserConfiguration(configuration : any, params : IUserParams, instanceID : string) : IUserConfigurationMergedParams {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n    }\n\n    private registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n\n        \n    }\n\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n    \n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n}\nfunction createComponentList(): ComponentMeta[] {\n    let components: ComponentMeta[] = [{\n        componentName: 'text-label',\n        componentClass: Label\n    },\n    {\n        componentName : \"link-error\",\n        componentClass: ErrorComponent\n    },\n    {\n        componentName: 'text-helper',\n        componentClass : DescriptionComponent\n    }\n]\n    return components;\n}\nexport {\n    LinkCoreComponent\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nimport { AutoWired, BEAN_NAME, Bean} from \"@dg/corecomponent\";\nimport { IFormatter } from \"./formatter.types\";\nimport { INumericAdjusterModel } from \"../core/model/number-adjuster.types\";\n\n@Bean('formatter')\nexport class NumberFormatter extends EventEmitter implements IFormatter {\n    @AutoWired(\"NumberAdjusterHandler\") protected adjusterHandler !: INumericAdjusterModel;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionsHandler: any;\n\n    formatter():string {\n        const isEmpty = this.adjusterHandler.isEmty();\n        if (isEmpty) {\n            return \"\";\n        }\n        const value                = this.adjusterHandler.getValue()as number;\n        let precision            = this.optionsHandler.getDecimalPrecision();\n        const locale               = this.optionsHandler.getLocale();\n        const useThousandSeparator = this.optionsHandler.hasThousandsSeparator();\n        const customSeparator      = this.optionsHandler.getThousandSeparatorChar();\n        const decimalSeparator     = this.optionsHandler.getDecimalSeparator();\n\n        if (isNullish(value)) {\n            return \"\";\n        }\n        if (precision == null) {\n            precision = calculatePrecision(value);\n        }\n\n        const options: Intl.NumberFormatOptions = {\n            style: \"decimal\",\n            maximumFractionDigits: precision,\n            minimumFractionDigits: precision,\n            useGrouping:useThousandSeparator\n        };\n\n        const formatter = createNumberFormatter(locale, options);\n        let formattedValue = formatter.format(value);\n        if (useThousandSeparator && customSeparator) {\n            formattedValue = replaceThousandSeparator(formattedValue, locale, options, customSeparator);\n        }\n        if (decimalSeparator !== '.') {\n            formattedValue = replaceDecimalSeparator(formattedValue, locale, options, decimalSeparator);\n        }\n        \n        return formattedValue;\n    }\n}\n\nexport function isNullish(value: unknown): value is null | undefined {\n    return value === null || value === undefined;\n}\n\n\nexport function calculatePrecision(value: number): number {\n    const valueString = value.toString();\n    const decimalIndex = valueString.indexOf('.');\n    if (decimalIndex === -1) {\n        return 0; // No decimal places\n    }\n    return valueString.length - decimalIndex - 1; // Number of digits after the decimal point\n}\n\nfunction replaceThousandSeparator(formattedValue: string,locale: string | undefined,options: Intl.NumberFormatOptions,customSeparator: string): string {\n    const parts = createNumberFormatter(locale, options).formatToParts(1234567);\n    const groupingPart = parts.find(part => part.type === 'group');\n    const localeSeparator = groupingPart ? groupingPart.value : ',';\n    return formattedValue.replace(new RegExp(escapeRegExp(localeSeparator), 'g'), customSeparator);\n}\n\nfunction replaceDecimalSeparator(formattedValue: string,locale: string | undefined,options: Intl.NumberFormatOptions,customSeparator: string): string {\n    const parts = createNumberFormatter(locale, options).formatToParts(1.5);\n    const decimalPart = parts.find(part => part.type === 'decimal');\n    const localeSeparator = decimalPart ? decimalPart.value : '.';\n    const lastIndex = formattedValue.lastIndexOf(localeSeparator);\n    if (lastIndex === -1) {\n        return formattedValue;\n    }\n    \n    return formattedValue.substring(0, lastIndex) + customSeparator + formattedValue.substring(lastIndex + 1);\n}\n\nfunction escapeRegExp(string: string): string {\n    return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeLocale(locale?: string): string | undefined {\n    if (!locale || locale.toLowerCase() === 'none') {\n        return undefined;\n    }\n    return locale;\n}\n\nfunction createNumberFormatter(locale: string | undefined, options: Intl.NumberFormatOptions): Intl.NumberFormat {\n    const normalizedLocale = normalizeLocale(locale);\n    try {\n        return new Intl.NumberFormat(normalizedLocale, options);\n    } catch {\n        // Fallback to default locale when provided value is invalid\n        return new Intl.NumberFormat(undefined, options);\n    }\n}","import { NumberFormatter } from \"../../formatter/NumberFormatter\";\n\n\nexport const DecimalModule = {\n    version : '1.0.0',\n    moduleName : 'decimal',\n    modelType : 'decimal',\n    beans : [NumberFormatter]\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { IFormatter } from \"./formatter.types\";\nimport { INumericAdjusterModel } from \"../core/model/number-adjuster.types\";\n\n \n@Bean('formatter')\nexport class CurrencyFormatter extends EventEmitter implements IFormatter {\n\t@AutoWired(\"NumberAdjusterHandler\") protected adjusterHandler!: INumericAdjusterModel;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionsHandler: any; // Adjust the type and import path as needed\n  \n\tformatter(): string {\n\t\tconst isEmpty = this.adjusterHandler.isEmty();\n\t\tif (isEmpty) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst value                = this.adjusterHandler.getValue() as number;\n\t\tconst precision            = this.optionsHandler.getDecimalPrecision();\n\t\tconst locale               = this.optionsHandler.getLocale();\n\t\tlet   currencyCode         = this.optionsHandler.getCurrencyCode();\n\t\tconst useThousandSeparator = this.optionsHandler.hasThousandsSeparator();\n\t\tconst customSeparator      = this.optionsHandler.getThousandSeparatorChar();\n\t\tconst decimalSeparator    = this.optionsHandler.getDecimalSeparator();\n\t\tconst useCurrencyCode      = this.optionsHandler.getUseCurrencyCode();\n\t\tconst hideSymbol           = this.optionsHandler.isHideSymbol();\n\t\tconst symbolPosition       = this.optionsHandler.getSymbolPosition();\n\t\tconst currencySymbol       = this.optionsHandler.getCurrencySymbol();\n\n  \n\t\tif (isNullish(value)) {\n\t\t\treturn \"\";\n\t\t}\n  \n\t  const currencyDisplay = useCurrencyCode ? \"code\" : \"symbol\";\n\n\t  let option : Intl.NumberFormatOptions ;\n\n\t  if(hideSymbol){\n\t\toption = {\n\t\t\tstyle: \"decimal\",\n\t\t\tmaximumFractionDigits: precision,\n\t\t\tminimumFractionDigits: precision,\n\t\t\tuseGrouping:useThousandSeparator\n\t\t};\n\n\t  } else{\n\t\toption  = { \n\t\t\tstyle: hideSymbol ? 'decimal':'currency',\n\t\t\tcurrencyDisplay,\n\t\t\tcurrency: currencyCode,\n\t\t\tmaximumFractionDigits: precision,\n\t\t\tminimumFractionDigits: precision,\n\t\t\tuseGrouping: useThousandSeparator,\n\t\t  } \n\t  }\n  \n  \n\t  const formatter = createNumberFormatter(locale, option);\n\t  let formattedValue = formatter.format(value);\n\n\t  if (useThousandSeparator && customSeparator) {\n\t\tformattedValue = replaceThousandSeparator(formattedValue, locale, option, customSeparator);\n\t  }\n\t  if (decimalSeparator !== '.') {\n\t\tformattedValue = replaceDecimalSeparator(formattedValue, locale, option, decimalSeparator);\n\t  }\n\t  \n\t  \n\t  if(currencySymbol){\n\t\tformattedValue = setSybmol(formattedValue,currencySymbol,symbolPosition) as string;\n\t  }else{\n\t\tformattedValue = formatString(locale, currencyCode, formattedValue,symbolPosition) as string\n\t  }\n\n\t  return formattedValue;\n\t}\n  }\n  \n  function isNullish(value: unknown): value is number {\n\treturn value === null || value === undefined;\n  }\n\n   export function setSybmol(formattedValue: string, currencySymbol :string,position:string){\n\t\n\tif(position === \"right\"){\n\t\treturn `${formattedValue} ${currencySymbol}`\n\t}else if(position === \"left\"){\n\t\tconst trimmed = formattedValue.trim();\n\t\tconst isNegative = trimmed.startsWith('-');\n\t\tconst core = isNegative ? trimmed.slice(1).trim() : trimmed;\n\t\t// Match Intl currency sign placement (e.g. en-IN INR: -₹1,74,317.00 not ₹ -1,74,317.00)\n\t\treturn isNegative ? `-${currencySymbol}${core}` : `${currencySymbol}${core}`;\n\t}else{\n\t\treturn formattedValue; // Return original if no position provided or invalid position provided.\n\t}\n  }\n\n  export function formatString(locale : string, currency : string, inputString:string, position?:string){\n\tif (!position) {\n\t\treturn inputString\n\t} \n\n\tconst parts = createNumberFormatter(locale, {\n\t\tstyle: 'currency',\n\t\tcurrency,\n\t\tcurrencyDisplay: 'symbol',\n\t\tminimumFractionDigits: 0,\n\t\tmaximumFractionDigits: 0,\n\t}).formatToParts(1);\n\n\tconst symbolPart = parts.find(p => p.type === 'currency');\n\tconst symbol = symbolPart ? symbolPart.value : '';\n\n\tconst numeric = inputString.replace(symbol, '').trim();\n\n\tif(position === \"right\") {\n\t\treturn `${numeric} ${symbol}`;\n\t} else if(position === \"left\") {\n\t\tif (numeric.startsWith('-')) {\n\t\t\treturn `-${symbol}${numeric.slice(1).trim()}`;\n\t\t}\n\t\treturn `${symbol}${numeric}`;\n\t} else {\n\t\treturn inputString;\n\t}\n\t\n}\n\n\nfunction replaceThousandSeparator(formattedValue: string,locale: string | undefined,options: Intl.NumberFormatOptions,customSeparator: string): string {\n\tconst parts = createNumberFormatter(locale, options).formatToParts(1234567);\n\tconst groupingPart = parts.find(part => part.type === 'group');\n\tconst localeSeparator = groupingPart ? groupingPart.value : ',';\n\treturn formattedValue.replace(new RegExp(escapeRegExp(localeSeparator), 'g'), customSeparator);\n}\n\nfunction replaceDecimalSeparator(formattedValue: string,locale: string | undefined,options: Intl.NumberFormatOptions,customSeparator: string): string {\n\tconst parts = createNumberFormatter(locale, options).formatToParts(1.5);\n\tconst decimalPart = parts.find(part => part.type === 'decimal');\n\tconst localeSeparator = decimalPart ? decimalPart.value : '.';\n\tconst lastIndex = formattedValue.lastIndexOf(localeSeparator);\n\tif (lastIndex === -1) {\n\t\treturn formattedValue;\n\t}\n\treturn formattedValue.substring(0, lastIndex) + customSeparator + formattedValue.substring(lastIndex + 1);\n}\n\nfunction escapeRegExp(string: string): string {\n\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeLocale(locale?: string): string | undefined {\n\tif (!locale || locale.toLowerCase() === 'none') {\n\t\treturn undefined;\n\t}\n\treturn locale;\n}\n\nfunction createNumberFormatter(locale: string | undefined, options: Intl.NumberFormatOptions): Intl.NumberFormat {\n\tconst normalizedLocale = normalizeLocale(locale);\n\ttry {\n\t\treturn new Intl.NumberFormat(normalizedLocale, options);\n\t} catch {\n\t\treturn new Intl.NumberFormat(undefined, options);\n\t}\n}\n","import { CurrencyFormatter } from \"../../formatter/CurrencyFormatter\";\n\n\nexport const CurrencyModule = {\n    version : '1.0.0',\n    moduleName : 'curreny',\n    modelType : 'currency',\n    beans : [CurrencyFormatter]\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { IFormatter } from \"./formatter.types\";\nimport { INumericAdjusterModel } from \"../core/model/number-adjuster.types\";\n\n@Bean('formatter')\nexport class PercentageFormatter extends EventEmitter implements IFormatter {\n    @AutoWired(\"NumberAdjusterHandler\") protected adjusterHandler !: INumericAdjusterModel;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionsHandler: any;\n\n    formatter():string {\n        const isEmpty = this.adjusterHandler.isEmty();\n        if (isEmpty) {\n            return \"\";\n        }\n        \n        const value                = this.adjusterHandler.getValue();\n        const precision            = this.optionsHandler.getDecimalPrecision();\n        const locale               = this.optionsHandler.getLocale();\n        const useThousandSeparator = this.optionsHandler.hasThousandsSeparator();\n        const hideSymbol           = this.optionsHandler.isHideSymbol();\n        const customSeparator      = this.optionsHandler.getThousandSeparatorChar();\n        const decimalSeparator     = this.optionsHandler.getDecimalSeparator();\n        \n\n        if (isNullish(value)) {\n            return \"\";\n        }\n\n        const options: Intl.NumberFormatOptions = {\n            style: hideSymbol ?\"decimal\":\"percent\",\n            maximumFractionDigits: precision,\n            minimumFractionDigits: precision,\n            useGrouping: useThousandSeparator\n        };\n        \n\n        const formatter = createNumberFormatter(locale, options);\n        let formattedValue = formatter.format(value as number);\n        if (useThousandSeparator && customSeparator) {\n            formattedValue = replaceThousandSeparator(formattedValue, locale, options, customSeparator);\n        }\n        if (decimalSeparator !== '.') {\n            formattedValue = replaceDecimalSeparator(formattedValue, locale, options, decimalSeparator);\n        }\n        \n        return formattedValue;\n    }\n}\n\nfunction isNullish(value: unknown): value is null | undefined {\n    return value === null || value === undefined;\n}\n\nfunction replaceThousandSeparator(formattedValue: string,locale: string | undefined,options: Intl.NumberFormatOptions,customSeparator: string): string {\n    const parts = createNumberFormatter(locale, options).formatToParts(1234567);\n    const groupingPart = parts.find(part => part.type === 'group');\n    const localeSeparator = groupingPart ? groupingPart.value : ',';\n    return formattedValue.replace(new RegExp(escapeRegExp(localeSeparator), 'g'), customSeparator);\n}\n\nfunction replaceDecimalSeparator(formattedValue: string,locale: string | undefined,options: Intl.NumberFormatOptions,customSeparator: string): string {\n    const parts = createNumberFormatter(locale, options).formatToParts(1.5);\n    const decimalPart = parts.find(part => part.type === 'decimal');\n    const localeSeparator = decimalPart ? decimalPart.value : '.';\n    const lastIndex = formattedValue.lastIndexOf(localeSeparator);\n    if (lastIndex === -1) {\n        return formattedValue;\n    }\n    return formattedValue.substring(0, lastIndex) + customSeparator + formattedValue.substring(lastIndex + 1);\n}\n\nfunction escapeRegExp(string: string): string {\n    return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeLocale(locale?: string): string | undefined {\n    if (!locale || locale.toLowerCase() === 'none') {\n        return undefined;\n    }\n    return locale;\n}\n\nfunction createNumberFormatter(locale: string | undefined, options: Intl.NumberFormatOptions): Intl.NumberFormat {\n    const normalizedLocale = normalizeLocale(locale);\n    try {\n        return new Intl.NumberFormat(normalizedLocale, options);\n    } catch {\n        return new Intl.NumberFormat(undefined, options);\n    }\n}","import { PercentageFormatter } from \"../../formatter/PercentageFormatter\";\n\n\nexport const PercentageModule = {\n    version   : '1.0.0',\n    moduleName: 'percentage',\n    modelType : 'percent',\n    beans     : [PercentageFormatter]\n}","export const NUMBER_BEAN_NAME = {\n\tNUMBER_API               : 'numberAPI',\n\tNUMBER_CONFIGURATION     : 'configuration',\n\tCSSCLASSNAMEGENERATOR    : 'CSSClassNameGenartor',\n\tNUMBER_ADJUSTER_HANDLER  : 'NumberAdjusterHandler',\n\tFORMATTER                : 'formatter',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tNUMBER_EVENT_HANDLER     : 'NumberEventHandler',\n\tNUMBER_CONTROLLER_HANDLER: 'NumberControllerHandler',\n\tNUMBER_TOOLTIP_HANDLER   : 'NumberTooltipHandler',\n};","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { NumberController } from \"../number-root/number-root-controller\";\n\n@Bean(NUMBER_BEAN_NAME.NUMBER_CONTROLLER_HANDLER)\nexport class NumberControllerHandler extends EventEmitter {\n\tprivate numberCtrl!: any;\n\tregisterNumber(numberCtrl: any): void {\n\t\tthis.numberCtrl = numberCtrl;\n\t}\n\n\tgetNumberCtrl(): NumberController {\n\t\treturn this.numberCtrl;\n\t}\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport {EventEmitter}from '@dg/corecomponent/EventEmitter.js';\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumberConfiguration } from \"../../number-configuration.types\";\nimport { NumberControllerHandler } from \"./number-controller\";\nimport { INumberAPI, subElement } from \"./number-api.types\";\nimport { INumericAdjusterModel } from \"./number-adjuster.types\";\nimport { NumberTooltipHandlerType } from \"./number-tooltip-handler.types\";\nimport { IFormatter } from \"../../formatter/formatter.types\";\nimport type { NumberOptionHandler } from \"./number-option-handler\";\nimport type { NumberStateManager } from \"./number-state-manager\";\n\n\n\n\n@Bean(NUMBER_BEAN_NAME.NUMBER_API)\nexport class NumberAPI extends EventEmitter implements INumberAPI{\n\n    @AutoWired('configuration') configuration!: INumberConfiguration;\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_CONTROLLER_HANDLER) controllerHandler !: NumberControllerHandler;\n\t@AutoWired('NumberAdjusterHandler') numberModel !: INumericAdjusterModel;\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_TOOLTIP_HANDLER) numberTooltipHandler!: NumberTooltipHandlerType;\n    @AutoWired(NUMBER_BEAN_NAME.FORMATTER) formatter !: IFormatter;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: NumberOptionHandler;\n    @AutoWired(\"stateManager\") private stateManager !: NumberStateManager;\n\n    disable(_force: boolean): void {\n       this.updateProperties({\n           disabled: true\n       })\n    }\n    setFocus(_position?: number | undefined, _selectContent?: boolean | undefined): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    hide(subElement?: subElement[]): void {\n        if (!subElement || subElement.length === 0) {\n            // Hide the entire component if no specific elements are specified\n            return this.controllerHandler.getNumberCtrl().hide([]);\n        }\n\n        // Validate that all elements in subElement are valid\n        const validElements = subElement.filter(element => \n            ['prefix', 'suffix', 'label', 'description', 'inputPrefix', 'inputSuffix', 'container', 'tooltip', 'errorMessage', 'validationMessage'].includes(element)\n        );\n\n        if (validElements.length === 0) {\n            console.warn('No valid elements specified to hide');\n            return;\n        }\n\n        return this.controllerHandler.getNumberCtrl().hide(validElements);\n    }\n    show(subElement?: subElement[]): void {\n        if (!subElement || subElement.length === 0) {\n            // Hide the entire component if no specific elements are specified\n            return this.controllerHandler.getNumberCtrl().show([]);\n        }\n\n        // Validate that all elements in subElement are valid\n        const validElements = subElement.filter(element => \n            ['prefix', 'suffix', 'label', 'description', 'inputPrefix', 'inputSuffix', 'container', 'tooltip', 'errorMessage', 'validationMessage'].includes(element)\n        );\n\n        if (validElements.length === 0) {\n            console.warn('No valid elements specified to show');\n            return;\n        }\n\n        return this.controllerHandler.getNumberCtrl().show(validElements);\n    }\n\n    isValid(): boolean {\n        return !this.stateManager.isInValid();\n    }\n\n    getProperties(): INumberConfiguration {\n       return this.configuration;\n    }\n   \n\n    getName() { \n        return NUMBER_BEAN_NAME.NUMBER_API\n    };\n\n\n    getElement() : HTMLElement {\n        return this.controllerHandler.getNumberCtrl().getElement() as HTMLElement;\n    }\n\n    getValue():number | null{\n        const isEmty = this.numberModel.isEmty();\n        if(isEmty){\n            return null;\n        }\n        const numValue = this.numberModel.getValueAsNumber();\n        const stringValue = this.numberModel.getValueAsString();\n        \n        if (!stringValue) {\n            return numValue;\n        }\n    \n        // If stringValue contains scientific notation, parse it to get the correct numeric value\n        const stringValueHasScientificNotation = stringValue.includes('e') || stringValue.includes('E');\n        if (stringValueHasScientificNotation) {\n            const parsed = Number(stringValue);\n            // Return the parsed numeric value, not the string\n            return isNaN(parsed) ? numValue : parsed;\n        }\n        \n        const numValueString = numValue.toString();\n        const hasScientificNotation = numValueString.includes('e') || numValueString.includes('E');\n        \n        // If the number value has scientific notation but the string doesn't, use the string to get the correct value\n        if (hasScientificNotation && !stringValueHasScientificNotation) {\n            const parsed = Number(stringValue);\n            return isNaN(parsed) ? numValue : parsed;\n        }\n        \n        // If the number exceeds MAX_SAFE_INTEGER and string doesn't have scientific notation, use string value\n        if (Math.abs(numValue) > Number.MAX_SAFE_INTEGER && !stringValueHasScientificNotation) {\n            const parsed = Number(stringValue);\n            // Return the parsed value (it's still a number, even if it would display in scientific notation)\n            return parsed;\n        }\n        \n        return numValue;\n    }\n\n    focus():void{\n        this.controllerHandler.getNumberCtrl().focus();\n    }\n\n    setValue(value:number):void{\n        \n        if (!isNaN(value)) {\n            this.numberModel.setIsEmpty(false);\n            const valueString = value ? value.toString() : value;\n\n            this.numberModel.setValue(valueString as string);\n            this.numberModel.commitChange('api');\n        }\n\n    }\n\n    validate():boolean{\n        return this.numberModel.isValid();\n    }\n\n    resetValue():void{\n        const value = this.numberModel.getDefaultValue();\n        const valueString = value ? value.toString() : value;\n        this.numberModel.onValueUpdate(value, valueString as string);\n    }\n\n    clear():void{\n        this.numberModel.setIsEmpty(true); \n        this.numberModel.onValueUpdate(0, '0');\n\n    }\n\n    increment():void{\n        const oldValue = this.numberModel.getValue();\n        this.numberModel.increment();\n        const newValue = this.numberModel.getValue();\n        this.optionsHandler.onIncrement(oldValue, newValue);\n    }\n\n    decrement():void{\n        const oldValue = this.numberModel.getValue();\n        this.numberModel.decrement();\n        const newValue = this.numberModel.getValue();\n        this.optionsHandler.onDecrement(oldValue, newValue);\n    }\n\n    blur(): void{\n        this.controllerHandler.getNumberCtrl().blur();\n\n    }\n\n     destroy(): void {\n        this.controllerHandler.getNumberCtrl().destroy();\n        this.numberTooltipHandler.destroyTooltip();\n    }\n\n    updateProperties(properties: INumberConfiguration): void {\n        // Iterate over the keys of properties and update configuration\n        Object.entries(properties).forEach(([key, value]) => {\n            // if (value !== undefined) {\n                // Cast key as keyof INumberConfiguration to maintain type safety\n                (this.configuration as any)[key] = value; \n            // }\n        });\n\n        // properties.value = !properties.value ? this.numberModel.getValue() : properties.value\n    \n        // If 'value' is specifically updated, handle it separately\n        \n        if(properties.hasOwnProperty(\"value\") && containsNumberOnly(properties.value)){\n            if(typeof properties.value === 'string' || properties.value == null) {\n                this.numberModel.setValue(null)\n                this.numberModel.setIsEmpty(true); \n            }else {\n                this.numberModel.setValue(properties.value!.toString())\n                this.numberModel.setIsEmpty(false); \n            }\n            \n        }\n\n        this.dispatchEvent({\n            type: \"PROPERTY_CHANGED\",\n            options: properties,\n        });\n\n        // if(properties.prefix !== undefined){\n        //     this.dispatchEvent({\n        //         type: \"EVENT_SET_PREFIX\",\n        //         options: properties,\n        //     });\n        // }\n        // if(properties.suffix!== undefined){\n        //     this.dispatchEvent({\n        //         type: \"EVENT_SET_SUFFIX\",\n        //         options: properties,\n        //     });\n        // }\n\n        if(properties.hasOwnProperty(\"value\")) {\n            if(properties.value === null){\n                this.numberModel.setValue(null);\n                this.numberModel.setIsEmpty(true);\n\n                this.dispatchEvent({\n                    type: \"EVENT_CLEAR_VALUE\",\n                    options: properties,\n                });\n            }else if(properties.value !== undefined  && !isNaN(properties.value as number)){ \n                const formattedValue = properties.value.toString();\n                this.numberModel.setValue(formattedValue);\n            }\n        }\n        \n\n        \n        \n    \n        // Dispatch the event to notify listeners of the property changes\n       \n        \n        \n    }\n\n    destroyToolTip(): void {\n        this.numberTooltipHandler.destroyTooltip();\n    }\n\n    openToolTip(): void {\n        this.numberTooltipHandler.createToolTip(this.getElement())\n        this.numberTooltipHandler.openToolTip();\n    }\n\n    getFormattedValue(){\n        return this.formatter.formatter()\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}\n\n\nfunction containsNumberOnly(_value: any): boolean{\n    // need to be implement the locgc for number check\n\n\n    return true;\n\n}\n","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\n\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { INumberOptionHandler, NumberChangeOrigin } from \"./number-option-handler.types\";\nimport { INumberAPI } from \"./number-api.types\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumberConfiguration, IRenderer } from \"../../number-configuration.types\";\nimport { INumericAdjusterModel } from \"./number-adjuster.types\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class NumberOptionHandler extends EventEmitter implements INumberOptionHandler {\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_API) api!: INumberAPI;\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_CONFIGURATION) configuration!: INumberConfiguration;\n    @AutoWired('NumberAdjusterHandler') adjusterModel !: INumericAdjusterModel;\n\n\n    getInstanceID(): string | undefined {\n        return this.configuration.instanceID;\n    }\n\n    getDefaultValue():number | undefined {\n        const value = this.configuration.defaultValue ?? undefined\n        return typeof value === 'string' ? undefined : value;\n    }\n\n    getValue(): number  | null{\n        const value = this.configuration.value ?? null\n        return typeof value === 'string' ? null : value;\n    }\n\n    isReadonly(): boolean | undefined {\n        return this.configuration.readonly;\n    }\n\n    isDisabled(): boolean | undefined {\n        return this.configuration.disabled;\n    }\n\n    getSize(): 'xs' | 'sm' | 'md' | 'lg' | undefined {\n        return this.configuration.size;\n    }\n\n    getValidator(): CallableFunction | undefined {\n        return this.configuration.validator;\n    }\n\n    getValidationMessage(): string | undefined {\n        return this.configuration.validationMessage;\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ??  false;\n    }\n\n    getName(): string | undefined {\n        return this.configuration.name;\n    }\n\n    isAllowNull(): boolean | undefined {\n        return this.configuration.allowNull ?? true;\n    }\n\n\tisAllowWrapAround():boolean  {\n\t\treturn this.configuration.allowWrapAround ?? false;\n\n\t}\n\n    getLabel(): string | undefined {\n        return this.configuration.label;\n    }\n\n    getPlaceholder(): string | undefined {\n        return this.configuration.placeholder;\n    }\n\n    getTitle(): string | undefined {\n        return this.configuration.title;\n    }\n\n    getDescription(): string | undefined {\n        return this.configuration.description;\n    }\n\n    getClassName(): string | string[]  | undefined {\n        return this.configuration.className;\n    }\n\n    getAriaLabel(): string | undefined {\n        return this.configuration.ariaLabel ?? \"numbercomponent\";\n    }\n\n    getAppendTo(): HTMLElement | undefined {\n        return this.configuration.appendTo;\n    }\n\n    getPrefixValue(): string | undefined {\n        return this.configuration.prefix;\n    }\n\n    getSuffixValue(): string | undefined {\n        return this.configuration.suffix;\n    }\n\n    isPrefixRenderer(): boolean {\n        return this.configuration.prefix ? true : false\n    }\n    isSuffixRenderer(): boolean {\n        return this.configuration.suffix  ? true : false;\n    }\n\n    getPrefixRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.prefixRenderer;\n    }\n\n    getPrefixRendererParams(): object | undefined {\n        return this.configuration.prefixRendererParams;\n    }\n\n    getSuffixRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.suffixRenderer;\n    }\n\n    getSuffixRendererParams(): object | undefined {\n        return this.configuration.suffixRendererParams;\n    }\n\n    getDescriptionRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.descriptionRenderer;\n    }\n\n    getDescriptionRendererParams(): object | undefined {\n        return this.configuration.descriptionRendererParams;\n    }\n\n    getValidationMessageRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    getMin(): number  {\n        const min = this.configuration.min ?? Number.MIN_SAFE_INTEGER;\n        return typeof min === 'string' ? Number.MIN_SAFE_INTEGER : min;\n    }\n\n    getMax(): number  {\n        const max = this.configuration.max ?? Number.MAX_SAFE_INTEGER;\n        return typeof max === 'string' ? Number.MAX_SAFE_INTEGER : max  ;\n    }\n\n    getStep(): number | undefined {\n        return this.configuration.step ?? 1;\n    }\n\n    getShortStep(): number | undefined {\n        return this.configuration.shortStep ?? 0;\n    }\n\n    getLongStep(): number | undefined {\n        return this.configuration.longStep ?? 0;\n    }\n\n    getDecimalPrecision(): number | null | undefined {\n        return this.configuration.decimalPrecision;\n    }\n\n    isKeepWithinRange(): boolean | undefined {\n        return this.configuration.keepWithinRange;\n    }\n\n    isClampValueOnBlur(): boolean | undefined {\n        return this.configuration.clampValueOnBlur;\n    }\n\n    hasThousandsSeparator(): boolean | undefined {\n        return this.configuration.thousandsSeparator ??  false;\n    }\n\n    getThousandSeparatorChar(): string | undefined {\n        return this.configuration.thousandSeparatorChar;\n    }\n\n    getDecimalSeparator(): string {\n        return this.configuration.decimalSeparator ?? '.';\n    }\n\n    getSpinButton(): 'split' | 'together' | 'none' | undefined {\n        return this.configuration.spinButton;\n    }\n\n    isAllowMouseWheel(): boolean | undefined {\n        return this.configuration.allowMouseWheel;\n    }\n\n    getCustomValidationMessage(): CallableFunction | undefined {\n        return this.configuration.customValidationMessage;\n    }\n\n    getTemplate(props:any): object | undefined {\n        return this.configuration.template && this.configuration.template(props);\n    }\n\n    getFormatter(value : string):any {\n        if(this.configuration.formatter){\n            return this.configuration.formatter(value);\n        }\n    }\n\n    getDecrementButtonSVGIconId(): string  {\n        return this.configuration.decrementButtonSVGIconId ?? \"icon-down-arrow\";\n    }\n\n    getIncrementButtonSVGIconId(): string  {\n        return this.configuration.incrementButtonSVGIconId ?? \"icon-up-arrow\";\n    }\n\n    getDecrementButtonRenderer(): { new(...args: any[]): IRenderer } | undefined {\n        return this.configuration.decrementButtonRenderer;\n    }\n\n    getDecrementButtonRendererParams(): object | undefined {\n        return this.configuration.decrementButtonRendererParams;\n    }\n\n    getIncrementButtonRenderer(): { new(...args: any[]): IRenderer } | undefined {\n        return this.configuration.incrementButtonRenderer;\n    }\n\n    getIncrementButtonRendererParams(): object | undefined {\n        return this.configuration.incrementButtonRendererParams;\n    }\n\n    getLocale(): string | undefined {\n        return this.configuration.locale;\n    }\n\n    getCurrencyCode(): string  {\n        return this.configuration.currencyCode ?? \"INR\";\n    }\n\n    getUseCurrencyCode(): boolean  {\n        return this.configuration.useCurrencyCode ?? false;\n    }\n\n    getCurrencySymbol(): string  {\n        return this.configuration.currencySymbol ?? \"\";\n    }\n\n    // Hook Methods\n    onChange(oldValue: number, newValue: number, eventOrigin: NumberChangeOrigin): void {\n        if (this.configuration.onChange) {\n            this.configuration.onChange(oldValue, newValue, eventOrigin);\n        }\n    }\n\n    onFocus(event : FocusEvent): void {\n        if (this.configuration.onFocus) {\n            this.configuration.onFocus(event);\n        }\n    }\n\n    onBlur(): void {\n        if (this.configuration.onBlur) {\n            this.configuration.onBlur();\n        }\n    }\n\n    onInput(value: number): void {\n        if (this.configuration.onInput) {\n            this.configuration.onInput(value);\n        }\n    }\n    onKeydown(event :KeyboardEvent): boolean | undefined {\n        if (this.configuration.onKeydown) {\n           return  this.configuration.onKeydown(event);\n        }\n        return undefined\n        \n\n    }\n\n    onError(value: number): void {\n        if (this.configuration.onError) {\n            this.configuration.onError(value);\n        }\n    }\n\n    onEnter( newValue: number): void {\n        if (this.configuration.onEnter) {\n            this.configuration.onEnter(newValue);\n        }\n    }\n\n    onIncrement(oldValue: number, newValue: number): void {\n        if (this.configuration.onIncrement) {\n            this.configuration.onIncrement(+oldValue, +newValue);\n        }\n    }\n\n    onDecrement(oldValue: number, newValue: number): void {\n        if (this.configuration.onDecrement) {\n            this.configuration.onDecrement(+oldValue, +newValue);\n        }\n    }\n\n\tgetAriaLabelledby() : string{\n\t\treturn this.adjusterModel.getAriaLabelledby();\n\t}\n\n\tgetAriaDescribedby(): string {\n\t\treturn this.adjusterModel.getAriaDescribedby();\n\t}\n\n    isEnabledKeyboard() :boolean{\n       return this.configuration.keyboard ?? false; \n    }\n\n    isHideSymbol():boolean{\n        return this.configuration.hideSymbol ?? false;\n    }\n\n    getStartAdornmentValue(): string | undefined {\n        return this.configuration.inputPrefix;\n    }\n\n    getEndAdornmentValue(): string | undefined {\n        return this.configuration.inputSuffix;\n    }\n\n    getType(): string {\n        return this.configuration.type?? \"decimal\";\n    }\n\n    getSymbolPosition(): string |undefined{\n        return this.configuration.symbolPosition; \n    }\n\n\n    shouldGenerateEmptyDom(): boolean {\n return this.configuration?.ignoreEmptyDOM !== undefined\n? !this.configuration.ignoreEmptyDOM\n: false;\n }\n    shouldAllowComma() : boolean {\n       return this.configuration.allowComma ?? false;\n    }\n\n\n    getTooltipMessage(): string  {\n        return this.configuration.tooltipMessage ?? \"please enter a number\";\n    }\n\n    getTooltipRegex(): RegExp | undefined {\n        return this.configuration.tooltipRegex;\n    }\n\n    getTooltipPosition(): string  {\n        return this.configuration.tooltipPosition ?? Position.bottomRight;\n    }\n\n    getTooltipAppendto(): HTMLElement | undefined {\n        return this.configuration.tooltipAppendto ?? document.body;\n    }\n\n    getTooltipHideDelay(): number  {\n        return this.configuration.tooltipHideDelay?? 700;\n\n    }\n    shouldShowTooltip(): boolean {\n        return this.configuration.tooltip ?? false;\n\n    }\n\n    showErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n\n    getEventKey () : string{\n        return this.configuration.eventKey ?? '';\n\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n        // Dispatch event to trigger re-render of description component\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        });\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n}\n","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport {INumberUserComponentHandler } from './number-user-component-handler.types';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { ILabelUserComponentHandler } from '../../../../label/label.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER      = 'prefixRenderer',\n\tSUFFIX_RENDERER      = 'suffixRenderer',\n\tDESCRIPTION_RENDERER = 'descriptionRenderer',\n\tBUTTON_RENDERER      = 'buttonRenderer',\n\tERROR_RENDERER       = 'errorRenderer',\n\tLABEL_RENDERER       = 'labelRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class NumberUserComponentHandler extends UserComponentHandler implements INumberUserComponentHandler, ILabelUserComponentHandler {\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\t\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.DESCRIPTION_RENDERER, params, PropertyName.DESCRIPTION_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\t\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.SUFFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DESCRIPTION_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.SUFFIX_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","export const EVENT_NAME = {\n    KEYDOWN  : 'keydown',\n    FOCUS    : 'focus',\n    BLUR     : 'blur',\n    MOUSEDOWN: 'mousedown',\n    CLICK    : 'click',\n    SHOW_TOOLTIP :'show_tooltip'\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { INumberEventHandler } from \"./number-event-handler.types\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { INumericAdjusterModel } from \"./number-adjuster.types\";\nimport { NumberTooltipHandlerType } from \"./number-tooltip-handler.types\";\nimport { EVENT_NAME } from \"../../constants/event-name\";\nimport { INumberOptionHandler } from \"./number-option-handler.types\";\n\n\n\n\n@Bean(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER)\nexport class NumberEventHandler extends EventEmitter implements INumberEventHandler {\n\t\n    \n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_ADJUSTER_HANDLER)\n\tnumberModel!: INumericAdjusterModel;\n\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_TOOLTIP_HANDLER)\n\tnumberTooltipHandler!: NumberTooltipHandlerType;\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER)\n\toptionsHandler!: INumberOptionHandler;\n    \n\n    private dotCount = 0;\n\n    private  allowedKeys = [ \n        'Backspace', 'Enter', 'Tab', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n        'Home', 'End', 'Delete', 'e', '-', '+','Control', 'Meta'\n    ];\n\n\n\n\n    onKeyDown(event: KeyboardEvent): void {\n        const char = event.key;\n        // Stop propagation for special keys like Control, Command, and Shift\n        const preventState = this.optionsHandler.onKeydown(event);\n    \n        // Prevent default behavior based on custom logic\n        if (preventState) {\n            event.preventDefault();\n            this.dispatchEvent({\n                type: EVENT_NAME.SHOW_TOOLTIP,\n            });\n        }\n        if((event.ctrlKey || event.metaKey) && char === \"a\"){\n            event.stopPropagation();\n            (event.target as HTMLInputElement).select();\n        }\n       \n\n        if (event.ctrlKey || event.metaKey  || ['Control', 'Meta', 'Shift'].includes(char)) {\n            if (['c', 'v', 'x', 'z', 'a', 'y','r',1,2,3,4,5,6,7,8,9,'1','2','3','4','5','6','7','8','9'].includes(char.toLowerCase())) {\n                return; // Allow common browser shortcuts\n            }\n            event.stopPropagation();\n        }\n        if(event.shiftKey && !['Tab'].includes(char)){\n            event.stopPropagation();\n        }\n        \n\n        const decimalSeparator = this.optionsHandler.getDecimalSeparator();\n        const thousandSeparator = this.optionsHandler.getThousandSeparatorChar();\n        \n        // Prevent typing thousand separator if the previous character is already a thousand separator\n        if (thousandSeparator && char === thousandSeparator) {\n            const inputElement = event.target as HTMLInputElement;\n            if (inputElement) {\n                const currentValue = inputElement.value;\n                const cursorPosition = inputElement.selectionStart || 0;\n                const previousChar = currentValue[cursorPosition - 1];\n                \n                // If previous character is a thousand separator, prevent typing another one\n                if (previousChar === thousandSeparator) {\n                    event.preventDefault();\n                    this.dispatchEvent({\n                        type: EVENT_NAME.SHOW_TOOLTIP,\n                    });\n                    return;\n                }\n            }\n        }\n        \n        // Handle decimal separator: if one already exists, move it to the end instead of preventing\n        if (char === decimalSeparator) {\n            const inputElement = event.target as HTMLInputElement;\n            if (inputElement) {\n                const currentValue = inputElement.value;\n                \n                // Check if decimal separator already exists in the value\n                if (currentValue.includes(decimalSeparator)) {\n                    event.preventDefault();\n                    // Remove the existing decimal separator and add it at the end\n                    const valueWithoutDecimal = currentValue.replace(new RegExp(this.escapeRegExp(decimalSeparator), 'g'), '');\n                    const newValue = valueWithoutDecimal + decimalSeparator;\n                    inputElement.value = newValue;\n                    // Move cursor to after the decimal separator at the end\n                    inputElement.setSelectionRange(newValue.length, newValue.length);\n                    return;\n                }\n                \n                // If thousand separator is space, also prevent decimal separator right after space\n                if (thousandSeparator === \" \") {\n                    const cursorPosition = inputElement.selectionStart || 0;\n                    const previousChar = currentValue[cursorPosition - 1];\n                    \n                    // If previous character is space (thousand separator), prevent decimal separator\n                    // This prevents double space from being converted to dot\n                    if (previousChar === \" \") {\n                        event.preventDefault();\n                        this.dispatchEvent({\n                            type: EVENT_NAME.SHOW_TOOLTIP,\n                        });\n                        return;\n                    }\n                }\n            }\n        }\n        \n        const allowedKeysWithDecimal = [...this.allowedKeys];\n        if (!allowedKeysWithDecimal.includes(decimalSeparator)) {\n            allowedKeysWithDecimal.push(decimalSeparator);\n        }\n        \n        if (thousandSeparator  && !allowedKeysWithDecimal.includes(thousandSeparator)) {\n            allowedKeysWithDecimal.push(thousandSeparator);\n        }\n        \n        if (allowedKeysWithDecimal.includes(char)) {\n            return;\n        }\n\n        // Handle space key: allow if it's the thousand separator, prevent otherwise\n        if (char === \" \") {\n            // If space is the thousand separator, it's already handled above (line 70-86)\n            // If space is NOT the thousand separator, prevent it\n            if (thousandSeparator !== \" \") {\n                this.dispatchEvent({\n                    type: EVENT_NAME.SHOW_TOOLTIP,\n                });\n                event.preventDefault();\n                return;\n            }\n            // If space IS the thousand separator, allow it (consecutive spaces already prevented above)\n            return;\n        }\n\n        if ((event.shiftKey && /^[a-zA-Z]$/.test(char)|| char ===\" \")) {\n            this.dispatchEvent({\n                type: EVENT_NAME.SHOW_TOOLTIP,\n            });\n            event.preventDefault();\n            return;\n        }\n\n        // Prevent combinations of Shift + Cmd/Meta + printable characters\n        if ((event.metaKey || event.shiftKey) && char.length === 1) {\n            this.dispatchEvent({\n                type: EVENT_NAME.SHOW_TOOLTIP,\n            });\n            event.preventDefault();\n            return;\n        }\n    \n        \n        const decimalSeparatorEscaped = this.escapeRegExp(decimalSeparator);\n        const thousandSeparatorEscaped = thousandSeparator ? this.escapeRegExp(thousandSeparator) : '';\n        const regex = thousandSeparator\n            ? new RegExp(`^[\\\\d${thousandSeparatorEscaped}${decimalSeparatorEscaped}]$`) \n            : new RegExp(`^[\\\\d${decimalSeparatorEscaped}]$`);\n    \n        // Block invalid characters\n        if (!regex.test(char)) {\n            if (/^[a-zA-Z]$|[^\\w\\s]/.test(char)) {\n                this.dispatchEvent({\n                    type: EVENT_NAME.SHOW_TOOLTIP,\n                });\n            }\n    \n            event.preventDefault(); // Block invalid input\n            return;\n        }\n    }\n    \n    private escapeRegExp(string: string): string {\n        return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    }\n    \n    /**\n     * Formats a number string with thousand separators\n     * @param value - The number string (with internal placeholders: 'D' for decimal, 'T' for thousand)\n     * @param groupingSeparator - The configured grouping separator to use in display\n     * @param internalDecimalSeparator - The internal decimal separator placeholder ('D')\n     * @returns Formatted string with thousand separators\n     */\n    private formatWithThousandSeparator(value: string, groupingSeparator: string | null, internalDecimalSeparator: string): string {\n        if (!groupingSeparator || value === '' || value === '-') {\n            return value;\n        }\n        \n        const internalThousandSeparator = 'T';\n        const isNegative = value.startsWith('-');\n        const valueWithoutSign = isNegative ? value.substring(1) : value;\n        \n        // Check if the original value contains a decimal separator (even if no decimal part yet)\n        const hasDecimalSeparator = valueWithoutSign.includes(internalDecimalSeparator);\n        \n        // Split into integer and decimal parts using internal placeholder\n        const parts = valueWithoutSign.split(internalDecimalSeparator);\n        let integerPart = parts[0];\n        const decimalPart = parts[1] || '';\n        \n        // Remove any existing thousand separator placeholders from integer part before formatting\n        integerPart = integerPart.replace(new RegExp(internalThousandSeparator, 'g'), '');\n        \n        // Format integer part with thousand separators (every 3 digits from right)\n        if (integerPart.length > 3) {\n            const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, groupingSeparator);\n            integerPart = formattedInteger;\n        }\n        \n        // Reconstruct the value (keep internal placeholders for now, will be converted to display format later)\n        let formattedValue = integerPart;\n        // Preserve decimal separator even if decimalPart is empty (user is typing decimal separator)\n        if (decimalPart || hasDecimalSeparator) {\n            formattedValue += internalDecimalSeparator + decimalPart;\n        }\n        \n        return isNegative ? '-' + formattedValue : formattedValue;\n    }\n    \n    \n    \n    \n    \n    \n    // onInput(event: Event): void {\n    //     const inputElement = event.target as HTMLInputElement;\n    //     let value = inputElement.value;\n    \n    //     // Remove all characters except numbers and dots\n    //     value = value.replace(/[^0-9.]/g, '');\n    \n    //     // If there are multiple dots, remove the last one\n    //     const dotCount = (value.match(/\\./g) || []).length;\n    //     if (dotCount > 1) {\n    //         const lastDotIndex = value.lastIndexOf('.');\n    //         value = value.slice(0, lastDotIndex) ;\n    //     }\n    \n    //     // Convert sanitized value to a number\n    //     const numericValue = Number(value);\n    \n    //     // Check if it's a valid number, else set to 0\n    //     if (isNaN(numericValue) || inputElement.value === '') {\n    //         this.numberModel.setValue(0); // Or handle as appropriate\n    //         this.numberModel.setIsEmpty(true);\n    //     } else {\n    //         this.numberModel.setValue(numericValue);\n    //         this.numberModel.setIsEmpty(false);\n    //     }\n\n    //     // Trigger the `onInput` handler for any additional logic\n    //     this.optionsHandler.onInput(event);\n    // }\n\n    onInput(event: Event): void {\n        const inputElement = event.target as HTMLInputElement;\n        let inputValue = inputElement.value;\n        \n        const decimalSeparator = this.optionsHandler.getDecimalSeparator();\n        const decimalSeparatorEscaped = this.escapeRegExp(decimalSeparator);\n        const groupingSeparator = this.optionsHandler.getThousandSeparatorChar();\n        const groupingSeparatorEscaped = groupingSeparator ? this.escapeRegExp(groupingSeparator) : '';\n        \n        // Internal decimal separator is always '.' for numeric processing\n        const internalDecimalSeparator = 'D';\n        const internalDecimalSeparatorEscaped = this.escapeRegExp(internalDecimalSeparator);\n        \n        // Internal thousand separator is always ',' for numeric processing\n        const internalThousandSeparator = 'T';\n        const internalThousandSeparatorEscaped = this.escapeRegExp(internalThousandSeparator);\n        \n        // Check if value contains scientific notation (E or e)\n        const hasScientificNotation = /[eE]/.test(inputValue);\n        \n        // If thousand separator is space, fix double space -> dot conversion immediately\n        if (groupingSeparator === \" \") {\n            // Replace \" .\" (space + dot) with just space (double space converted to dot)\n            if (decimalSeparator === \".\") {\n                inputValue = inputValue.replace(/\\s\\./g, ' ');\n            }\n            // Also collapse any consecutive spaces to single space\n            inputValue = inputValue.replace(/\\s{2,}/g, ' ');\n            \n            // Update input element immediately if we fixed the value\n            if (inputValue !== inputElement.value) {\n                const cursorPosition = inputElement.selectionStart || 0;\n                inputElement.value = inputValue;\n                const newPosition = Math.min(cursorPosition, inputValue.length);\n                inputElement.setSelectionRange(newPosition, newPosition);\n            }\n        }\n        \n        // Clean input value: remove invalid characters but preserve configured separators\n        // If scientific notation is present, also allow E, e, +, - for the exponent part\n        const allowedInputPattern = hasScientificNotation \n            ? `[^0-9${decimalSeparatorEscaped}${groupingSeparatorEscaped}\\\\-eE\\\\+]`\n            : `[^0-9${decimalSeparatorEscaped}${groupingSeparatorEscaped}\\\\-]`;\n        let cleanedInputValue = inputValue.replace(new RegExp(allowedInputPattern, 'g'), '');\n        \n        // If thousand separator is space, ensure no \" .\" pattern remains after cleaning\n        if (groupingSeparator === \" \" && decimalSeparator === \".\") {\n            cleanedInputValue = cleanedInputValue.replace(/\\s\\./g, ' ');\n        }\n        \n        // Update input element to preserve grouping separator in display\n        if (cleanedInputValue !== inputValue) {\n            // Preserve cursor position\n            const cursorPosition = inputElement.selectionStart || 0;\n            inputElement.value = cleanedInputValue;\n            // Restore cursor position (adjust for removed characters)\n            const newPosition = Math.min(cursorPosition, cleanedInputValue.length);\n            inputElement.setSelectionRange(newPosition, newPosition);\n        }\n        \n        // Create a copy for numeric processing\n        let value = cleanedInputValue;\n        \n        // If scientific notation is present, don't convert decimal separators\n        // Skip decimal separator conversion if E or e is present\n        if (!hasScientificNotation) {\n            // Convert grouping separator to 'T' placeholder for internal processing (similar to decimal separator conversion)\n            // Enable thousand separator if groupingSeparator is provided and not null\n            // Only convert if grouping separator is different from decimal separator to avoid conflicts\n            if (groupingSeparator && groupingSeparator !== decimalSeparator && groupingSeparator !== internalThousandSeparator) {\n                value = value.replace(new RegExp(groupingSeparatorEscaped, 'g'), internalThousandSeparator);\n            }\n            \n            // Convert decimal separator to 'D' placeholder for internal processing\n            if (decimalSeparator !== internalDecimalSeparator && value.includes(decimalSeparator)) {\n                value = value.replace(new RegExp(decimalSeparatorEscaped, 'g'), internalDecimalSeparator);\n            }\n        }\n    \n        // Allow only numbers, a single leading minus sign, decimal placeholder, and thousand placeholder\n        // At this point, value should have 'D' as decimal placeholder and 'T' as thousand placeholder (converted above)\n        // If scientific notation is present, also preserve E, e, + for the exponent part\n        if (hasScientificNotation) {\n            value = value.replace(new RegExp(`[^0-9${internalDecimalSeparatorEscaped}${internalThousandSeparatorEscaped}\\\\-eE\\\\+]`, 'g'), ''); // Remove invalid characters but preserve scientific notation\n        } else {\n            value = value.replace(new RegExp(`[^0-9${internalDecimalSeparatorEscaped}${internalThousandSeparatorEscaped}\\\\-]`, 'g'), ''); // Remove invalid characters\n        }\n        \n        // Prevent multiple decimal separators - keep only the first one\n        if (value.includes(internalDecimalSeparator)) {\n            const decimalSeparatorIndex = value.indexOf(internalDecimalSeparator);\n            // Keep only the first decimal separator, remove all others\n            value = value.substring(0, decimalSeparatorIndex + 1) + value.substring(decimalSeparatorIndex + 1).replace(new RegExp(internalDecimalSeparatorEscaped, 'g'), '');\n        }\n        \n        // Prevent consecutive thousand separators - remove duplicate 'T' placeholders\n        if (value.includes(internalThousandSeparator)) {\n            // Replace consecutive thousand separators with a single one\n            const consecutiveThousandSeparatorRegex = new RegExp(`${internalThousandSeparatorEscaped}+`, 'g');\n            value = value.replace(consecutiveThousandSeparatorRegex, internalThousandSeparator);\n        }\n    \n        // Ensure the minus sign is only at the beginning\n        if (value.includes('-')) {\n            // Check if '-' is not at the start\n            if (!value.startsWith('-')) {\n                value = value.replace(/-/g, ''); // Remove all '-' if not at the start\n            }\n        \n            // Check if '-' appears more than once\n            if ((value.match(/-/g) || []).length > 1) {\n\n                // Validate the value: Keep only the first valid '-' at the start\n                if(value.startsWith('-')){\n                    value = value.replace('-', '');\n                }\n                const indexOfDash = value.indexOf('-');\n                value = value.substring(0, indexOfDash).replace(/[^0-9]/g, ''); // Get only digits before '-'\n                    \n                // value = value.replace(/-/g, ''); // Remove all '-'\n                value = '-' + value; // Add '-' at the start if needed\n            }\n        }\n    \n        // At this point, value should have 'D' as decimal placeholder and 'T' as thousand placeholder (converted above)\n        // If scientific notation is present, skip decimal separator count check and conversion\n        if (!hasScientificNotation) {\n            this.dotCount = (value.match(new RegExp(internalDecimalSeparatorEscaped, 'g')) || []).length;\n            if (this.dotCount > 1) {\n                // Keep only the first dot and remove all others\n                value = value.replace(new RegExp(`${internalDecimalSeparatorEscaped}(?=.*${internalDecimalSeparatorEscaped})`, 'g'), '');\n                this.dotCount = 1;\n            }\n        } else {\n            // For scientific notation, count decimal separators in the mantissa part (before E/e)\n            const mantissaPart = value.split(/[eE]/)[0];\n            this.dotCount = (mantissaPart.match(new RegExp(internalDecimalSeparatorEscaped, 'g')) || []).length;\n        }\n    \n        // Format value for numeric conversion: replace 'D' with '.' and 'T' with '' (empty string)\n        // This formatted value will be used for numeric processing\n        // If scientific notation is present and decimal separator wasn't converted, convert it now for numeric processing\n        let formattedNumericValue = value;\n        if (hasScientificNotation) {\n            // For scientific notation, convert decimal separator to '.' only in the mantissa part (before E/e)\n            const scientificNotationMatch = formattedNumericValue.match(/[eE]/);\n            if (scientificNotationMatch) {\n                const eIndex = scientificNotationMatch.index!;\n                const mantissa = formattedNumericValue.substring(0, eIndex);\n                const exponent = formattedNumericValue.substring(eIndex);\n                // Convert decimal separator to '.' in mantissa if it wasn't already converted\n                const mantissaFormatted = mantissa.includes('D') \n                    ? mantissa.replace(/D/g, '.')\n                    : (decimalSeparator !== '.' && mantissa.includes(decimalSeparator)\n                        ? mantissa.replace(new RegExp(decimalSeparatorEscaped, 'g'), '.')\n                        : mantissa);\n                formattedNumericValue = mantissaFormatted + exponent;\n            }\n            // Remove thousand separators for numeric processing\n            formattedNumericValue = formattedNumericValue.replace(/T/g, '');\n        } else {\n            formattedNumericValue = formattedNumericValue.replace(/D/g, '.');\n            // Remove thousand separators for numeric processing\n            formattedNumericValue = formattedNumericValue.replace(/T/g, '');\n        }\n    \n        // Format display value with thousand separators\n        // First format with thousand separators (value has 'D' as decimal and 'T' as thousand placeholders internally)\n        let displayValue = value;\n        \n        // If scientific notation is present, don't format with thousand separators or convert decimal separators\n        if (!hasScientificNotation) {\n            if (groupingSeparator && groupingSeparator !== decimalSeparator) {\n                displayValue = this.formatWithThousandSeparator(value, groupingSeparator, internalDecimalSeparator);\n            }\n            \n            // Convert any remaining internal thousand separator placeholder 'T' to configured grouping separator\n            if (groupingSeparator && displayValue.includes(internalThousandSeparator)) {\n                displayValue = displayValue.replace(new RegExp(internalThousandSeparatorEscaped, 'g'), groupingSeparator);\n            }\n            \n            // Convert internal decimal separator placeholder 'D' back to configured decimal separator for display\n            if (decimalSeparator !== internalDecimalSeparator && displayValue.includes(internalDecimalSeparator)) {\n                displayValue = displayValue.replace(new RegExp(internalDecimalSeparatorEscaped, 'g'), decimalSeparator);\n            }\n        } else {\n            // For scientific notation, preserve the original format (decimal separator not converted)\n            // Just remove any internal thousand separator placeholders if they exist\n            if (groupingSeparator && displayValue.includes(internalThousandSeparator)) {\n                displayValue = displayValue.replace(new RegExp(internalThousandSeparatorEscaped, 'g'), groupingSeparator);\n            }\n        }\n        \n        // // Update input element to show formatted value with thousand separators\n        // if (displayValue !== inputElement.value) {\n        //     const cursorPosition = inputElement.selectionStart || 0;\n        //     inputElement.value = displayValue;\n        //     // Adjust cursor position to account for added/removed separators\n        //     const newPosition = Math.min(cursorPosition, displayValue.length);\n        //     inputElement.setSelectionRange(newPosition, newPosition);\n        // }\n    \n        // Check if it's a valid number, else set to 0\n        // If value is empty or contains only placeholders (after processing), treat as empty\n        // At this point, value should have 'D' as decimal placeholder and 'T' as thousand placeholder (converted above)\n        const valueWithoutSeparators = value.replace(new RegExp(`[${internalDecimalSeparatorEscaped}${internalThousandSeparatorEscaped}\\\\-]`, 'g'), '');\n        if (value === '-' || value === '+') {\n            this.numberModel.setIsEmpty(false);\n            this.numberModel.setValue(value);\n        } else if(value ==='0'){\n            this.numberModel.setIsEmpty(false);\n            this.numberModel.setValue('0'); // Or handle as appropriate\n        }else if (value === '' || valueWithoutSeparators === '') {\n            // Value is empty or contains only separators (grouping or decimal)\n            // Don't update the model with invalid values - keep previous state or set to 0\n            if (value === '') {\n                this.numberModel.setIsEmpty(true);\n                this.numberModel.setValue('0');\n            }\n            // If value contains only separators (like just \".\" when dot is grouping separator),\n            // don't update the model - let user continue typing\n        } else {\n            this.numberModel.setIsEmpty(false);\n            // If scientific notation is present, preserve the original cleaned input value to avoid precision loss\n            // Otherwise, use the formatted numeric value\n            if (hasScientificNotation) {\n                // For scientific notation, use the cleaned input value (with decimal separator preserved)\n                // but ensure decimal separator is '.' for JavaScript Number() parsing\n                let scientificValue = cleanedInputValue;\n                // Convert decimal separator to '.' only if it's not already '.'\n                if (decimalSeparator !== '.' && scientificValue.includes(decimalSeparator)) {\n                    // Only convert in the mantissa part (before E/e)\n                    const scientificNotationMatch = scientificValue.match(/[eE]/);\n                    if (scientificNotationMatch) {\n                        const eIndex = scientificNotationMatch.index!;\n                        const mantissa = scientificValue.substring(0, eIndex);\n                        const exponent = scientificValue.substring(eIndex);\n                        const mantissaFormatted = mantissa.replace(new RegExp(decimalSeparatorEscaped, 'g'), '.');\n                        scientificValue = mantissaFormatted + exponent;\n                    }\n                }\n                // Remove thousand separators if present\n                if (groupingSeparator && scientificValue.includes(groupingSeparator)) {\n                    scientificValue = scientificValue.replace(new RegExp(groupingSeparatorEscaped, 'g'), '');\n                }\n                this.numberModel.setValue(scientificValue);\n            } else {\n                // Pass formatted value (with 'D' -> '.' and 'T' -> '') for numeric processing\n                this.numberModel.setValue(formattedNumericValue);\n            }\n        }\n    \n        // Trigger the `onInput` handler for any additional logic\n        // this.optionsHandler.onInput(this.numberModel.getValue());\n        this.optionsHandler.onInput(this.numberModel.getValue() as number);\n    }\n    \n\n\tonFocus(_event?: FocusEvent): void {\n       this.numberModel.setFocus(true);\n    //    this.dispatchEvent({\n\t// \t\ttype: 'EVENT_FOCUS_IN',\n\t// \t\tevent,\n\t// \t});\n        // this.optionsHandler.onFocus(event)\n\t}\n\n\tonFocusOut(event: FocusEvent): void {\n        // Set focus to false FIRST, before processing input\n        // This ensures that any EVENT_VALUE_UPDATE triggered by onInput will format the value correctly\n        this.numberModel.setFocus(false);\n        \n        // Process the current input value: remove all thousand separators and spaces, then process via onInput\n        const inputElement = event.target as HTMLInputElement;\n        if (inputElement) {\n            let inputValue = inputElement.value.trim();\n            \n            const groupingSeparator = this.optionsHandler.getThousandSeparatorChar();\n            \n            // Remove all spaces from the input value\n            inputValue = inputValue.replace(/\\s/g, '');\n            \n            // Remove all thousand separators from the input value before processing\n            if (groupingSeparator && inputValue.includes(groupingSeparator)) {\n                inputValue = inputValue.replace(new RegExp(this.escapeRegExp(groupingSeparator), 'g'), '');\n            }\n            \n            // Update the input element value with cleaned value (without thousand separators)\n            // This ensures onInput processes a clean value\n            if (inputElement.value !== inputValue) {\n                inputElement.value = inputValue;\n            }\n            \n            // Process the cleaned input value via synthetic event\n            const syntheticInputEvent = new Event('input', { bubbles: true, cancelable: true });\n            Object.defineProperty(syntheticInputEvent, 'target', { \n                value: inputElement, \n                enumerable: true,\n                configurable: true \n            });\n            this.onInput(syntheticInputEvent);\n        }\n        \n        // Call blur() to validate and clamp if needed\n        this.numberModel.blur();\n        this.dispatchEvent({\n\t\t\ttype: 'EVENT_FOCUS_OUT',\n            event\n\t\t});\n        this.optionsHandler.onBlur();\n        this.numberModel.commitChange('ui');\n\t}\n\n\tonIncrement(event:KeyboardEvent): void {\n\t\tconst oldValue = this.numberModel.getValue();\n\t\tthis.numberModel.increment();\n        this.dispatchEvent({\n            type : \"EVENT_INCREMENT_UPDATED\"\n        })\n        const newValue = this.numberModel.getValue();\n        if(oldValue && newValue){\n            this.optionsHandler.onIncrement(oldValue, newValue)\n        }\n        event.preventDefault();\n\n\n\t}\n\n\tonDecrement(event:KeyboardEvent): void {\n        const oldValue = this.numberModel.getValue();\n\t\tthis.numberModel.decrement();\n         this.dispatchEvent({\n\t\t\t\ttype: 'EVENT_DECREMENT_UPDATED',\n\t\t\t});\n\n        const newValue = this.numberModel.getValue();\n        if(oldValue && newValue){\n            this.optionsHandler.onDecrement(oldValue, newValue);\n        }\n        event.preventDefault();\n\t}\n\n\n\tonBlur(): void {\n        this.numberModel.blur();\n        this.numberModel.commitChange('ui');\n\n\t}\n\n    onEnter():void{\n        this.numberModel.blur();\n        const value = this.numberModel.getValueAsNumber();\n        if (value !== null && value !== undefined && !isNaN(value)) {\n            this.optionsHandler.onEnter(value);\n        }\n        this.dispatchEvent({ type: 'EVENT_BLUR'})\n        this.numberModel.commitChange('ui');\n    }\n\n    onIncrementByLongStep(event:KeyboardEvent) : void {\n        const oldValue = this.numberModel.getValue();\n        this.numberModel.incrementByLongStep();\n        const newValue = this.numberModel.getValue();\n        if(oldValue && newValue){\n            this.optionsHandler.onIncrement(oldValue, newValue);\n        }\n        event.preventDefault();\n\n    }\n\n    onDecrementByLongStep(event:KeyboardEvent) : void {\n        const oldValue = this.numberModel.getValue();\n        this.numberModel.decrementByLongStep();\n        const newValue = this.numberModel.getValue();\n        if(oldValue && newValue){\n            this.optionsHandler.onDecrement(oldValue, newValue);\n        }\n        event.preventDefault();\n\n    }\n\n    onIncrementByShortStep(event:KeyboardEvent) : void {\n        const oldValue = this.numberModel.getValue();\n        this.numberModel.incrementByShortStep();\n        const newValue = this.numberModel.getValue();\n        if(oldValue && newValue){\n            this.optionsHandler.onIncrement(oldValue, newValue);\n        }\n        event.preventDefault();\n        \n    }\n\n    onDecrementByShortStep(event:KeyboardEvent) : void {\n        const oldValue = this.numberModel.getValue();\n        this.numberModel.decrementByShortStep();\n        const newValue = this.numberModel.getValue();\n        if(oldValue && newValue){\n            this.optionsHandler.onDecrement(oldValue, newValue);\n        }\n        event.preventDefault();\n\n    }\n\n\n    getDotCount(): number {\n        return this.dotCount;\n    }\n\n    setDotCount(count: number): void {\n        this.dotCount = count;\n    }\n\n}","import { clamp } from '@dg/utils';\nimport { INumberAdjusterModel } from './number-adjuster-model.types';\n\n\n\nexport class NumericModel{\n    private model           : INumberAdjusterModel;\n    private oldValue        : number | null ;\n    private isValid         : boolean | null;\n    private ariaLabelledby! : string;\n    private ariaDescribedby!: string;\n    private isEmpty : boolean;\n     \n\n\n    constructor(model: INumberAdjusterModel) {\n        this.model           = model;\n        this.oldValue        = this.model.getValue() as number;\n        this.isEmpty         = this.oldValue === null || this.oldValue === undefined;\n        this.isValid         = this.isWithinRange(this.oldValue);\n        this.ariaLabelledby  = generateUniqueId(\"aria-labelledby\");\n        this.ariaDescribedby = generateUniqueId(\"aria-describedby\");\n    }\n\n    getAriaLabelledby(): string{\n        return this.ariaLabelledby;\n    }\n\n    isEmty(): boolean{\n        return this.isEmpty;\n    }\n\n    setIsEmpty(value: boolean): void{\n        this.isEmpty = value;\n    }\n\n    getAriaDescribedby(): string{\n        return this.ariaDescribedby;\n\n    }\n\n    increment() {\n        const step = this.model.getStep();\n        this.incrementValue(step);\n    }\n\n    decrement() {\n        const step = this.model.getStep();\n        this.decrementValue(step);\n    }\n\n    incrementByLongStep() {\n        const longStep = this.model.getLongStep();\n        this.incrementValue(longStep);\n    }\n\n    decrementByLongStep() {\n        const longStep = this.model.getLongStep();\n        this.decrementValue(longStep);\n    }\n\n    incrementByShortStep() {\n        const shortStep = this.model.getShortStep();\n        this.incrementValue(shortStep);\n    }\n\n    decrementByShortStep() {\n        const shortStep = this.model.getShortStep();\n        this.decrementValue(shortStep);\n    }\n\n    blur(): void {\n        const parsedValue = this.model.getValue();\n        const asString = String(parsedValue);\n        if (asString === '-' || asString === '+') {\n            this.setValue(null);\n            return;\n        }\n        // Always validate on blur, clamp if enabled\n        if (this.model.isClapValueOnBlur()) {\n            const value = clamp(\n                parsedValue,\n                this.model.getMinValue(),\n                this.model.getMaxValue(),\n            );\n            this.setValue(value.toString());\n        } else {\n            // Validate without clamping - setValue will handle validation\n            if (parsedValue !== null && parsedValue !== undefined && !isNaN(parsedValue)) {\n                this.setValue(parsedValue.toString());\n            }\n        }\n    }\n\n    setValue(value: string | null): void {\n       // Handle null values - treat as empty\n       if (value === null || value === undefined) {\n           this.model.setIsEmpty(true);\n           this.isValid = true;\n           this.oldValue = this.model.getValue();\n           this.model.onValueUpdate(0, '');\n           return;\n       }\n       \n       // Check if letter 'T' is in value, if so replace it with empty string\n       // Example: '32T' becomes '32'\n       const formattedValue = value.includes('T') ? value.replace(/T/g, '') : value;\n\n        if (formattedValue === '-' || formattedValue === '+') {\n            this.isValid = true;\n            this.model.setIsEmpty(false);\n            this.oldValue = this.model.getValue();\n            this.model.onValueUpdate(0, formattedValue);\n            return;\n        }\n\n       const numberValue = Number(formattedValue);\n\n        if (!Number.isFinite(numberValue)) {\n            return;\n        }\n\n        this.isValid = this.isWithinRange(numberValue);\n\n        if (this.isValid) {\n            this.model.onSuccess(numberValue);\n        } else {\n            // this.model.onError(value);\n            const minValue = this.model.getMinValue(); \n            const maxValue = this.model.getMaxValue();\n            const result =\n                numberValue < minValue ? 'min' :\n                numberValue > maxValue ? 'max' :\n                'max';\n            this.model.onError({type: result,value : numberValue});\n\n        }\n\n        if (!this.isValid && this.model.onBoundaryExceeded) {\n            this.model.onBoundaryExceeded(this.oldValue as number, numberValue);\n        }\n\n        if (numberValue === this.model.getMaxValue()) {\n            this.model.onMaxReached(numberValue);\n        } else if (numberValue === this.model.getMinValue()) {\n            this.model.onMinReached(numberValue);\n        }\n\n        this.oldValue = this.model.getValue();\n         this.model.onValueUpdate(numberValue, value);\n    }\n\n    incrementValue(step: number) {\n        this.model.setIsEmpty(false);\n        const newValue = (this.model.getValueAsNumber() ? this.model.getValueAsNumber() + step : 0+step).toString();\n        if (this.model.isKeepWithinRange()) {\n            if (newValue >= this.model.getMaxValue()) {\n                if (this.model.isWrapAround()) {\n                    this.setValue(this.model.getMinValue().toString());\n                } else {\n                    this.setValue(this.model.getMaxValue().toString());\n                }\n            } else {\n                this.setValue(newValue);\n            }\n        } else {\n            this.setValue(newValue);\n        }\n    }\n\n    decrementValue(step: number) {\n        this.model.setIsEmpty(false);\n        const newValue = (this.model.getValueAsNumber()?this.model.getValueAsNumber() - step:0 -step).toString();\n        if (this.model.isKeepWithinRange()) {\n            if (newValue <= this.model.getMinValue()) {\n                if (this.model.isWrapAround()) {\n                    this.setValue(this.model.getMaxValue().toString());\n                } else {\n                    this.setValue(this.model.getMinValue().toString());\n                }\n            } else {\n                this.setValue(newValue);\n            }\n        } else {\n            this.setValue(newValue);\n        }\n    }\n\n    isWithinRange(number: number): boolean {\n        if(number === undefined || number === null){\n            return true;\n        }\n        const keepWithinRange = this.model.isKeepWithinRange();\n        const max= this.model.getMaxValue();\n        const min = this.model.getMinValue();\n        return (keepWithinRange || (number >= min && number <= max));\n    }\n\n    isWithinMax(number: number): boolean {\n        // const keepWithinRange = this.model.isKeepWithinRange();\n        return   number < this.model.getMaxValue() || false;\n    }\n\n    isWithinMin(number: number): boolean {\n        // const keepWithinRange = this.model.isKeepWithinRange();\n        return  number > this.model.getMinValue() || false;\n    }\n\n    getValue(): number {\n        return this.model.getValue();\n    }\n\n    destroy(): void {\n        this.oldValue = null;\n        this.isValid = null;\n    }\n\n\tgetValid(): boolean {\n\t\treturn this.isValid as boolean;\n\t}\n    isIncrementDisabled(): boolean {\n        const value = this.model.getValue();\n        return  this.model.isKeepWithinRange() && value >= this.model.getMaxValue();\n    }\n\n    isDecrementDisabled(): boolean {\n        const value = this.model.getValue();\n        return this.model.isKeepWithinRange() && value <= this.model.getMinValue();\n    }\n}\n\n\n\n\nfunction generateUniqueId(prefix = 'id') {\n    return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\n}\n","function t(t,E=Number.MIN_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER){return Math.max(E,Math.min(t,a))}export{t as default};\n//# sourceMappingURL=clamp.js.map\n","import { Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { NumericModel } from \"./number-adjuster-model\";\nimport { IErrorMeta, INumberAdjusterModel } from \"./number-adjuster-model.types\";\nimport { INumericAdjusterModel } from \"./number-adjuster.types\";\nimport type { NumberChangeOrigin } from \"./number-option-handler.types\";\n\n@Bean('NumberAdjusterHandler')\nexport class NumericAdjusterModel extends EventEmitter implements INumericAdjusterModel{\n\tprivate value       : number = 0;\n\tprivate valueString : string = '0';\n\tprivate model!      : NumericModel | null;\n\tprivate focus       : boolean = false;\n\tprivate lastEmittedValueString: string | null = null;\n\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.value        = this.optionsHandler.getValue();\n\t\tthis.valueString  =  this.optionsHandler.getValue() ? this.value.toString() : this.optionsHandler.getValue();\n\t\tthis.lastEmittedValueString = this.valueString ?? null;\n\n\t\tconst adjusterModel: INumberAdjusterModel = {\n\t\t\tgetValue: () => this.valueString,\n\t\t\tgetValueAsNumber : () => +this.valueString,\n\t\t\tisEmty: () => this.model?.isEmty() as boolean,\n\t\t\tgetMinValue: () => this.optionsHandler.getMin(),\n\t\t\tgetMaxValue: () => this.optionsHandler.getMax(),\n\t\t\tgetLongStep: () => this.optionsHandler.getLongStep(),\n\t\t\tgetShortStep: () => this.optionsHandler.getShortStep(),\n\t\t\tgetPrecision: () => this.optionsHandler.getPrecision(),\n\t\t\tgetStep: () => this.optionsHandler.getStep(),\n\t\t\tisClapValueOnBlur: () => this.optionsHandler.isClampValueOnBlur(),\n\t\t\tisKeepWithinRange: () => this.optionsHandler.isKeepWithinRange(),\n\t\t\tisWrapAround: () => this.optionsHandler.isAllowWrapAround(),\n\t\t\tonValueUpdate: (value: number, valuString : string) => this.onValueUpdate(value, valuString),\n\t\t\tonBoundaryExceeded: (oldValue: number, newValue: number) => this.onBoundaryExceeded(oldValue, newValue),\n\t\t\tonError: (meta :  IErrorMeta) => this.onError(meta),\n\t\t\tonSuccess: (value: number) => this.onSuccess(value),\n\t\t\tonMaxReached: (value: number) => this.onMaxReached(value),\n\t\t\tonMinReached: (value: number) => this.onMinReached(value),\n\t\t\tsetIsEmpty:  (value: boolean) => this.setIsEmpty(value)\n\t\t};\n\n\t\tthis.model = this.createManagedBean(new NumericModel(adjusterModel));\n\t\tconst isKeepWithinRange = adjusterModel.isKeepWithinRange();\n\t\tif(isKeepWithinRange){\n\t\t\tif(!this.model.isWithinMax(this.value)){\n\t\t\t\tthis.value = this.optionsHandler.getMax();\n\t\t\t}\n\t\t\tif(!this.model.isWithinMin(this.value)){\n\t\t\t\tthis.value = this.optionsHandler.getMin();\n\t\t\t}\n\t\t\tthis.valueString = this.value.toString();\n\t\t\tthis.lastEmittedValueString = this.valueString;\n\t\t}\n\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.model?.destroy();\n\t\t\tthis.model = null;\n\t\t});\n\t}\n\n\tincrement(): void {\n\t\tthis.model?.increment();\n\t}\n\n\n\n\tgetAriaLabelledby(): string{\n        return this.model?.getAriaLabelledby() as string;\n\n    }\n    getAriaDescribedby(): string{\n        return this.model?.getAriaDescribedby() as string;\n\n    }\n\n\tdecrement(): void {\n\t\tthis.model?.decrement();\n\t}\n\n\tblur(): void {\n\t\tthis.setFocus(false);\n\t\tthis.model?.blur();\n\t}\n\n\tincrementByLongStep(): void {\n\t\tthis.model?.incrementByLongStep();\n\t}\n\n\tdecrementByLongStep(): void {\n\t\tthis.model?.decrementByLongStep();\n\t}\n\n\tincrementByShortStep(): void {\n\t\tthis.model?.incrementByShortStep();\n\t}\n\n\tgetDefaultValue():number {\n\t\treturn this.optionsHandler.getDefaultValue();\n\t}\n\n\tdecrementByShortStep(): void {\n\t\tthis.model?.decrementByShortStep();\n\t}\n\n\tonValueUpdate(value: number, valueString : string): void {\n\t\tthis.value = value;\n\t\tthis.valueString = valueString;\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'EVENT_VALUE_UPDATE',\n\t\t});\n\t}\n\n\tcommitChange(eventOrigin: NumberChangeOrigin): void {\n\t\tconst previousValueString = this.lastEmittedValueString;\n\t\tconst currentValueString = this.valueString;\n\n\t\tif (previousValueString === currentValueString) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst oldValue = this.normalizeValue(previousValueString);\n\t\tconst newValue = this.normalizeValue(currentValueString);\n\n\t\tthis.optionsHandler.onChange(oldValue as number, newValue as number, eventOrigin);\n\t\tthis.lastEmittedValueString = currentValueString ?? null;\n\t}\n\n\tsetValue(value: string | null): void {\n\t\t// Reject non-finite numbers: allow typing but don't store - no refresh to avoid overwriting input\n\t\tif (value !== null && value !== undefined) {\n\t\t\tconst normalized = value.replace(/T/g, '').replace(/D/g, '.');\n\t\t\tif (normalized === '-' || normalized === '+') {\n\t\t\t\tthis.model?.setValue(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst num = Number(normalized);\n\t\t\tif (!Number.isFinite(num)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.model?.setValue(value);\n\t}\n\n\tgetValue(): number | null{\n\t\treturn this.model?.getValue() ?? null;\n\t}\n\n\tonBoundaryExceeded(oldValue: number, currentValue: number): void {\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'boundaryExceeded',\n\t\t\toldValue: oldValue,\n\t\t\tnewValue: currentValue,\n\t\t});\n\t}\n\n\tonSuccess(value: number): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('validateSuccess', { detail: { value } }),\n\t\t);\n\t}\n\n\tonError(meta :  IErrorMeta): void {\n\t\tthis.optionsHandler.onError(meta);\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('validateError', { detail: { meta } }),\n\t\t);\n\t}\n\n\tonMaxReached(value: number): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('EVENT_MAX_REACHED', { detail: { value } }),\n\t\t);\n\t}\n\n\tonMinReached(value: number): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('EVENT_MIN_REACHED', { detail: { value } }),\n\t\t);\n\t}\n\n\tsetFocus(focus: boolean): void {\n\t\tthis.focus = focus;\n\t}\n\n\tisFocused(): boolean {\n\t\treturn this.focus;\n\t}\n\n\tisValid(): boolean {\n\t\treturn this.model?.getValid() ?? false;\n\t}\n\n\tisWithinMax(): boolean {\n\t\treturn this.model?.isWithinMax(this.value) ?? false;\n\t}\n\n\tisWithinMin(): boolean {\n\t\treturn this.model?.isWithinMin(this.value) ?? false;\n\t}\n\n    isIncrementDisabled(): boolean {\n        return this.model?.isIncrementDisabled() ?? false;\n    }\n\n    isDecrementDisabled(): boolean {\n        return this.model?.isDecrementDisabled() ?? false;\n    }\n\tisEmty(): boolean {\n\t\treturn this.model?.isEmty() ?? false;\n\t}\n\n\tsetIsEmpty(value: boolean): void{\n\t\tthis.model?.setIsEmpty(value);\n\t}\n\tgetValueAsNumber() : number {\n\t\tif (!this.valueString) {\n\t\t\treturn this.value;\n\t\t}\n\t\t\n\t\tlet normalized = this.valueString;\n\t\tif (normalized === '.' || normalized.startsWith('.')) {\n\t\t\tnormalized = '0' + normalized;\n\t\t} else if (normalized.startsWith('-') && (normalized.slice(1) === '.' || normalized.slice(1).startsWith('.'))) {\n\t\t\tnormalized = '-0' + normalized.slice(1);\n\t\t}\n\t\tconst parsed = Number(normalized);\n\t\tif (!isNaN(parsed)) {\n\t\t\treturn parsed;\n\t\t}\n\n\t\tif (this.valueString.includes('e') || this.valueString.includes('E')) {\n\t\t\tconst scientificParsed = Number(this.valueString);\n\t\t\tif (!isNaN(scientificParsed)) {\n\t\t\t\treturn scientificParsed;\n\t\t\t}\n\t\t}\n\t\treturn this.value;\n\t}\n\n\tgetValueAsString() : string | null {\n\t\tif (this.model?.isEmty()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.valueString;\n\t}\n\n\tprivate normalizeValue(value: string | number | null): number | null {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parsed = Number(value);\n\t\tif (isNaN(parsed)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parsed;\n\t}\n\t\n}","import { values } from \"@dg/corecomponent\";\nimport { IModule } from \"../../../core/modules.types\";\ntype globalModuleMap = { [name: string]: IModule };\ntype instanceModulesMap = { [instanceID: string]: { [name: string]: IModule } };\n\nexport class ModuleRegistry {\n\n    private static globalModulesMap: globalModuleMap      = {};\n    private static instanceModulesMap: instanceModulesMap = {};\n\n    public static register(module: IModule): void {\n        ModuleRegistry.__register(module, undefined);\n    }\n\n    public static registerModules(modules: IModule[]): void {\n        ModuleRegistry.__registerModules(modules, undefined);\n    }\n\n    public static __registerModules(modules: IModule[], instanceID: string | undefined): void {\n        if (!modules) {\n            return;\n        }\n        modules.forEach(module => ModuleRegistry.__register(module, instanceID));\n    }\n\n    public static __unRegisterInstanceModules(instanceID: string): void {\n        delete ModuleRegistry.instanceModulesMap[instanceID];\n    }\n\n    public static __getRegisteredModules(instanceID: string): IModule[] {\n        return [...values(ModuleRegistry.globalModulesMap), ...values(ModuleRegistry.instanceModulesMap[instanceID] || {})];\n    }\n\n    public static __isRegistered(moduleName: string, instanceID: string): boolean {\n        return !!ModuleRegistry.globalModulesMap[moduleName] || !!ModuleRegistry.instanceModulesMap[instanceID]?.[moduleName];\n    }\n\n    public static __getInstanceRegisteredModules(instanceID: string): IModule[] {\n        return values(ModuleRegistry.instanceModulesMap[instanceID] ?? {}) || [];\n    }\n\n    public static __assertRegistered(moduleName: string, reason: string, instanceID: string): boolean {\n        if (this.__isRegistered(moduleName, instanceID)) {\n            return true;\n        }\n\n        console.error(reason);\n\n        return false;\n    }\n\n    public static __register(module: IModule, instanceID: string | undefined): void {\n        // ModuleRegistry.runVersionChecks(module);\n\n        if (instanceID !== undefined) {\n            if (ModuleRegistry.instanceModulesMap[instanceID] === undefined) {\n                ModuleRegistry.instanceModulesMap[instanceID] = {};\n            }\n            ModuleRegistry.instanceModulesMap[instanceID][module.moduleName] = module;\n        } else {\n            ModuleRegistry.globalModulesMap[module.moduleName] = module;\n        }\n    }\n\n    // private static runVersionChecks(_module: IModule) : void {\n    //     // if (!module.version) {\n    //     //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is incompatible. Please update all modules to the same version.`);\n    //     // } else if (!ModuleRegistry.isValidModuleVersion(module.version, dependencyVersion[module.moduleName])) {\n    //     //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is version ${module.version} but the other modules are version ${dependencyVersion[module.moduleName]}. Please update all modules to the same version.`);\n    //     // }\n    // }\n\n    // private static isValidModuleVersion(version : string, dependencyVersion : string) : boolean {\n    //     return isValidModuleVersion(version, dependencyVersion);\n    // }\n}\n\n","export const KeyCodes = {\n    Any             : \"any\",\n    KeyA            : \"a\",\n    KeyS            : \"s\",\n    KeyD            : \"d\",\n    KeyF            : \"f\",\n    KeyH            : \"h\",\n    KeyG            : \"g\",\n    KeyZ            : \"z\",\n    KeyX            : \"x\",\n    KeyC            : \"c\",\n    KeyV            : \"v\",\n    IntlBackslash   : \"\\\\\",\n    KeyB            : \"b\",\n    KeyQ            : \"q\",\n    KeyW            : \"w\",\n    KeyE            : \"e\",\n    KeyR            : \"r\",\n    KeyY            : \"y\",\n    KeyT            : \"t\",\n    Digit1          : \"1\",\n    Digit2          : \"2\",\n    Digit3          : \"3\",\n    Digit4          : \"4\",\n    Digit6          : \"6\",\n    Digit5          : \"5\",\n    Equal           : \"=\",\n    Digit9          : \"9\",\n    Digit7          : \"7\",\n    Minus           : \"-\",\n    Digit8          : \"8\",\n    Digit0          : \"0\",\n    BracketRight    : \"]\",\n    KeyO            : \"o\",\n    KeyU            : \"u\",\n    BracketLeft     : \"[\",\n    KeyI            : \"i\",\n    KeyP            : \"p\",\n    Enter           : \"enter\",\n    KeyL            : \"l\",\n    KeyJ            : \"j\",\n    Quote           : \"'\",\n    KeyK            : \"k\",\n    Semicolon       : \";\",\n    Backslash       : \"\\\\\",\n    Comma           : \",\",\n    Slash           : \"/\",\n    KeyN            : \"n\",\n    KeyM            : \"m\",\n    Period          : \".\",\n\n    Tab             : \"tab\",\n    Space           : \"space\",\n    Backquote       : \"`\",\n    Backspace       : \"backspace\",\n    Escape          : \"escape\",\n    ShiftLeft       : \"shift\",\n    CapsLock        : \"capslock\",\n    AltLeft         : \"alt\",\n    ControlLeft     : \"ctrl\",\n    ShiftRight      : \"shift\",\n    AltRight        : \"alt\",\n    ControlRight    : \"ctrl\",\n    F17             : \"f17\",\n    NumpadDecimal   : \".\",\n    NumpadMultiply  : \"*\",\n    NumpadAdd       : \"+\",\n    NumLock         : \"numlock\",\n    NumpadDivide    : \"/\",\n    NumpadEnter     : \"enter\",\n    NumpadSubtract  : \"-\",\n    F18             : \"f18\",\n    F19             : \"f19\",\n    NumpadEqual     : \"=\",\n    Numpad0         : \"0\",\n    Numpad1         : \"1\",\n    Numpad2         : \"2\",\n    Numpad3         : \"3\",\n    Numpad4         : \"4\",\n    Numpad5         : \"5\",\n    Numpad6         : \"6\",\n    Numpad7         : \"7\",\n    F20             : \"f20\",\n    Numpad8         : \"8\",\n    Numpad9         : \"9\",\n    IntlYen         : \"¥\",\n    IntlRo          : \"ろ\",\n    NumpadComma     : \",\",\n    F5              : \"f5\",\n    F6              : \"f6\",\n    F7              : \"f7\",\n    F3              : \"f3\",\n    F8              : \"f8\",\n    F9              : \"f9\",\n    F11             : \"f11\",\n    F13             : \"f13\",\n    F16             : \"f16\",\n    F14             : \"f14\",\n    F10             : \"f10\",\n    ContextMenu     : \"contextmenu\",\n    F12             : \"f12\",\n    F15             : \"f15\",\n    Home            : \"home\",\n    PageUp          : \"pageup\",\n    Delete          : \"delete\",\n    F4              : \"f4\",\n    End             : \"end\",\n    F2              : \"f2\",\n    PageDown        : \"pagedown\",\n    F1              : \"f1\",\n    ArrowLeft       : \"arrowleft\",\n    ArrowRight      : \"arrowright\",\n    ArrowDown       : \"arrowdown\",\n    ArrowUp         : \"arrowup\",\n    MetaLeft        : \"ctrl\",\n    MetaRight       : \"ctrl\",\n}\n\nexport const eventKeys = {\n    ctrl     : 'ctrl',\n    any      : 'all',\n    hyper    : 'hyper',\n    super    : 'super',\n    meta     : 'meta',\n    control  : 'control',\n    shift    : 'shift',\n    alt      : 'alt',\n    altGraph : 'altgraph',\n    fn       : 'fn'\n}\nexport const isMacOS = navigator.platform === 'MacIntel';\n\nexport function isMetaKey(event : KeyboardEvent): boolean {\n    return isMacOS && event.key === 'Meta';\n}\n\nexport const ModifierKeys = [ eventKeys.hyper, eventKeys.super, eventKeys.ctrl, eventKeys.meta, eventKeys.control, eventKeys.shift, eventKeys.alt, eventKeys.altGraph, eventKeys.fn];","import { deBounce } from \"./Utility\";\nimport { ModifierKeys, KeyCodes, isMacOS, isMetaKey } from \"./Constants/KeyEventConstants\";\nimport { IEventtype, IExecutionParam, IEventPhaseMapping, IKeyEventHandler, IKeyEventConfiguration, IDefaultKeyEventConfiguration, IKeyEventMeta } from \"./Interface/IKeyEventManager\";\n\n\nconst capturingPhase    = Event[\"CAPTURING_PHASE\"];\nconst bubblePhase       = Event[\"BUBBLING_PHASE\"];\n\nfunction sortKeyCombo(keyCombo : string[]) : string[] {\n    return keyCombo.sort((a : any, b : any) => {\n        return ModifierKeys.indexOf(a) - ModifierKeys.indexOf(b)\n    });\n}\n\nfunction getCaptureKey(isCapture : boolean) : 'capture' | 'bubble' {\n    return isCapture ? 'capture' : 'bubble';\n}\n\nfunction sanitizeKeyCombo(keyCombo : string) : string {\n    const keyComboArr = keyCombo.split('+');\n    keyComboArr.forEach((val, index) => {\n        keyComboArr[index] = val.trim();\n    });\n    keyCombo = keyComboArr.join('+');\n    return keyCombo.toLowerCase();\n}\n\nclass KeyEventHandler implements IKeyEventHandler {\n    static DefaultConfiguration : IDefaultKeyEventConfiguration = {\n        description   : '',\n        capture       : false,\n        isKonami      : false,\n        eventType     : 'keydown',\n        repeat        : true\n    }\n\n    static konamiDelay = 500;\n\n    private listenerMapping     !: Record<IEventtype, IEventPhaseMapping>;\n    private defaultConfig       : IDefaultKeyEventConfiguration;\n    public  destroy             : () => void;\n    private isPaused            : boolean;\n    private activeKeys          : string[];\n    private konamiSequence      : string[];\n    private clearKonamiSequence : () => void;\n    private container           : HTMLElement;\n\n    constructor(container : HTMLElement = document.body, defaultConfig : IDefaultKeyEventConfiguration = {}) {\n        this.container           = container;\n        this.defaultConfig       = { ...{}, ...KeyEventHandler.DefaultConfiguration, ...defaultConfig };\n        this.activeKeys          = [];\n        this.konamiSequence      = [];\n        this.isPaused            = false;\n        this.destroy             = () => {};\n        this.clearKonamiSequence = () => {};\n        this.init();\n    }\n\n    resetListenerMapping() {\n        this.listenerMapping = { keydown: { capture: {}, bubble: {} }, keyup: { capture: {}, bubble: {} } };\n    }\n\n    private init() {\n        const triggerBubblingCallback  = (ev : KeyboardEvent)=>{\n            (ev.eventPhase != capturingPhase) && this.executeKeyCombo(ev, bubblePhase);\n        }\n        const triggerCapturingCallback = (ev : KeyboardEvent)=>{\n            (ev.eventPhase == capturingPhase) && this.executeKeyCombo(ev, capturingPhase)\n        };\n\n        //konami sequence\n        const addKonamiSequence = (ev : KeyboardEvent) => {\n            const keyCode = ev.code as (keyof typeof KeyCodes);\n            const key = KeyCodes[keyCode];\n            this.konamiSequence.push(key);\n            this.clearKonamiSequence();\n        };\n\n        this.clearKonamiSequence   = deBounce(() => this.konamiSequence = [], KeyEventHandler.konamiDelay);\n\n        //activeKeys maintaining\n        const addActiveKeys = (ev  : KeyboardEvent) => {\n            const code = ev.code as (keyof typeof KeyCodes);\n            const key = KeyCodes[code];\n            const isMetaHeld = ev.metaKey;\n            if(isMetaHeld && isMacOS){\n                this.activeKeys = [];\n            }\n            const isModifierKey = ModifierKeys.includes(key.toLowerCase());\n            !isModifierKey && !this.activeKeys.includes(key) && this.activeKeys.push(key);\n        };\n\n        const clearActiveKeys   = (ev : KeyboardEvent) =>{\n            const code = ev.code as keyof typeof KeyCodes;\n            if(isMetaKey(ev)){\n                this.activeKeys = [];\n            }\n            else if(code){\n                const key = KeyCodes[code];\n                const index = this.activeKeys.indexOf(key);\n                index != -1 && this.activeKeys.splice(index, 1);\n            } \n            else{\n                this.activeKeys = []\n            }\n        }; \n\n        const keydown = { capture : {}, bubble  : {} };\n        const keyup   = { capture : {}, bubble  : {} };\n\n        this.listenerMapping = { keydown, keyup };\n\n        const handleFocusChange = (ev: FocusEvent) => {\n            if (!this.container.contains(ev.target as Node)) {\n                this.activeKeys     = [];\n                this.konamiSequence = [];\n            }\n        };\n\n\n        const keyDownCapturingCallback = (ev : KeyboardEvent) => {\n            addActiveKeys(ev);\n            addKonamiSequence(ev);\n            triggerCapturingCallback(ev);\n        }\n\n        // const keyDownBubblingCallback = (ev : KeyboardEvent) => {\n        //     triggerBubblingCallback(ev);\n        // }\n\n        // const keyUpCapturingCallback = (ev : KeyboardEvent) => {\n        //     triggerCapturingCallback(ev);\n        // }\n\n \n\n        \n        this.destroy = () => {\n            this.resetListenerMapping();\n            // this.container.removeEventListener('keydown', addActiveKeys, true);\n            // this.container.removeEventListener('keydown', triggerBubblingCallback);\n            // this.container.removeEventListener('keydown', triggerCapturingCallback, true);\n            // this.container.removeEventListener('keyup', triggerBubblingCallback);\n            // this.container.removeEventListener('keyup', triggerCapturingCallback, true);\n            // this.container.removeEventListener('keydown', addKonamiSequence, true);\n            // window.removeEventListener('keyup', clearActiveKeys);\n            this.container.removeEventListener('keydown', keyDownCapturingCallback, true);\n            this.container.removeEventListener('keydown', triggerBubblingCallback);\n            this.container.removeEventListener('keyup', triggerBubblingCallback);\n            this.container.removeEventListener('keyup', triggerCapturingCallback, true);\n            window.removeEventListener('keyup', clearActiveKeys);\n\n            window.removeEventListener('focusin', handleFocusChange);\n            window.removeEventListener('focusout', handleFocusChange);\n\n        }\n\n        // this.container.addEventListener('keydown', addActiveKeys, true);\n        // this.container.addEventListener('keydown', triggerBubblingCallback);\n        // this.container.addEventListener('keydown', triggerCapturingCallback, true);\n        // this.container.addEventListener('keyup', triggerBubblingCallback);\n        // this.container.addEventListener('keyup', triggerCapturingCallback, true);\n        // this.container.addEventListener('keydown', addKonamiSequence, true);\n        // window.addEventListener('keyup', clearActiveKeys);\n\n        this.container.addEventListener('keydown', keyDownCapturingCallback, true);\n        this.container.addEventListener('keydown', triggerBubblingCallback);\n        this.container.addEventListener('keyup', triggerBubblingCallback);\n        this.container.addEventListener('keyup', triggerCapturingCallback, true);\n        window.addEventListener('keyup', clearActiveKeys);\n        \n        this.container.addEventListener('focusin', handleFocusChange);\n        this.container.addEventListener('focusout', handleFocusChange);\n\n        this.resetListenerMapping();\n    }\n\n    private getListenerMeta(eventConfiguration : IKeyEventConfiguration) : IKeyEventMeta {\n        const { keyCombo, priority }  = eventConfiguration;\n        const listenerConfig          = {...{}, ...this.defaultConfig, ...eventConfiguration} as IKeyEventMeta;\n        const comboListenerArr        = this.getListeners(listenerConfig.eventType, listenerConfig.capture, keyCombo);\n\n        listenerConfig.priority       = priority ?? comboListenerArr.length;\n\n        return listenerConfig;\n    }\n\n    private parseActiveKeys(ev : KeyboardEvent) : string[] {\n        const controlKey  = ev.ctrlKey ?( isMacOS ? KeyCodes.ControlLeft : KeyCodes.ControlLeft) : '';\n        const metaKey     = ev.metaKey ? KeyCodes.MetaLeft : '';\n        const shiftKey    = ev.shiftKey ? KeyCodes.ShiftLeft : '';\n        const altKey      = ev.altKey ? KeyCodes.AltLeft : '';\n        const keyComboArr = [metaKey, controlKey, shiftKey, altKey].filter((val)=>(val!==''));\n        sortKeyCombo(keyComboArr);\n        keyComboArr.push(...this.activeKeys);\n        return keyComboArr;\n    }\n\n    //constructing keyCombo from keyBoardEvent\n    private extractExecutionMeta(ev : KeyboardEvent, eventPhase : KeyboardEvent['eventPhase']) : Required<IExecutionParam> {\n        const eventType   = ev.type as IEventtype;\n        const capture     = eventPhase === ev.CAPTURING_PHASE;\n        // const controlKey  = ev.ctrlKey ?( isMacOS ? KeyCodes.ControlLeft : KeyCodes.ControlLeft) : '';\n        // const metaKey     = ev.metaKey ? KeyCodes.MetaLeft : '';\n        // const shiftKey    = ev.shiftKey ? KeyCodes.ShiftLeft : '';\n        // const altKey      = ev.altKey ? KeyCodes.AltLeft : '';\n        // const keyComboArr = [metaKey, controlKey, shiftKey, altKey].filter((val)=>(val!==''));\n        // sortKeyCombo(keyComboArr);\n        // keyComboArr.push(...this.activeKeys);\n        const keyComboArr = this.parseActiveKeys(ev);\n        return {\n            keyCombo  : keyComboArr.join('+'),\n            capture   : capture,\n            eventType : eventType\n        };\n    }\n\n    private executeListenerArr(listeners : IKeyEventMeta[], ev : KeyboardEvent | null = null, activeKeys : string[]) : void{\n        for(let index = 0; index < listeners.length; index++) {\n            const listenerMeta = {...listeners[index], event : ev, activeKeys};\n            let repeatingCheck = true;\n            if(ev) {\n                repeatingCheck = (listenerMeta.repeat == false) ? (ev.repeat == false) : true;\n            }\n            if(!listenerMeta.isKonami && repeatingCheck) {\n                const continueLoop = listenerMeta.callback(listenerMeta);\n                if(continueLoop === false) {\n                    break;\n                }\n            }\n        }\n    }\n\n    private executeKonamiSequence(listeners : IKeyEventMeta[], ev : KeyboardEvent | null = null) : void {\n        for(let index = 0; index < listeners.length; index++) {\n            const listenerMeta = {...listeners[index], event : ev, activeKeys : this.activeKeys}\n            let repeatingCheck = true;\n            if(ev) {\n                repeatingCheck = (listenerMeta.repeat == false) ? (ev.repeat == false) : true;\n            }\n            if(listenerMeta.isKonami && repeatingCheck) {\n                const continueLoop = listenerMeta.callback(ev, listenerMeta);\n                if(continueLoop === false) {\n                    break;\n                }\n            }\n        }\n    }\n\n    getListeners(eventType : IEventtype, isCapture : boolean, keyCombo : string ) : IKeyEventMeta[] {\n        const capture = getCaptureKey(isCapture);\n        return this.listenerMapping?.[eventType][capture]?.[keyCombo.toLowerCase()] || [];\n    }\n\n    addListener(eventConfiguration : IKeyEventConfiguration) : void {\n        const keyCombo                                   = sanitizeKeyCombo(eventConfiguration.keyCombo);\n        const listenerMeta                               = this.getListenerMeta(eventConfiguration);\n        const {eventType, capture : isCapture, priority} = listenerMeta;\n        const capture                                    = getCaptureKey(isCapture);\n\n        if(!this.listenerMapping[eventType][capture][keyCombo]) { \n            this.listenerMapping[eventType][capture][keyCombo] = [];\n        }\n        this.listenerMapping[eventType][capture][keyCombo].splice(priority, 0, listenerMeta);\n    }\n\n    executeKeyCombo(executionParam : KeyboardEvent | IExecutionParam, eventPhase ?:  KeyboardEvent['eventPhase']) {\n        if(!this.isPaused) {\n            let {keyCombo, capture, eventType} = (executionParam ?? {}) as IExecutionParam;\n            let event;\n            let activeKeys = this.activeKeys;\n            if(executionParam instanceof KeyboardEvent) {\n                event      = executionParam as KeyboardEvent;\n                eventPhase = event.eventPhase;\n                ({keyCombo, capture, eventType} = this.extractExecutionMeta(executionParam, eventPhase));\n                activeKeys = this.parseActiveKeys(event);\n            } \n            \n            const anyKeyCode     = KeyCodes.Any;\n            const konamiKeyCombo = this.konamiSequence.join('+');\n\n            const listeners       = this.getListeners(eventType, capture, keyCombo);\n            const keyDownListener = this.getListeners(eventType, capture, anyKeyCode);\n            const konamiListeners = this.getListeners(eventType, capture, konamiKeyCombo);\n\n            this.executeListenerArr(listeners, event, activeKeys);\n            this.executeListenerArr(keyDownListener, event, activeKeys);\n            this.executeKonamiSequence(konamiListeners, event);\n        }\n    }\n    \n    removeListener(executionParam : IExecutionParam, searchCallback : CallableFunction) {\n        const {keyCombo, capture, eventType} = executionParam;\n        const listeners = this.getListeners(eventType, capture, keyCombo);\n        let searchIndex = -1;\n        listeners.find(({callback}, index)=>{\n            if(callback === searchCallback){\n                searchIndex = index;\n                return;\n            }\n        });\n        (searchIndex !== -1) && listeners.splice(searchIndex, 1);\n    }\n\n    removeKeyCombo(executionParam : IExecutionParam) {\n        const {keyCombo, capture, eventType} = executionParam;\n        const captureKey                     = getCaptureKey(capture);\n\n        delete this.listenerMapping?.[eventType][captureKey][keyCombo];\n    }\n\n    importEvents(eventConfigs : IKeyEventConfiguration[]) {\n        eventConfigs.forEach((eventConfig) => {\n            this.addListener(eventConfig);\n        })\n    }\n\n    pauseExecution() {\n        this.isPaused = true;\n    }\n\n    unpauseExecution() {\n        this.isPaused = false;\n    }   \n}\n\nexport{\n    KeyEventHandler,\n    KeyCodes\n}","function deBounce<T extends (...args: any[]) => any>(fun: T, delay: number): (...args: Parameters<T>) => void {\n\tlet indeBounce: any;\n\treturn function(this: any, ...args: Parameters<T>) {\n\t\tconst context = this;\n\t\tclearTimeout(indeBounce);\n\t\tindeBounce = setTimeout(() => {\n\t\t\tfun.apply(context, args);\n\t\t}, delay);\n\t};\n}\n\n\nfunction findInsertIndex(array: number[], key: number): number {\n\tlet left = 0;\n\tlet right = array.length - 1;\n\n\twhile (left <= right) {\n\t\tlet mid = Math.floor((left + right) / 2);\n\n\t\tif (array[mid] === key) {\n\t\t\treturn mid;\n\t\t} else if (array[mid] < key) {\n\t\t\tleft = mid + 1;\n\t\t} else {\n\t\t\tright = mid - 1;\n\t\t}\n\t}\n\n\treturn left;\n}\n\nexport{\n    deBounce,\n\tfindInsertIndex\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IAdjusterList, IDestroyAdjuster } from \"./number-keyboard-shortcuts.types\";\nimport { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumberEventHandler } from \"./number-event-handler.types\";\nimport { KeyCodes, KeyEventHandler } from \"../../../../token/src/utilities/KeyEventHandler\";\n\n@Bean(NUMBER_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER)\nexport class NumberKeyBoardShortCuts extends EventEmitter {\n\t@AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler!: INumberEventHandler;\n\n\tprivate adjusterList: IAdjusterList[] = [];\n\tregisterElement(element: HTMLElement): IDestroyAdjuster {\n\t\tconst adjusterIndex = this.getAdjusterIndex(element);\n\n\t\tif (adjusterIndex !== -1) {\n\t\t\tconst adjuster = this.adjusterList[adjusterIndex];\n\t\t\treturn { destroyFunc: () => adjuster.destroyFunc() };\n\t\t}\n\t\tconst keyBoardEventHandler = this.keyBoardEventHandler(element);\n\n\t\tconst adjuster = {\n\t\t\telement: element,\n\t\t\teventHandler: keyBoardEventHandler,\n\t\t\tdestroyFunc: () => keyBoardEventHandler.destroy(),\n\t\t};\n\n\t\tthis.adjusterList.push(adjuster);\n\n\t\treturn {\n\t\t\tdestroyFunc: () => adjuster.destroyFunc(),\n\t\t};\n\t}\n\n\tprotected getAdjusterIndex(element: HTMLElement): number {\n\t\treturn this.adjusterList.findIndex(\n\t\t\t(adjuster) => adjuster.element === element,\n\t\t);\n\t}\n\n\tdeRegisterElement(element: HTMLElement): void {\n\t\tthis.adjusterList = this.adjusterList.filter(\n\t\t\t(adjuster) => adjuster.element !== element,\n\t\t);\n\t}\n\n\tprivate keyBoardEventHandler(element: HTMLElement): KeyEventHandler {\n\t\tconst keyBoardShortCuts = [\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.ArrowUp}`,\n\t\t\t\tcallback: (event : any) => this.numberEventHandler.onIncrement(event.event),\n\t\t\t\t// repeat : true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.ArrowDown}`,\n\t\t\t\tcallback: (event : any) => this.numberEventHandler.onDecrement(event.event),\n\t\t\t\t// repeat : true,\n\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.Enter}`,\n\t\t\t\tcallback: () => this.numberEventHandler.onEnter(),\n\t\t\t},\n\n\t\t\t\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.ShiftLeft}+${KeyCodes.ArrowUp}`,\n\t\t\t\tcallback: (event : any) => this.numberEventHandler.onIncrementByLongStep(event.event),\n\t\t\t\t// repeat : true,\n\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.ShiftLeft}+${KeyCodes.ArrowDown}`,\n\t\t\t\tcallback: (event : any) => this.numberEventHandler.onDecrementByLongStep(event.event),\n\t\t\t\t// repeat : true,\n\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.MetaLeft}+${KeyCodes.ArrowUp}`,\n\t\t\t\tcallback: (event : any) => this.numberEventHandler.onIncrementByShortStep(event.event),\n\t\t\t\t// repeat : true,\n\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: `${KeyCodes.MetaLeft}+${KeyCodes.ArrowDown}`,\n\t\t\t\tcallback: (event : any) => this.numberEventHandler.onDecrementByShortStep(event.event),\n\t\t\t\t// repeat : true,\n\n\t\t\t},\n\t\t];\n\n\t\tconst keyEventManager = new KeyEventHandler(element);\n\t\tkeyEventManager.importEvents(keyBoardShortCuts as any);\n\t\treturn keyEventManager;\n\t}\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumericAdjusterModel } from \"./number-adjuster.types\";\nimport { INumberOptionHandler } from \"./number-option-handler.types\";\n\n@Bean('stateManager')\nexport class NumberStateManager extends EventEmitter {\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_ADJUSTER_HANDLER) adjusterModel!: INumericAdjusterModel;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler        !: INumberOptionHandler;\n\n    isInValid() : boolean {\n        // const isEmpty = this.adjusterModel.isEmty();\n        // const required = this.optionHandler.isRequired();\n        // if (required && isEmpty) {\n        //     return true;\n        // }\n        return this.optionHandler.isValid() || !this.adjusterModel.isValid()\n    }\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","\n\n\n\nimport { composeClasses, generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\n\nconst useUtilityClasses = (slot:string,modifiers?:any) => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: slot,\n\t\t\tmodifiers: modifiers?modifiers:[],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getNumberRootUtilityClass);\n};\n\n\n\nfunction getNumberRootUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('number', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\nfunction getInputUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('input', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\n\n\nconst NUMBER_SLOTS = {\n    SPINBUTTON        : \"spinbutton\",\n    SPIN_DOWNBTN      : \"spin-downbtn\",\n    SPIN_UPBTN        : \"spin-upbtn\",\n    LABEL             : \"label\",\n    LABEL_TITLE       : \"label-title\",\n    VALIDATION_MESSAGE: \"validation-message\",\n    DESCRIPTION       : \"description\",\n    SUFFIX_ELEM       : \"suffix-elem\",\n    PREFIX_ELEM       : \"prefix-elem\",\n    INPUT_SUFFIX      : \"input-suffix\",\n    INPUT_PREFIX      : \"input-prefix\",\n}\n\nconst NUMBER_STATES = {\n    STATUS_ERROR   : \"status--error\",\n    STATUS_DISABLED: \"status--disabled\",\n    STATUS_READONLY: \"status--readonly\",\n    STATUS_FOCUS   : \"status--focus\",\n}\n\n\nexport {\n    NUMBER_SLOTS,\n    NUMBER_STATES,\n    getNumberRootUtilityClass,\n    getInputUtilityClass,\n    useUtilityClasses\n}","import { composeClasses } from \"@dg/utils\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumberEventHandler } from \"../model/number-event-handler.types\";\nimport { NumberButtonType } from \"./number-button.types\";\nimport { INumericAdjusterModel } from \"../model/number-adjuster.types\";\nimport { getNumberRootUtilityClass } from \"../number-utils/number-classnames-slots\";\n\nconst useUtilityClasses = (ownerState : any) => {\n    const {disabled, role} = ownerState;\n\tconst slots = {\n\t\troot    : {\n            slot     : role,\n            modifiers: [\n                disabled && 'disabled'\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots, getNumberRootUtilityClass);\n};\n\nexport class NumberButtonController extends EventEmitter {\n\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_ADJUSTER_HANDLER) adjusterModel !: INumericAdjusterModel;\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler !: INumberEventHandler;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: any;\n    \n    private comp !: NumberButtonType;\n\n    private ownerState : {disabled : boolean|null,spinButton :boolean} = {disabled : null,spinButton:false};\n    setComp(comp : NumberButtonType) : void {\n        this.comp = comp;\n        this.applyStaticClasses();\n        this.applyState();\n        this.setRendererDetails();\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.applyState.bind(this));\n    }\n\n    private applyStaticClasses() {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCssClass(classes.root, true);\n    }\n\n    private applyState() : void {\n\n        const ownerState = this.getOwnerState();\n\n        if(this.ownerState.disabled === ownerState.disabled ) {\n            return;\n        }\n\n        this.ownerState = ownerState;\n        const element = this.comp.getElement();\n        element.classList.toggle('dg-number__increment--disabled', ownerState.disabled);\n        element.classList.toggle('dg-button__root--disabled', ownerState.disabled);\n\n\n    }\n\n    private setRendererDetails() : void {\n        \n        const params          = this.createRendererParams();\n        const rendererWrapper = this.createRendererWrapper();\n        const compDetails     = this.userComponentHandler.getButtonRendererDetails(rendererWrapper, params);\n\n        this.comp.setRendererDetails(compDetails);\n    }\n\n    private createRendererParams() {\n        const params = this.comp.getParams() ?? {};\n        return {\n            parentElement: this.comp.getElement(),\n            callback     : (event:any) => params.callback && params.callback(event),\n            icon         : params.getIcon(),\n            showIcon     : true,\n            showText     : false,\n            disabled     : params.isDisabled(),\n            readonly : params.isReadonly(),\n            ariaLabel    : params.getRole(),\n            classes : params.getClasses(),\n            tabindex : params.getTabindex(),\n            getSvgClasses : ()=>\"dg-number__spinbutton-svg\"\n\n\t\t};\n    }\n\n    private createRendererWrapper() {\n        const {getRenderer, getRendererParams} = this.comp.getParams() ?? {};\n        return {\n\t\t\tgetRenderer          : () => getRenderer ? getRenderer() : undefined,\n\t\t\tgetUserRendererParams: () => getRendererParams ? getRendererParams() : undefined\n\t\t}\n    } \n\n    private getOwnerState() {\n        const { isDisabled, getRole , getSpinButton} = this.comp.getParams() ?? {};\n        return {\n            disabled : isDisabled(),\n            role : getRole(),\n            spinButton : getSpinButton()\n        }\n    }\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { NumberButtonController } from \"./number-button-controller\";\nimport { NumberButtonType } from \"./number-button.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\nconst numberIncrementTemplate = () => {\n    // const div = document.createElement(\"div\");\n    // div.innerHTML = '<div></div>';\n    // return div.firstChild as HTMLElement;\n\treturn document.createElement(\"div\");\n}\nexport class NumberButtonComponent extends Component {\n\tprivate renderer: any;\n\tprivate rendererElement: any;\n    private params : any;\n\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.setTemplate(numberIncrementTemplate());\n\t\tconst comp : NumberButtonType = {\n            addOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n            setRendererDetails : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getElement         : () => this.getGui(),\n            getParams          : () => this.params\n\t\t};\n\n\t\tconst controller = this.createBean(new NumberButtonController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\t\n\t\t\t// const parentcomp = this.getParentComponent();\n\t\t\tclearElement(parentElement);\n\t\t\t// parentElement.remove();\n\t\t\tthis.setTemplate(this.rendererElement);\n\t\t\tparentElement.replaceWith(this.rendererElement);\n\t\t\t// parentcomp?.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className;\n\t}\n}","import { Button } from \"../../../../button/src/button\";\nimport { IButtonConfiguration } from \"../../../../button/src/button-configuration.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nexport class ButtonRenderer implements ICustomRenderer{\n    private params : any;\n    private button !: Button|null;\n    \n    init(params : any) {\n        this.params = params;\n        const configuration = this.createConfiguration();\n        this.button = new Button(configuration);\n    }\n\n    getElement(): HTMLElement {\n        return this.button?.api?.getElement() as HTMLElement;\n    }\n\n    private createConfiguration() : IButtonConfiguration {\n        return {\n            text    : this.params.label,\n            callback: this.params.callback,\n            icon    : this.params.icon,\n            showIcon: this.params.showIcon,\n            showText: this.params.showText,\n            disabled: this.params.disabled,\n            readonly : this.params.readonly,\n            ariaLabel : this.params.ariaLabel,\n            classes : this.params.classes,\n            tabindex : this.params.tabindex,\n            getSvgClasses : this.params.getSvgClasses\n        }\n    }\n\n    destroy() : void {\n        this.button?.api?.destroy();\n        this.button = null;\n        this.params = null;\n    }\n}\n","import { composeClasses } from \"@dg/utils\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { SpinButtonCompType } from \"./spin-button.types\";\nimport { INumberEventHandler } from \"../model/number-event-handler.types\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { INumericAdjusterModel } from \"../model/number-adjuster.types\";\nimport { getNumberRootUtilityClass } from \"../number-utils/number-classnames-slots\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot    : {\n            slot     : 'spinbutton-panel',\n            modifiers: []\n        }\n\t};\n    \n\n\treturn composeClasses(slots, getNumberRootUtilityClass);\n};\n\nexport class SpinButtonController extends EventEmitter {\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler !: INumberEventHandler;\n     @AutoWired(NUMBER_BEAN_NAME.NUMBER_ADJUSTER_HANDLER) adjusterModel !: INumericAdjusterModel;\n    private comp !: SpinButtonCompType;\n    setComp(comp : SpinButtonCompType) : void {\n        this.comp = comp;\n\n        this.applyClasses();\n    }\n    \n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCSSClass(classes.root)\n    }\n\n    getProperty() {\n        return {\n\t\t\tincrementButton: {\n                getIcon          : () =>  this.optionsHandler.getIncrementButtonSVGIconId(),\n                getRenderer      : () => this.optionsHandler.getIncrementRenderer(),\n                getRendererParams: () => this.optionsHandler.getIncrementRendererParams(),\n                callback         : (event :any) => this.numberEventHandler.onIncrement(event),\n                isDisabled       : () => this.adjusterModel.isIncrementDisabled(),\n                getRole          : () => 'increment',\n                getClasses : ()=> \"dg-number__spinbutton dg-number__spin-upbtn\",\n                getTabindex : ()=> \"-1\"\n\t\t\t},\n\t\t\tdecrementButton: {\n                getIcon       : () =>  this.optionsHandler.getDecrementButtonSVGIconId(),\n                renderer      : () => this.optionsHandler.getDecrementRenderer(),\n                rendererParams: () => this.optionsHandler.getDecrementRendererParams(),\n                callback      : (event : any) => this.numberEventHandler.onDecrement(event),\n                isDisabled    : () => this.adjusterModel.isDecrementDisabled(),\n                getRole       : () => 'decrement',\n                getClasses    : ()=>  \"dg-number__spinbutton dg-number__spin-downbtn\",\n                getTabindex : ()=> \"-1\"\n\n\n                \n\t\t\t},\n\t\t};\n    }\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { SpinButtonController } from \"./spin-button-controller\";\nimport { SpinButtonCompType } from \"./spin-button.types\";\n\nconst spinButtonTemplate = () => {\n    const wrapperDiv = document.createElement(\"div\");\n\n    const incrementButton = document.createElement(\"number-increment\");\n    incrementButton.setAttribute(\"ref\", \"incrementButton\");\n\n    const decrementButton = document.createElement(\"number-decrement\");\n    decrementButton.setAttribute(\"ref\", \"decrementButton\");\n\n    wrapperDiv.appendChild(incrementButton);\n    wrapperDiv.appendChild(decrementButton);\n\n    return wrapperDiv;\n};\n\nexport class SpinButtonComponent extends Component {\n    private params : any;\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n    @PostConstruct()\n    init() : void {\n        const controller = this.createBean(new SpinButtonController());\n\n        this.setTemplate(spinButtonTemplate(), {\n\t\t\tincrementButton: this.params.incrementButton,\n\t\t\tdecrementButton: this.params.decrementButton\n\t\t});\n\n        const comp : SpinButtonCompType = {\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        \n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n}\n","    import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n    import { NumberInputCompType } from \"./number-input.types\";\n    import { AutoWired, BEAN_NAME, setAriaDescribedBy, setAriaInvalid, setAriaLabel, setAriaLabelledBy, setAriaRequired, setAriaValueMax, setAriaValueMin, setAriaValueNow, toggleAttribute } from \"@dg/corecomponent\";\n    import { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\n    import { NumberKeyBoardShortCuts } from \"../model/number-keyboard-shortcuts\";\n    import { IDestroyAdjuster } from \"../model/number-keyboard-shortcuts.types\";\n    import { INumberEventHandler } from \"../model/number-event-handler.types\";\n    import { IFormatter } from \"../../formatter/formatter.types\";\n    import { composeClasses } from \"@dg/utils\";\n    import { INumberOptionHandler } from \"../model/number-option-handler.types\";\n    import { INumericAdjusterModel } from \"../model/number-adjuster.types\";\nimport { getNumberRootUtilityClass } from \"../number-utils/number-classnames-slots\";\nimport { EVENT_NAME } from \"../../constants/event-name\";\n\n    const useUtilityClasses = (_ownerState : any) => {\n        // const { invalid, disabled, readonly, focus } = ownerState;\n        const slots = {\n            root: {\n                slot: 'input',\n                modifiers: [\n                    // invalid && 'error',\n                    // disabled && 'disabled',\n                    // readonly && 'readonly',\n                    // focus && 'focus'\n                ],\n            },\n        };\n\n        return composeClasses(slots, getNumberRootUtilityClass);\n    };\n    export class NumberInputController extends EventEmitter {\n\n        @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: INumberOptionHandler;\n        @AutoWired('NumberAdjusterHandler') adjusterModel !: INumericAdjusterModel;\n        @AutoWired(NUMBER_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER) adjusterEventHandler !: NumberKeyBoardShortCuts;\n        @AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler !: INumberEventHandler;\n        @AutoWired(NUMBER_BEAN_NAME.FORMATTER) formatter !: IFormatter;\n\n        private comp !: NumberInputCompType;\n\n        private numberAdjusterRef : IDestroyAdjuster |null = null;\n        private eventKey!: string\n        // private zerosAfterDecimal!:string | null;\n        // private userInputValue !:string;\n        // private isEmty !: boolean;\n        \n        setComp(comp : NumberInputCompType ) {\n            this.comp = comp;\n             this.eventKey = this.optionHandler.getEventKey();\n\n\n            this.applyClasses();\n            // this.userInputValue = this.validateInput(String(this.adjusterModel.getValue()))\n            this.setValue();\n            this.setAriaAttributes();\n            this.registerEventHandler();\n            this.registerAdjusterEventHandler();\n            this.setTabIndex(\"0\");\n            this.setPlaceholder();\n            this.setRequired();\n            this.handleEventKey();\n            this.setRole()\n            \n        }\n\n        private handleEventKey(){\n            let eventKey = this.optionHandler.getEventKey();\n            if(!eventKey){\n                return\n            }\n         \n            const decimalSeparator = this.optionHandler.getDecimalSeparator();\n            const decimalSeparatorEscaped = decimalSeparator === '.' ? '\\\\.' : decimalSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n            const allowedCharsRegex = new RegExp(`[^0-9.${decimalSeparatorEscaped}\\\\-\\\\+]`, 'g');\n            \n            eventKey = eventKey.replace(allowedCharsRegex, ''); // Remove invalid characters\n            \n            // Convert custom decimal separator to '.' for internal processing\n            if (decimalSeparator !== '.' && eventKey.includes(decimalSeparator)) {\n                eventKey = eventKey.replace(new RegExp(decimalSeparatorEscaped, 'g'), '.');\n            }\n    \n            // Handle decimal separator \".\" - display just the decimal separator\n            if (eventKey === '.' || eventKey === decimalSeparator) {\n                this.adjusterModel.setIsEmpty(false);\n                this.adjusterModel.setValue(\".\");\n                (this.comp.getElement() as HTMLInputElement).value = decimalSeparator;\n            }\n            // Ensure the minus sign is only at the beginning (handle \"-\" or \"+\")\n            else if (eventKey.includes('-') || eventKey.includes('+')) {\n                const sign = eventKey.includes('-') ? '-' : '+';\n                this.adjusterModel.setIsEmpty(false);\n                this.adjusterModel.setValue(sign);\n                let displayValue = eventKey;\n                if (decimalSeparator !== '.' && displayValue.includes('.')) {\n                    displayValue = displayValue.replace(/\\./g, decimalSeparator);\n                }\n                const inputEl = this.comp.getElement() as HTMLInputElement;\n                inputEl.value = /^[\\-+]/.test(displayValue) ? displayValue : sign;\n\n            }else if( eventKey !== '' && !isNaN(Number(eventKey))){\n                this.adjusterModel.setIsEmpty(false);\n                this.adjusterModel.setValue(eventKey); // Automatically SetValue called for the Input Element\n\n            }else {\n                this.adjusterModel.setValue(\"0\");\n                this.adjusterModel.setIsEmpty(true);\n                (this.comp.getElement() as HTMLInputElement).value = \"\"\n            }\n            if(this.eventKey != '-'){\n                this.eventKey = ''\n            }\n              \n\n\n        \n        }\n\n        private applyClasses() : void {\n            const ownerState = this.getOwnerState();\n            const classes = useUtilityClasses(ownerState);\n            this.comp.addOrRemoveCSSClass(classes.root);\n            this.comp.getElement().classList.add(\"dg-field__input\")\n            \n        }\n\n        private setPlaceholder() {\n            const placeholder = this.optionHandler?.getPlaceholder();\n            if(placeholder != undefined) {\n                (this.comp.getElement() as HTMLInputElement).placeholder = placeholder;\n            }else if(placeholder === null){\n                (this.comp.getElement() as HTMLInputElement).placeholder = '';\n\n            }\n             \n        }\n        \n\n        private setRequired(){\n            this.optionHandler.isRequired() && ((this.comp.getElement() as HTMLInputElement).setAttribute(\"required\",\"\"))\n        }\n\n        private setTabIndex(index : string){\n            this.comp.getElement().setAttribute(\"tabIndex\", index);\n        }\n        \n        private refresh() : void {\n            this.applyClasses();\n\n        }\n\n        private getOwnerState() {\n            const showErrorState = this.optionHandler.showErrorState();\n            return {\n                invalid : showErrorState ? !this.adjusterModel?.isValid(): false,\n                disabled: this.optionHandler.isDisabled(),\n                readonly: this.optionHandler.isReadonly(),\n                focus   : this.adjusterModel?.isFocused() ??  true,\n            }\n        }\n\n        private registerEventHandler() {\n            const ownerState = this.getOwnerState();\n            const element = this.comp.getElement() as HTMLInputElement;\n\n\n            if(ownerState.disabled) {\n                return \n            }\n            this.addListener(element,'focus', (event : FocusEvent)=>{\n                const ownerState = this.getOwnerState();\n                const relatedTarget = event.relatedTarget;\n    \n                if( ownerState.disabled || ownerState.readonly) {\n                    return\n                }\n                this.dispatchEvent({type : 'FOCUS_IN'})\n\n                // Handle eventKey if present, otherwise preserve formatted value\n                if(this.eventKey){\n                    this.handleEventKey();\n                    this.eventKey = ''\n                } else if(!this.adjusterModel.isFocused()) {\n                    // Keep formatted value with separators and decimals when focused\n                    this.setFormattedValue();\n                }\n                this.optionHandler.onFocus(event);\n\n                relatedTarget !== null && relatedTarget !== element && element.select();\n    \n            });\n    \n\n            this.addListener(element, 'focusin', (_event) => {\n                if(ownerState.readonly){\n                    return\n                }\n\n\n                \n            });\n\n\n            this.addListener(element, 'focusout', (event) => {\n                if(ownerState.readonly){\n                    return\n                }\n                this.numberEventHandler.onFocusOut(event);\n                this.refresh();\n            });\n\n            this.addListener(element, 'keydown', (event) => {\n                if(ownerState.readonly){\n                    return\n                }\n                this.numberEventHandler.onKeyDown(event);\n                // this.optionHandler.onKeydown(this.adjusterModel.getValue() as number);\n\n                // if ((event.metaKey || event.ctrlKey) && event.key === 'a') {\n                //     event.stopPropagation(); // Stop the event from propagating\n                //     return;\n                // }\n               \n\n                \n            });\n\n            // this.addListener(element, 'input', (event: InputEvent) => { // Old Code\n\n            //     if (ownerState.readonly) {\n            //         return;\n            //     }\n                \n            //     event.preventDefault();\n            //     const inputElement = event.target as HTMLInputElement;\n            //     let value = inputElement.value;\n             \n            //     // Validate input: ensure only valid characters (numbers, one \".\", \"+\", \"-\")\n            //     this.userInputValue = this.validateInput(value);\n            //     let numericValue = parseFloat(this.userInputValue);\n\n            //     // Check if the input exceeds Number.MAX_SAFE_INTEGER\n            //     if (numericValue > Number.MAX_SAFE_INTEGER) {\n            //         this.isEmty = true;\n            //         // Optionally, you can reset the input or show an error message\n            //         // inputElement.value = ''; // Clear the input if it exceeds the max safe integer\n            //         return; // Exit early since the input is invalid\n            //     } else {\n            //         this.isEmty = false;\n            //     }\n\n\n                \n            //     if (this.formattedState.hasDecimal) {\n            //         const formattedValue = parseFloat( this.userInputValue ); // parseFloat retains decimals\n            //         if(!isNaN(formattedValue)) {\n            //             this.numberEventHandler.onInput(formattedValue);\n            //             this.isEmty = false;\n            //             this.optionHandler.onInput(this.adjusterModel.getValue() as number);\n                        \n            //         }\n            //         // this.setValue()\n                    \n\n            //     } else {\n            //         if(value === \"\"){\n            //             this.userInputValue = \"0\";\n            //             this.isEmty = true;\n\n            //         }\n            //         const formattedValue = parseFloat( this.userInputValue ); // parseFloat retains decimals\n            //         this.numberEventHandler.onInput(formattedValue);\n            //     }\n            \n            //     // this.optionHandler.onInput(this.adjusterModel.getValue() as number);\n            // });\n            \n            this.addListener(element, 'input', (event: InputEvent) => {\n                     if (ownerState.readonly) {\n                            return;\n                        }\n                        this.numberEventHandler.onInput(event);\n\n            });\n\n            this.addListener(element, 'paste', (event: ClipboardEvent) => {\n                if (ownerState.readonly) {\n                    return; // Exit early if the field is read-only\n                }\n\n                const pasteData = event.clipboardData?.getData('text') || '';\n                const decimalSeparator = this.optionHandler.getDecimalSeparator();\n                \n                // Convert custom decimal separator to '.' for validation\n                let normalizedPasteData = pasteData;\n                if (decimalSeparator !== '.' && pasteData.includes(decimalSeparator)) {\n                    normalizedPasteData = pasteData.replace(new RegExp(decimalSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'), '.');\n                }\n\n                // Regex to check if the pasted data is entirely numeric\n                const isNumeric = Number(normalizedPasteData);\n            \n                if (isNaN(isNumeric)) {\n                    event.preventDefault()\n\n                    this.dispatchEvent({\n                        type: EVENT_NAME.SHOW_TOOLTIP,\n                    });;\n                    return; // Exit without updating the input value\n                }\n                \n            \n                // Prevent default paste behavior\n                // event.preventDefault();\n            \n                // Get the input element and its current value\n                // const inputElement = event.target as HTMLInputElement;\n                // const currentValue = inputElement.value || '';\n            \n                // // Get the caret (cursor) position\n                // const caretPosition = inputElement.selectionStart || 0;\n            \n                // // Get pasted content\n                // const pasteData = event.clipboardData?.getData('text') || '';\n            \n                // // Allow only valid numeric characters (numbers, e, +, -, .)\n                // const numericValue = pasteData.replace(/[^0-9eE+\\-.]/g, '');\n            \n                // // Construct the new value based on the caret position\n                // const newValue =\n                //     currentValue.slice(0, caretPosition) + // Text before the caret\n                //     numericValue +                         // Pasted numeric content\n                //     currentValue.slice(inputElement.selectionEnd || 0); // Text after the caret\n            \n                // // Validate and set the input value\n                // inputElement.value = newValue;\n            \n                // // Notify the component of the new value\n                // this.optionHandler.onInput(Number(newValue)); // Adjust this as per your logic\n            \n                // // Calculate the new caret position\n                // const newCaretPosition = caretPosition + numericValue.length;\n                // inputElement.setSelectionRange(newCaretPosition, newCaretPosition);\n            });\n            \n            \n            \n            \n\n\n            this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.setValue.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_FOCUS_IN', this.setValue.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.setValue.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.refresh.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.setValue.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.refresh.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.setValue.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_REFRESH', this.refresh.bind(this));\n            this.addListener(this.eventHandler, 'FOCUS_IN', this.focusIn.bind(this));\n            this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setPlaceholder.bind(this));\n            this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setRequired.bind(this));\n            this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setValue.bind(this));\n            this.addListener(this.eventHandler, 'EVENT_CLEAR_VALUE', this.clear.bind(this));\n\n        }\n        // private validateInput(value: string): string {\n        //     let filteredValue = '';\n        //     let hasDecimal = false;\n        //     let hasExponent = false;\n        //     let plusMinusCount = 0; // Track the number of \"+\" and \"-\" signs\n            \n        //     for (let i = 0; i < value.length; i++) {\n        //         const char = value[i];\n                \n                \n        //         // Allow one decimal point, but only before the exponent part\n        //         if (char === '.' && !hasDecimal && !hasExponent) {\n        //             hasDecimal = true;\n        //             this.formattedState.hasDecimal = true;\n        //             filteredValue += char;\n        //         }\n        //         // Allow \"e\" or \"E\" for scientific notation, but only one and not as the first character\n        //         else if ((char === 'e' || char === 'E') && !hasExponent && filteredValue.length > 0) {\n        //             hasExponent = true;\n        //             filteredValue += char;\n        //         }\n        //         // Allow \"+\" or \"-\" up to two times in the expression\n        //         else if ((char === '+' || char === '-') && plusMinusCount < 2) {\n        //             plusMinusCount++; // Increment count for \"+\" and \"-\"\n        //             filteredValue += char;\n        //         }\n        //         // Allow digits (0-9) at any position\n        //         else if (/\\d/.test(char)) {\n        //             filteredValue += char;\n        //             if (hasDecimal) {\n        //                 // Check if the current filteredValue matches the regex for zeros after decimal\n        //                 const match = filteredValue.match(/(?<=\\.)0+$/);\n        //                 if (match) {\n        //                     // this.zerosAfterDecimal = match[0]; // Store the matched zeros\n        //                 }\n        //                 if (/[1-9]/.test(filteredValue)) {\n        //                     // this.zerosAfterDecimal = \"\"; // Reset to null\n        //                 }\n        //             }\n        //         }\n\n        //     }\n            \n        //     return filteredValue;\n        // }\n        \n        // private validateInput(value: string): string {\n        //     let filteredValue = '';\n        //     let hasDecimal = false;\n        //     let hasExponent = false;\n        //     let plusMinusCount = 0; // Track the number of \"+\" and \"-\" signs\n        \n        //     for (let i = 0; i < value.length; i++) {\n        //         const char = value[i];\n        \n        //         // Allow one decimal point, but only before the exponent part\n        //         if (char === '.' && !hasDecimal && !hasExponent) {\n        //             hasDecimal = true;\n        //             this.formattedState.hasDecimal = true;\n        //             filteredValue += char;\n        //         }\n        //         // Allow \"e\" or \"E\" for scientific notation, but only one and not as the first character\n        //         else if ((char === 'e' || char === 'E') && !hasExponent && filteredValue.length > 0) {\n        //             hasExponent = true;\n        //             filteredValue += char;\n        //         }\n        //         // Allow \"+\" or \"-\" up to two times in the expression\n        //         else if ((char === '+' || char === '-') && plusMinusCount < 2) {\n        //             plusMinusCount++; // Increment count for \"+\" and \"-\"\n        //             filteredValue += char;\n        //         }\n        //         // Allow commas\n        //         else if (char === ',') {\n        //             filteredValue += char;\n        //         }\n        //         // Allow digits (0-9) at any position\n        //         else if (/\\d/.test(char)) {\n        //             filteredValue += char;\n        //             if (hasDecimal) {\n        //                 // Check if the current filteredValue matches the regex for zeros after decimal\n        //                 const match = filteredValue.match(/(?<=\\.)0+$/);\n        //                 if (match) {\n        //                     // this.zerosAfterDecimal = match[0]; // Store the matched zeros\n        //                 }\n        //                 if (/[1-9]/.test(filteredValue)) {\n        //                     // this.zerosAfterDecimal = \"\"; // Reset to null\n        //                 }\n        //             }\n        //         }\n        //     }\n        \n        //     return filteredValue;\n        // }\n        \n\n        private setAccessibility() : void {\n            this.setAriaAttributes();\n            this.setRole();\n        }\n\n        private setRole() : void {\n            const element = this.comp.getElement();\n            element.setAttribute('role', 'spinbutton');\n            toggleAttribute(element, 'role', 'spinbutton');\n        }\n\n        private setAriaAttributes() : void {\n            const element = this.comp.getElement();\n            setAriaValueMin(element, this.optionHandler.getMin());\n            setAriaValueMax(element, this.optionHandler.getMax());\n            setAriaValueNow(element, this.adjusterModel.getValue() as  number);\n            // // setAriaDisabled(element, this.optionHandler.isDisabled());\n            // // setAriaReadOnly(element, this.optionHandler.isReadOnly());\n            setAriaInvalid(element, !this.adjusterModel.isValid());\n            setAriaRequired(element, this.optionHandler.isRequired());\n            setAriaLabel(element, this.optionHandler.getAriaLabel());\n            (this.optionHandler.getLabel()) ? setAriaLabelledBy(element, this.adjusterModel.getAriaLabelledby()) :null;\n            (this.optionHandler.getDescription()) ? setAriaDescribedBy(element, this.adjusterModel.getAriaDescribedby()):null;\n            this.optionHandler.isReadonly() ? element.setAttribute(\"readonly\",\"\") : element.removeAttribute(\"readonly\");\n            this.optionHandler.isDisabled() ? element.setAttribute(\"disabled\",\"\") : element.removeAttribute(\"disabled\");\n        }\n\n        private setValue() : void {\n            if(this.adjusterModel.isEmty()){\n                const element = this.comp.getElement() as HTMLInputElement;\n                element.value = \"\";\n                return\n            }\n            const value = this.adjusterModel.getValue();\n            if(value === null || isNaN(value)) {\n                this.setPlaceholder();\n            }\n            else if(!this.adjusterModel?.isFocused()) {\n                // Only format when not focused (on blur)\n                // While focused, let the user type freely without formatting\n                this.setFormattedValue();\n            }else if(this.adjusterModel?.isFocused() && true) {\n                this.setNonFormattedValue();\n            }\n            // When focused, don't update the input value - let user's typing control it\n\n            this.refresh()\n            this.setAccessibility();\n        \n        }\n\n        setNonFormattedValue(): void {\n            if(this.eventKey){\n                this.handleEventKey();\n                this.eventKey = ''\n                return\n            }\n            \n            if(this.adjusterModel.isEmty()){\n                const element = this.comp.getElement() as HTMLInputElement;\n                element.value = \"\";\n                return\n            }\n            \n            const value = this.adjusterModel.getValue();\n            if(value === null || isNaN(value)) {\n                return\n            }\n\n            const element = this.comp.getElement() as HTMLInputElement;\n            const dotCount = this.numberEventHandler.getDotCount();\n            const decimalSeparator = this.optionHandler.getDecimalSeparator();\n            const groupingSeparator = this.optionHandler.getThousandSeparatorChar();\n\n            // Get the raw value string from the model (without formatting)\n            let rawValue = String(value);\n            const isNegative = rawValue.startsWith('-');\n            \n            // Remove all thousand separators to ensure we show the raw value\n            // This preserves the typed state without formatting\n            if (groupingSeparator && rawValue.includes(groupingSeparator)) {\n                // Escape special regex characters in grouping separator\n                const escapedSeparator = groupingSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n                rawValue = rawValue.replace(new RegExp(escapedSeparator, 'g'), '');\n            }\n            \n            // Also remove spaces if space is used as thousand separator\n            if (groupingSeparator === ' ') {\n                rawValue = rawValue.replace(/\\s/g, '');\n            }\n            \n            // Internal decimal separator placeholder\n            const internalDecimalSeparator = 'D';\n            \n            // Check if value contains decimal separator ('.') before converting\n            const hasDecimalSeparator = rawValue.includes('.');\n            \n            // If no decimal separator exists, display as is (without thousand separators)\n            if (!hasDecimalSeparator) {\n                element.value = rawValue;\n                return;\n            }\n            \n            // Convert '.' to 'D' placeholder for processing (value comes from model with '.' format)\n            // This allows us to use 'D' string for final replacement with configured decimal separator\n            let formattedValue = rawValue.replace(/\\./g, internalDecimalSeparator);\n            \n            const valueWithoutSign = isNegative ? formattedValue.substring(1) : formattedValue;\n            \n            // Split into integer and decimal parts using internal decimal separator placeholder\n            let integerPart = valueWithoutSign.split(internalDecimalSeparator)[0];\n            let decimalPart = valueWithoutSign.split(internalDecimalSeparator).pop() || '';\n\n            // Remove any remaining separators from integer part (ensure no thousand separators)\n            // Do NOT format with thousand separators while focused - formatting only happens on blur\n            integerPart = integerPart.replace(/[^\\d]/g, '');\n\n            // Handle decimal part - DO NOT limit decimal precision while typing\n            // Decimal precision will be applied on blur via setFormattedValue()\n            if (dotCount > 0 && decimalPart) {\n                // Allow unlimited decimal digits while typing - precision will be applied on blur\n                formattedValue = (isNegative ? '-' : '') + integerPart + decimalSeparator + decimalPart;\n                this.numberEventHandler.setDotCount(0);\n                element.value = formattedValue;\n\n            } else {\n                // Reconstruct value without thousand separators\n                let tempFormattedValue = (isNegative ? '-' : '') + integerPart;\n                if (decimalPart) {\n                    tempFormattedValue += decimalSeparator + decimalPart;\n                } else if (decimalSeparator !== internalDecimalSeparator && formattedValue.includes(internalDecimalSeparator)) {\n                    // Replace internal decimal separator placeholder with custom decimal separator if it exists in the value\n                    tempFormattedValue = formattedValue.replace(internalDecimalSeparator, decimalSeparator);\n                }\n                element.value = tempFormattedValue;\n            }\n\n        }\n        \n\n        private setFormattedValue() : void {\n            this.numberEventHandler.setDotCount(0);\n\n            const element = this.comp.getElement() as HTMLInputElement;\n\n            if(this.adjusterModel.isEmty()){\n                element.value = \"\";\n                return;\n            }\n\n            const value = this.adjusterModel.getValue();\n\n            if(value === null || isNaN(value) || !Number.isFinite(value)){\n                return;\n            }\n\n            if(value && value >= Number.MAX_SAFE_INTEGER){\n                element.value = String(value);\n                return;\n            }\n            \n            // Always format the value - use formatter if available, otherwise format manually\n            if(this.formatter){\n                let formattedValue = this.formatter.formatter();\n                element.value = formattedValue;\n            } else {\n                // Fallback: format the value even if formatter doesn't exist\n                // This ensures formatting is always applied on blur\n                const formattedValue = this.formatValueFallback(value);\n                element.value = formattedValue;\n            }\n        }\n\n        private formatValueFallback(value: number): string {\n            const decimalSeparator = this.optionHandler.getDecimalSeparator();\n            const groupingSeparator = this.optionHandler.getThousandSeparatorChar();\n            const precision = this.optionHandler.getDecimalPrecision();\n            const useThousandSeparator = this.optionHandler.hasThousandsSeparator();\n            \n            // Format with precision\n            let formattedValue = precision != null \n                ? value.toFixed(precision) \n                : value.toString();\n            \n            // Apply thousand separators if needed\n            if (groupingSeparator && useThousandSeparator) {\n                const parts = formattedValue.split('.');\n                parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, groupingSeparator);\n                formattedValue = parts.join('.');\n            }\n            \n            // Replace decimal separator if needed\n            if (decimalSeparator !== '.') {\n                formattedValue = formattedValue.replace('.', decimalSeparator);\n            }\n            \n            return formattedValue;\n        }\n\n        private registerAdjusterEventHandler() {\n            const ownerState = this.getOwnerState();\n            const keyboardBehavior = this.optionHandler.isEnabledKeyboard()\n            if(ownerState.readonly || ownerState.disabled || !keyboardBehavior) {\n                return\n            }\n\n            const element = this.comp.getElement();\n\n            this.numberAdjusterRef = this.adjusterEventHandler.registerElement(element);\n\n            this.addDestroyFunc(() => {\n                this.numberAdjusterRef && this.numberAdjusterRef.destroyFunc()\n                this.numberAdjusterRef = null;\n            })\n        }\n\n        destroy(): void {\n            super.destroy();\n        }\n\n        private focusIn(event:FocusEvent):void{\n            // const element = this.comp.getElement() as HTMLInputElement;\n            this.numberEventHandler.onFocus(event);\n            this.setValue()\n                // const value  = String(this.adjusterModel.getValue());\n                // const lenght = value.length\n                // element.setSelectionRange(lenght, lenght);\n\n        }\n\n        clear(){\n            (this.comp.getElement()as HTMLInputElement).value = '';\n        }\n    }","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { NumberInputController } from \"./number-input-controller\";\nimport { NumberInputCompType } from \"./number-input.types\";\n\nconst numberInputTemplate = () => {\n    const input = document.createElement(\"input\");\n    input.type = \"text\";\n    return input;\n};\n\n\nexport class NumberInputComponent extends Component {\n\n    constructor() {\n        super();\n        this.setTemplate(numberInputTemplate())\n    }\n\n    @PostConstruct()\n    init() {\n        const comp : NumberInputCompType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new NumberInputController());\n        controller.setComp(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nfunction getSuffixUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field__suffix-element', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\nexport {\n  getSuffixUtilityClass\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME,  } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { ISuffixComponent, ISuffixUserComponentHandler } from \"./suffix-view.types\";\nimport { getSuffixUtilityClass } from \"./suffix-classes\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\n\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: '',\n\t\t\tmodifiers: [\n                // inValid && 'error'\n            ],\n\t\t},\n\t};\n    return composeClasses(slots, getSuffixUtilityClass);\n};\nclass SuffixController extends EventEmitter {\n    private component!: ISuffixComponent;\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: ISuffixUserComponentHandler;\n\n    setComp(component : ISuffixComponent) {\n        this.component = component;\n\n        this.setRendererDetails();\n        this.applyClasses();\n\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.refresh.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_FOCUS_OUT\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_VALUE_UPDATE\", this.setRendererDetails.bind(this));\n        \n\n    }\n\n\n    private applyClasses(){\n        const classes = useUtilityClasses();\n        const params = this.component.getParams();\n        const suffixValue = this.optionsHandler.getSuffixValue() || this.optionsHandler.getSuffixRenderer();\n\n        if(params){\n            const userClasses = typeof params.getUserClasses === \"function\" ? params.getUserClasses() : \"\";\n            userClasses ? classes.root = classes.root + \" \" + userClasses : \"\";\n        }\n        this.component.addClassName(classes.root);\n        !suffixValue ? this.component.getElement().style.display = \"none\" : this.component.getElement().style.display = \"flex\" ;\n\n\n    }\n\n    setRendererDetails() : void {\n           const rendererWrapper = this.createSuffixRendererWrapper();\n           const params : any    = this.createSuffixRendererParams();\n           const userDetails     = this.userComponentHandler.getSuffixRendererDetails(rendererWrapper, params) as IComponentDetails;\n           if(userDetails) {\n               this.component.setRendererDetails(userDetails, params.value);\n           }\n           this.setAccessibility();\n   \n       }\n\n    private createSuffixRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionsHandler.getSuffixRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionsHandler.getSuffixRendererParams(),\n\t\t};\n    }\n\n     private createSuffixRendererParams() {\n        return {\n\t\t\tvalue: this.optionsHandler.getSuffixValue(),\n\t\t};\n    }\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n        const suffixValue = this.optionsHandler.getSuffixValue();\n        const isElement =  suffixValue instanceof HTMLElement;\n        isElement ? element.appendChild(suffixValue)  : element.textContent = suffixValue;\n        // element.textContent = suffixValue;\n    }\n\n    createHelperTextRendererParams() {\n        return {\n            value : this.optionsHandler.getDescription()\n        }\n    }\n\n    refresh() {\n        this.setRendererDetails();\n        this.applyClasses();\n    }\n}\n\nexport {\n    SuffixController\n}","import {  clearElement, PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\nimport { ISuffixComponent } from \"./suffix-view.types\";\nimport { SuffixController } from \"./suffix-controller\";\n\n\n\n\nconst suffixTemplate = () => {\n\t// const div = document.createElement(\"div\");\n\t// div.innerHTML = `<div></div>`;\n\t// return div.firstChild as HTMLElement;\n\n\treturn document.createElement(\"div\");\n}\nexport function escapeString(toEscape?: string | null, skipHtmlChars?: boolean): string | null {\n\n\t const escapeMap: { [key: string]: string } = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;', \n\t\t};\n\n    if (toEscape == null) {\n        return null;\n    }\n\n    const stringResult = toEscape.toString().toString();\n\n    if (skipHtmlChars) {\n\t\treturn stringResult;\n\t}\n\n    return stringResult.replace(/[&<>\"']/g, (chr) => escapeMap[chr]);\n}\nclass SuffixComponent extends Component {\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\tprivate params :any\n\n\tconstructor(params:any){\n\t\tsuper()\n\t\tthis.params = params;\n\n\t}\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst template = suffixTemplate();\n\t\tthis.setTemplate(template);\n\n\t\t\n\t\tconst comp: ISuffixComponent = {\n\t\t\tsetRendererDetails: (rendererDetails: IComponentDetails, value : string) => this.setRendererDetails(rendererDetails , value),\n\t\t\taddOrRemoveCSSClass : (className : string, addOrRemove : boolean) => this.addOrRemoveCssClass(className, addOrRemove),\n            addClassName        : (className : string) => this.addOrRemoveCssClass(className, true),\n\n\t\t\tgetElement : () => this.getGui(),\n\t\t\tgetParams :()=> this.params,\n\n\t\t};\n\n\n\t\tconst controller = this.createBean(new SuffixController);\n\t\tcontroller.setComp(comp);\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className\n\t}\n     private  setRendererDetails(rendererDetails : IComponentDetails, value : string){\n\t\tif(rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.insertValueWithoutCellRenderer(value)\n\t\t}\n        \n    }\n\n\tprivate insertValueWithoutCellRenderer(value : string) {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\n\t\tconst escapedValue = value != null ? escapeString(value) : null;\n\t\tif (escapedValue != null) {\n\t\t\tparentElement.innerHTML = escapedValue;\n\t\t}\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n}\n\n\nexport { \n    SuffixComponent\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nfunction getPrefixUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field__prefix-element', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\nexport {\n  getPrefixUtilityClass\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME,  } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IPrefixComponent, IPrefixUserComponentHandler } from \"./prefix-view.types\";\nimport { getPrefixUtilityClass } from \"./prefix-classes\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: '',\n\t\t\tmodifiers: [\n                // inValid && 'error'\n            ],\n\t\t},\n\t};\n    return composeClasses(slots, getPrefixUtilityClass);\n};\nclass PrefixController extends EventEmitter {\n    private component!: IPrefixComponent;\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IPrefixUserComponentHandler;\n\n    setComp(component : IPrefixComponent) {\n        this.component = component;\n\n        this.setRendererDetails();\n        this.applyClasses();\n\n        // this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.refresh.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_FOCUS_OUT\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_VALUE_UPDATE\", this.setRendererDetails.bind(this));\n        \n\n    }\n\n\n    private applyClasses(){\n        const classes = useUtilityClasses();\n        const params = this.component.getParams();\n        const prefix = this.optionsHandler.getPrefixValue() || this.optionsHandler.getPrefixRenderer();\n\n        if(params){\n            const userClasses = typeof params.getUserClasses === \"function\" ? params.getUserClasses() : \"\";\n            userClasses ? classes.root = classes.root + \" \" + userClasses : \"\";\n        }\n        this.component.addClassName(classes.root);\n        !prefix ? this.component.getElement().style.display = \"none\" : this.component.getElement().style.display = \"flex\" ;\n\n    }\n\n    setRendererDetails() : void {\n        const rendererWrapper = this.createPrefixRendererWrapper();\n        const params : any    = this.createPrefixRendererParams();\n        const userDetails     = this.userComponentHandler.getPrefixRendererDetails(rendererWrapper, params) as IComponentDetails;\n        if(userDetails) {\n            this.component.setRendererDetails(userDetails, params.value);\n        }\n        this.setAccessibility();\n\n    }\n\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n        const prefixValue = this.optionsHandler.getPrefixValue();\n        // element.textContent = prefixValue;\n        const isElement =  prefixValue instanceof HTMLElement;\n        isElement ? element.appendChild(prefixValue)  : element.textContent = prefixValue;\n    }\n\n     private createPrefixRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionsHandler.getPrefixRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionsHandler.getPrefixRendererParams(),\n\t\t};\n    }\n\n     private createPrefixRendererParams() {\n        return {\n\t\t\tvalue: this.optionsHandler.getPrefixValue(),\n\t\t};\n    }\n\n\n    refresh() {\n        this.setRendererDetails();\n        this.applyClasses();\n    }\n}\n\nexport {\n    PrefixController\n}","import {  clearElement, PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\nimport { IPrefixComponent } from \"./prefix-view.types\";\nimport { PrefixController } from \"./prefix-controller\";\n\n\n\n\nconst prefixTemplate = () => {\n\t// const div = document.createElement(\"div\");\n\t// div.innerHTML = `<div></div>`;\n\t// return div.firstChild as HTMLElement;\n\treturn document.createElement(\"div\");\n}\n\nexport function escapeString(toEscape?: string | null, skipHtmlChars?: boolean): string | null {\n\n\t const escapeMap: { [key: string]: string } = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;', \n\t\t};\n\n    if (toEscape == null) {\n        return null;\n    }\n\n    const stringResult = toEscape.toString().toString();\n\n    if (skipHtmlChars) {\n\t\treturn stringResult;\n\t}\n\n    return stringResult.replace(/[&<>\"']/g, (chr) => escapeMap[chr]);\n}\nclass PrefixComponent extends Component {\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\tprivate params :any\n\n\tconstructor(params:any){\n\t\tsuper()\n\t\tthis.params = params;\n\n\t}\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst template = prefixTemplate();\n\t\tthis.setTemplate(template);\n\n\t\tconst comp: IPrefixComponent = {\n\t\t\tsetRendererDetails: (rendererDetails: IComponentDetails, value : string) => this.setRendererDetails(rendererDetails , value),\n\t\t\taddOrRemoveCSSClass : (className : string, addOrRemove : boolean) => this.addOrRemoveCssClass(className, addOrRemove),\n            addClassName        : (className : string) => this.addOrRemoveCssClass(className, true),\n\n\t\t\tgetElement : () => this.getGui(),\n\t\t\tgetParams :()=> this.params,\n\n\t\t};\n\n\t\tconst controller = this.createBean(new PrefixController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className\n\t}\n    private  setRendererDetails(rendererDetails : IComponentDetails, value : string){\n\t\tif(rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.insertValueWithoutCellRenderer(value)\n\t\t}\n        \n    }\n\n\tprivate insertValueWithoutCellRenderer(value : string) {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\n\t\tconst escapedValue = value != null ? escapeString(value) : null;\n\t\tif (escapedValue != null) {\n\t\t\tparentElement.innerHTML = escapedValue;\n\t\t}\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n}\n\n\nexport { \n    PrefixComponent\n}","    import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n    import { AutoWired, BEAN_NAME, setAriaDescribedBy, setAriaInvalid, setAriaLabel, setAriaLabelledBy, setAriaRequired, setAriaValueMax, setAriaValueMin, setAriaValueNow, toggleAttribute } from \"@dg/corecomponent\";\n    import { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\n    import { NumberKeyBoardShortCuts } from \"../model/number-keyboard-shortcuts\";\n    // import { IDestroyAdjuster } from \"../model/number-keyboard-shortcuts.types\";\n    import { INumberEventHandler } from \"../model/number-event-handler.types\";\n    import { IFormatter } from \"../../formatter/formatter.types\";\n    import { composeClasses } from \"@dg/utils\";\n    import { INumberOptionHandler } from \"../model/number-option-handler.types\";\n    import { INumericAdjusterModel } from \"../model/number-adjuster.types\";\nimport { RenderingNumberInputCompType } from \"./rendering-number-input.types\";\nimport { getNumberRootUtilityClass } from \"../number-utils/number-classnames-slots\";\n\n    const useUtilityClasses = (_ownerState : any) => {\n        // const { invalid, disabled, readonly, focus } = ownerState;\n        const slots = {\n            root: {\n                slot: 'input',\n                modifiers: [\n                    // invalid && 'error',\n                    // disabled && 'disabled',\n                    // readonly && 'readonly',\n                    // focus && 'focus'\n                ],\n            },\n        };\n\n        return composeClasses(slots, getNumberRootUtilityClass);\n    };\n    export class RenderingNumberInputController extends EventEmitter {\n\n        @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: INumberOptionHandler;\n        @AutoWired('NumberAdjusterHandler') adjusterModel !: INumericAdjusterModel;\n        @AutoWired(NUMBER_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER) adjusterEventHandler !: NumberKeyBoardShortCuts;\n        @AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler !: INumberEventHandler;\n        // @AutoWired(NUMBER_BEAN_NAME.NUMBER_ADJUSTER_HANDLER) numericAdjusterModel !: NumericAdjusterModel;\n        @AutoWired(NUMBER_BEAN_NAME.FORMATTER) formatter !: IFormatter;\n\n        private comp !: RenderingNumberInputCompType;\n\n        // private numberAdjusterRef : IDestroyAdjuster |null = null;\n        // private zerosAfterDecimal!:string | null;\n        private userInputValue !:string;\n        private formattedState = {\n            hasDecimal: false,\n            hasPlus: false,\n            hasMinus: false,\n            zeroAfterDecimal: false,\n        };\n\n        private nonFormattedState = {\n            hasDecimal: false,\n            hasPlus: false,\n            hasMinus: false,\n        };\n        \n        setComp(comp : RenderingNumberInputCompType ) {\n            this.comp = comp;\n\n            this.applyClasses();\n            // this.userInputValue = this.validateInput(String(this.adjusterModel.getValue()))\n            this.setValue();\n            this.setAriaAttributes();\n            this.registerEventHandler();\n            // this.registerAdjusterEventHandler();\n            this.setTabIndex(\"-1\");\n            // this.setPlaceholder();\n            // this.setRequired();\n            \n        }\n\n        private applyClasses() : void {\n            const ownerState = this.getOwnerState();\n            const classes = useUtilityClasses(ownerState);\n            this.comp.addOrRemoveCSSClass(classes.root);\n            this.comp.getElement().classList.add(\"dg-field__input\");\n            if(this.optionHandler.getType() === \"currency\" ){\n            this.comp.getElement().classList.add(\"dg-currency__root\");\n            }else if(this.optionHandler.getType() === \"percent\"){\n            this.comp.getElement().classList.add(\"dg-percentage__root\");\n            }\n            \n        }\n\n        private setPlaceholder() {\n            const placeholder = this.optionHandler?.getPlaceholder();\n            placeholder && ((this.comp.getElement() as HTMLInputElement).placeholder = placeholder);\n        }\n        \n\n        // private setRequired(){\n        //     this.optionHandler.isRequired() && ((this.comp.getElement() as HTMLInputElement).setAttribute(\"required\",\"\"))\n        // }\n\n        private setTabIndex(index : string){\n            this.comp.getElement().setAttribute(\"tabIndex\", index);\n        }\n        \n        private refresh() : void {\n            this.applyClasses();\n\n        }\n\n        private getOwnerState() {\n            return {\n                invalid : !this.adjusterModel.isValid(),\n                disabled: this.optionHandler.isDisabled(),\n                readonly: this.optionHandler.isReadonly(),\n                focus   : this.adjusterModel?.isFocused() ??  true,\n            }\n        }\n\n        private registerEventHandler() {\n            const ownerState = this.getOwnerState();\n            const element = this.comp.getElement() as HTMLInputElement;\n\n\n            if(ownerState.disabled) {\n                return \n            }\n\n            if(ownerState.readonly){\n                // this.addListener(element, 'focusin', (_event) => {\n                //     this.adjusterModel.setFocus(true)\n                //     this.refresh()\n\n                // })\n                // this.addListener(element, 'focusout', (_event) => {\n                //     this.adjusterModel.setFocus(false)\n                //     this.refresh()\n\n                // })\n            }\n            \n            this.addListener(element, 'focusin', (_event) => {\n                if(ownerState.readonly){\n                    return\n                }\n                this.dispatchEvent({type : 'FOCUS_IN'})\n                \n            });\n\n\n            // this.addListener(element, 'focusout', (event) => {\n            //     // if(ownerState.readonly){\n            //     //     return\n            //     // }\n            //     this.numberEventHandler.onFocusOut(event);\n            //     this.refresh()\n\n            // });\n\n            // this.addListener(element, 'keydown', (event) => {\n            //     if(ownerState.readonly){\n            //         return\n            //     }\n            //     this.numberEventHandler.onKeyDown(event);\n            //     this.optionHandler.onKeydown(this.adjusterModel.getValue() as number)\n                \n            //     // const value = String(this.adjusterModel.getValue())\n            //     // const length = value.length;\n            //     // const key = event.key;\n            //     // if(key === 'ArrowUp' || key === 'ArrowDown'){\n            //     //     // element.setSelectionRange(0, 0)  \n            //     // }\n\n\n                \n                \n            // });\n\n            // this.addListener(element, 'input', (event: InputEvent) => {\n            //     if (ownerState.readonly) {\n            //         return;\n            //     }\n            //     event.preventDefault();\n            //     const inputElement = event.target as HTMLInputElement;\n            //     let value = inputElement.value;\n\n            //     // Remove invalid characters and ensure single instance of . + -\n            //     const filteredValue = this.validateInput(value);\n\n            //     inputElement.value = filteredValue;\n\n            //     const formattedValue = Number(filteredValue);\n            //     this.numberEventHandler.onInput(formattedValue);\n            //     this.optionHandler.onInput(this.adjusterModel.getValue() as number);\n            // });\n            // this.addListener(element, 'input', (event: InputEvent) => {\n            //     if (ownerState.readonly) {\n            //         return;\n            //     }\n                \n            //     event.preventDefault();\n            //     const inputElement = event.target as HTMLInputElement;\n            //     let value = inputElement.value;\n                \n            //     // Validate input: ensure only valid characters (numbers, one \".\", \"+\", \"-\")\n            //     this.userInputValue = this.validateInput(value);\n                \n            //     if (this.formattedState.hasDecimal) {\n            //         const formattedValue = parseFloat( this.userInputValue ); // parseFloat retains decimals\n            //         if(!isNaN(formattedValue)) {\n            //             this.numberEventHandler.onInput(formattedValue);\n            //             this.optionHandler.onInput(this.adjusterModel.getValue() as number);\n                        \n            //         }\n            //         // this.setValue()\n                    \n\n            //     } else {\n            //         const formattedValue = parseFloat( this.userInputValue ); // parseFloat retains decimals\n            //         this.numberEventHandler.onInput(formattedValue);\n            //     }\n            \n            //     // this.optionHandler.onInput(this.adjusterModel.getValue() as number);\n            // });\n            \n\n            // this.addListener(element, 'paste', (event: ClipboardEvent) => {\n            //     if (ownerState.readonly) {\n            //         return;\n            //     }\n            //     event.preventDefault(); // Prevent default paste behavior\n            \n            //     // Get the input element and its current value\n            //     const inputElement = event.target as HTMLInputElement;\n            //     const currentValue = inputElement.value || '';\n            \n            //     // Get the caret (cursor) position\n            //     const caretPosition = inputElement.selectionStart || 0;\n            \n            //     // Get pasted content\n            //     const pasteData = event.clipboardData?.getData('text') || '';\n            \n            //     // Filter to allow numbers, e, +, -, and . for valid numeric input\n            //     const numericValue = pasteData.replace(/[^0-9eE+\\-\\.]/g, ''); // Extract valid numeric characters\n            \n            //     // Split the current value at the caret position\n            //     const newValue = \n            //         currentValue.slice(0, caretPosition) + // Text before caret\n            //         numericValue +                         // Pasted numeric content\n            //         currentValue.slice(caretPosition);     // Text after caret\n            \n            //     // Update the input field value\n            //     inputElement.value = newValue;\n            \n            //     // Dispatch the input event to handle the new numeric value\n            //     this.numberEventHandler.onInput(Number(newValue));  // Pass the new value\n            //     this.optionHandler.onInput(this.adjusterModel.getValue() as number);\n            \n            //     // Move the caret to the end of the pasted content\n            //     const newCaretPosition = caretPosition + numericValue.length;\n            //     inputElement.setSelectionRange(newCaretPosition, newCaretPosition);\n            // });\n            \n            \n            \n\n\n            // this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.setValue.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_FOCUS_IN', this.setValue.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.setValue.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.refresh.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.setValue.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.refresh.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.setValue.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_REFRESH', this.refresh.bind(this));\n            // this.addListener(this.eventHandler, 'FOCUS_IN', this.focusIn.bind(this));\n            // this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setPlaceholder.bind(this));\n            // this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setRequired.bind(this));\n            // this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setValue.bind(this));\n            // this.addListener(this.eventHandler, 'EVENT_CLEAR_VALUE', this.clear.bind(this));\n\n        }\n        // private validateInput(value: string): string {\n        //     let filteredValue = '';\n        //     let hasDecimal = false;\n        //     let hasExponent = false;\n        //     let plusMinusCount = 0; // Track the number of \"+\" and \"-\" signs\n            \n        //     for (let i = 0; i < value.length; i++) {\n        //         const char = value[i];\n                \n                \n        //         // Allow one decimal point, but only before the exponent part\n        //         if (char === '.' && !hasDecimal && !hasExponent) {\n        //             hasDecimal = true;\n        //             this.formattedState.hasDecimal = true;\n        //             filteredValue += char;\n        //         }\n        //         // Allow \"e\" or \"E\" for scientific notation, but only one and not as the first character\n        //         else if ((char === 'e' || char === 'E') && !hasExponent && filteredValue.length > 0) {\n        //             hasExponent = true;\n        //             filteredValue += char;\n        //         }\n        //         // Allow \"+\" or \"-\" up to two times in the expression\n        //         else if ((char === '+' || char === '-') && plusMinusCount < 2) {\n        //             plusMinusCount++; // Increment count for \"+\" and \"-\"\n        //             filteredValue += char;\n        //         }\n        //         // else if (char === '0' && hasDecimal) {\n        //         //     this.formattedState.zeroAfterDecimal = true; // Set the zeroAfterDecimal flag\n        //         //     filteredValue += char;\n        //         // } \n        //         // Allow digits (0-9) at any position\n        //         else if (/\\d/.test(char)) {\n        //             filteredValue += char;\n        //             if (hasDecimal) {\n        //                 // Check if the current filteredValue matches the regex for zeros after decimal\n        //                 const match = filteredValue.match(/(?<=\\.)0+$/);\n        //                 if (match) {\n        //                     // this.zerosAfterDecimal = match[0]; // Store the matched zeros\n        //                 }\n        //                 if (/[1-9]/.test(filteredValue)) {\n        //                     // this.zerosAfterDecimal = \"\"; // Reset to null\n        //                 }\n        //             }\n        //         }\n\n        //     }\n            \n        //     return filteredValue;\n        // }\n        \n        \n        // private updateformattedState(value: string) {\n        //     this.formattedState.hasDecimal = value.includes('.');\n        //     this.formattedState.hasPlus = value.includes('+');\n        //     this.formattedState.hasMinus = value.includes('-');\n        // }\n\n        // private resetformattedState() {\n        //     this.formattedState.hasDecimal = false;\n        //     this.formattedState.hasPlus = false;\n        //     this.formattedState.hasMinus = false;\n        // }\n\n        private setAccessibility() : void {\n            this.setAriaAttributes();\n            this.setRole();\n        }\n\n        private setRole() : void {\n            const element = this.comp.getElement();\n            toggleAttribute(element, 'role', 'spinbutton');\n        }\n\n        // private setClassOnFocus():void{\n\n        // }\n\n        private setAriaAttributes() : void {\n            const element = this.comp.getElement();\n            setAriaValueMin(element, this.optionHandler.getMin());\n            setAriaValueMax(element, this.optionHandler.getMax());\n            setAriaValueNow(element, this.adjusterModel.getValue() as  number);\n            // // setAriaDisabled(element, this.optionHandler.isDisabled());\n            // // setAriaReadOnly(element, this.optionHandler.isReadOnly());\n            setAriaInvalid(element, !this.adjusterModel.isValid());\n            setAriaRequired(element, this.optionHandler.isRequired());\n            setAriaLabel(element, this.optionHandler.getAriaLabel());\n            (this.optionHandler.getLabel()) ? setAriaLabelledBy(element, this.adjusterModel.getAriaLabelledby()) :null;\n            (this.optionHandler.getDescription()) ? setAriaDescribedBy(element, this.adjusterModel.getAriaDescribedby()):null;\n            this.optionHandler.isReadonly() ? element.setAttribute(\"readonly\",\"\") : element.removeAttribute(\"readonly\");\n            this.optionHandler.isDisabled() ? element.setAttribute(\"disabled\",\"\") : element.removeAttribute(\"disabled\");\n        }\n\n        private setValue() : void {\n            const value = this.adjusterModel.getValue();\n            const numValue = value == null ? null : Number(value);\n            if (numValue === null || !Number.isFinite(numValue)) {\n                this.setPlaceholder();\n            } else if(this.adjusterModel?.isFocused() && true) {\n                this.setNonFormattedValue();\n            }else {\n                this.setFormattedValue();\n            }\n\n            this.refresh()\n            this.setAccessibility();\n        \n        }\n\n        private setNonFormattedValue(): void {\n            // Use getValueAsString() to preserve decimal input during typing\n            const valueString = this.adjusterModel.getValueAsString();\n            const element = this.comp.getElement() as HTMLInputElement;\n            const numericValue = this.adjusterModel.getValueAsNumber();\n            if (!Number.isFinite(numericValue)) {\n                return;\n            }\n            let formattedValue = valueString !== null ? valueString : '';\n\n            this.userInputValue ? this.userInputValue :this.userInputValue = formattedValue;\n\n            const userInputParts = this.userInputValue.split('.');\n        \n            // Ensure that a decimal is added if `this.formattedState.hasDecimal` is true but the formatted value lacks one\n            if (this.formattedState.hasDecimal && !formattedValue.includes(\".\")) {\n                formattedValue += \".\";\n                this.formattedState.hasDecimal = false;\n            }\n            const formattedValueParts = formattedValue.split('.');\n\n            if(this.userInputValue === \"0.0\"){\n                formattedValue = \"0.0\"\n            }\n\n        \n            // If both user input and formatted value have a decimal, compare the fractional parts\n            if (userInputParts.length > 1 && formattedValueParts.length > 1) {\n                const fractionalUserInput = userInputParts[1];\n                const fractionalFormatted = formattedValueParts[1];\n        \n                // Update formattedValue only if the fractional part differs\n                if (fractionalUserInput !== fractionalFormatted) {\n                    formattedValue = formattedValueParts[0] + '.' + fractionalUserInput;\n                }\n            }\n        \n            // Add any trailing zeros after the decimal, if necessary\n            // if (this.zerosAfterDecimal) {\n            //     formattedValue += this.zerosAfterDecimal;\n            //     this.zerosAfterDecimal = \"\"; // Reset the zerosAfterDecimal flag\n            // }\n        \n            // Set the updated value to the input element\n            element.innerText = formattedValue;\n        }\n        \n\n        private setFormattedValue() : void {\n            const element = this.comp.getElement() as HTMLInputElement;\n\n            const value = this.adjusterModel.getValueAsNumber();\n            if (!Number.isFinite(value)) {\n                return;\n            }\n            const decimal = this.optionHandler.getDecimalPrecision();\n            const decimalValue = Number(value).toFixed(decimal?decimal:0);\n\n            const userFormattedValue = this.optionHandler.getFormatter(decimalValue);\n\n            if(userFormattedValue){\n                element.innerText = userFormattedValue;\n                return;\n            }\n\n            // let formattedValue = this.formatter.formatter();\n            let formattedValue = \"\";\n            if(this.formatter){\n                formattedValue = this.formatter.formatter();\n                element.innerText = formattedValue;\n                return;\n            }\n            const type = this.optionHandler.getType();\n            const position =  this.optionHandler.getSymbolPosition() \n\n            if(type === 'currency' && position === 'left'){\n                formattedValue = setSybmol(formattedValue,this.optionHandler.getCurrencySymbol() as string)\n            }\n\n            if (this.nonFormattedState.hasDecimal && !formattedValue.includes(\".\")) {\n                formattedValue += \".\";\n                this.nonFormattedState.hasDecimal = false\n                this.formattedState.hasDecimal = true\n\n            }\n\n\n            element.innerText = formattedValue;\n        }\n\n        // private registerAdjusterEventHandler() {\n        //     const ownerState = this.getOwnerState();\n        //     if(ownerState.readonly || ownerState.disabled) {\n        //         return\n        //     }\n\n        //     const element = this.comp.getElement();\n\n        //     this.numberAdjusterRef = this.adjusterEventHandler.registerElement(element);\n\n        //     this.addDestroyFunc(() => {\n        //         this.numberAdjusterRef && this.numberAdjusterRef.destroyFunc()\n        //         this.numberAdjusterRef = null;\n        //     })\n        // }\n\n        destroy(): void {\n            super.destroy();\n        }\n\n        // private focusIn(event:FocusEvent):void{\n        //     // const element = this.comp.getElement() as HTMLInputElement;\n        //     this.numberEventHandler.onFocus(event);\n        //         this.refresh()\n        //         // const value  = String(this.adjusterModel.getValue());\n        //         // const lenght = value.length\n        //         // element.setSelectionRange(lenght, lenght);\n\n        // }\n\n        clear(){\n            (this.comp.getElement()as HTMLInputElement).value = '';\n        }\n    }\n\n    function setSybmol(formattedValue: string, currencySymbol: string) {\n        const trimmed = formattedValue.trim();\n        const isNegative = trimmed.startsWith('-');\n        const core = isNegative ? trimmed.slice(1).trim() : trimmed;\n        return isNegative ? `-${currencySymbol}${core}` : `${currencySymbol}${core}`;\n    }\n    ","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport {  RenderingNumberInputController } from \"./rendering-number-input-controller\";\nimport { RenderingNumberInputCompType } from \"./rendering-number-input.types\";\n\n\nconst numberInputTemplate = () => {\n    const div = document.createElement(\"span\");\n    return div as HTMLElement;\n}\n\nexport class RenderingNumberInputComponent extends Component {\n\n    constructor() {\n        super();\n        this.setTemplate(numberInputTemplate())\n    }\n\n    @PostConstruct()\n    init() {\n        const comp : RenderingNumberInputCompType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new RenderingNumberInputController());\n        controller.setComp(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nfunction getStartAdornmentUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\nexport {\n  getStartAdornmentUtilityClass\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME,  } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IStartAdonrmentComponent, IStartAdonrmentUserComponentHandler } from \"./start-adornment-view.types\";\nimport { getStartAdornmentUtilityClass } from \"./start-adornment-classes\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input-prefix',\n\t\t\tmodifiers: [\n                // inValid && 'error'\n            ],\n\t\t},\n\t};\n    return composeClasses(slots, getStartAdornmentUtilityClass);\n};\nclass StartAdornmentController extends EventEmitter {\n    private component!: IStartAdonrmentComponent;\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IStartAdonrmentUserComponentHandler;\n\n    setComp(component : IStartAdonrmentComponent) {\n        this.component = component;\n\n        this.setRendererDetails();\n        this.applyClasses();\n\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_FOCUS_OUT\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_VALUE_UPDATE\", this.setRendererDetails.bind(this));\n        \n\n    }\n\n\n    private applyClasses(){\n        const classes = useUtilityClasses();\n        const params = this.component.getParams();\n        if(params){\n            const userClasses = typeof params.getUserClasses === \"function\" ? params.getUserClasses() : \"\";\n            userClasses ? classes.root = classes.root + \" \" + userClasses : \"\";\n        }\n        this.component.addClassName(classes.root);\n\n    }\n\n    setRendererDetails() : void {\n        let userDetails;\n        let params : any = {};\n        if(userDetails) {\n            this.component.setRendererDetails(userDetails, params.value);\n        }\n        this.setAccessibility();\n    }\n\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n        const startAdornmentValue = this.optionsHandler.getStartAdornmentValue();\n        const isElement =  startAdornmentValue instanceof HTMLElement;\n        isElement ? element.appendChild(startAdornmentValue)  : element.textContent = startAdornmentValue;\n    }\n\n    refresh() {\n        this.setRendererDetails();\n    }\n}\n\nexport {\n    StartAdornmentController\n}","import {  PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\nimport { IStartAdonrmentComponent } from \"./start-adornment-view.types\";\nimport { StartAdornmentController } from \"./start-adornment-controller\";\n\n\n\n\nconst prefixTemplate = () => {\n\tconst div = document.createElement(\"div\");\n\treturn div as HTMLElement;\n}\nclass StartAdonrmentComponent extends Component {\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\tprivate params :any\n\n\tconstructor(params:any){\n\t\tsuper()\n\t\tthis.params = params;\n\n\t}\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst template = prefixTemplate();\n\t\tthis.setTemplate(template);\n\n\t\tconst comp: IStartAdonrmentComponent = {\n\t\t\tsetRendererDetails: (rendererDetails: IComponentDetails, value ?: string) => this.setRendererDetails(rendererDetails , value),\n\t\t\taddOrRemoveCSSClass : (className : string, addOrRemove : boolean) => this.addOrRemoveCssClass(className, addOrRemove),\n            addClassName        : (className : string) => this.addOrRemoveCssClass(className, true),\n\n\t\t\tgetElement : () => this.getGui(),\n\t\t\tgetParams :()=> this.params,\n\n\t\t};\n\n\t\tconst controller = this.createBean(new StartAdornmentController);\n\t\tcontroller.setComp(comp);\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className\n\t}\n    private  setRendererDetails(_rendererDetails : IComponentDetails, _value ?: string){\n        this.destroyRenderer();\n    }\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n}\n\n\nexport { \n    StartAdonrmentComponent\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"./modules/CSSRegistry\";\n\nfunction getEndAdornmentUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('field', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\n\nexport {\n  getEndAdornmentUtilityClass\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME,  } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IEndAdonrmentComponent, IEndAdonrmentUserComponentHandler } from \"./end-adornment-view.types\";\nimport { getEndAdornmentUtilityClass } from \"./end-adornment-classes\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input-suffix',\n\t\t\tmodifiers: [\n                // inValid && 'error'\n            ],\n\t\t},\n\t};\n    return composeClasses(slots, getEndAdornmentUtilityClass);\n};\nclass EndAdornmentController extends EventEmitter {\n    private component!: IEndAdonrmentComponent;\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IEndAdonrmentUserComponentHandler;\n\n    setComp(component : IEndAdonrmentComponent) {\n        this.component = component;\n\n        this.setRendererDetails();\n        this.applyClasses();\n\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_FOCUS_OUT\", this.setRendererDetails.bind(this));\n        this.addListener(this.eventHandler, \"EVENT_VALUE_UPDATE\", this.setRendererDetails.bind(this));\n        \n\n    }\n\n\n    private applyClasses(){\n        const classes = useUtilityClasses();\n        const params = this.component.getParams();\n        if(params){\n            const userClasses = typeof params.getUserClasses === \"function\" ? params.getUserClasses() : \"\";\n            userClasses ? classes.root = classes.root + \" \" + userClasses : \"\";\n        }\n        this.component.addClassName(classes.root);\n\n    }\n\n    setRendererDetails() : void {\n        let userDetails;\n        let params : any = {};\n        if(userDetails) {\n            this.component.setRendererDetails(userDetails, params.value);\n        }\n        this.setAccessibility();\n    }\n\n    private setAccessibility() : void {\n        const element = this.component.getElement();\n        const EndAdornmentValue = this.optionsHandler.getEndAdornmentValue();\n        const isElement =  EndAdornmentValue instanceof HTMLElement;\n        isElement ? element.appendChild(EndAdornmentValue)  : element.textContent = EndAdornmentValue;\n    }\n\n    refresh() {\n        this.setRendererDetails();\n    }\n}\n\nexport {\n    EndAdornmentController\n}","import {  PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../utility/component-detail.types\";\nimport { IEndAdonrmentComponent } from \"./end-adornment-view.types\";\nimport { EndAdornmentController } from \"./end-adornment-controller\";\n\n\n\n\nconst prefixTemplate = () => {\n\tconst div = document.createElement(\"div\");\n\treturn div as HTMLElement;\n}\nclass EndAdonrmentComponent extends Component {\n\n\tprivate renderer       : any;\n\tprivate rendererElement: any;\n\tprivate params :any\n\n\tconstructor(params:any){\n\t\tsuper()\n\t\tthis.params = params;\n\n\t}\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst template = prefixTemplate();\n\t\tthis.setTemplate(template);\n\n\t\tconst comp: IEndAdonrmentComponent = {\n\t\t\tsetRendererDetails: (rendererDetails: IComponentDetails, value ?: string) => this.setRendererDetails(rendererDetails , value),\n\t\t\taddOrRemoveCSSClass : (className : string, addOrRemove : boolean) => this.addOrRemoveCssClass(className, addOrRemove),\n            addClassName        : (className : string) => this.addOrRemoveCssClass(className, true),\n\n\t\t\tgetElement : () => this.getGui(),\n\t\t\tgetParams :()=> this.params,\n\n\t\t};\n\n\t\tconst controller = this.createBean(new EndAdornmentController);\n\t\tcontroller.setComp(comp);\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className\n\t}\n    private  setRendererDetails(_rendererDetails : IComponentDetails, _value ?: string){\n        this.destroyRenderer();\n    }\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n}\n\n\nexport { \n    EndAdonrmentComponent\n}","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { NumberTooltipHandlerType } from \"./number-tooltip-handler.types\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Tooltip } from \"../../../../Tooltip/src/Tooltip\";\nimport { NumberControllerHandler } from \"./number-controller\";\n\n@Bean(NUMBER_BEAN_NAME.NUMBER_TOOLTIP_HANDLER)\nexport class NumberTooltipHandler extends EventEmitter implements NumberTooltipHandlerType {\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_CONTROLLER_HANDLER) controllerHandler!: NumberControllerHandler;\n    private tooltipComponent: any;\n    private tooltipTimeoutId: number | null = null;\n    private openState: boolean = false;\n\n    createToolTip(Component: HTMLElement): void {\n        if (this.tooltipComponent) {\n            this.destroyTooltip();\n\n        }\n        const tooolTipConfiguration = {\n            popupParent: this.optionsHandler.getTooltipAppendto(),\n            tooltipValue: this.optionsHandler.getTooltipMessage(),\n            shouldShowTooltip: () => true,\n            shouldAttachEvents: false,\n            hideTooltip: false,\n            position: this.optionsHandler.getTooltipPosition(),\n            gapX: 7,\n            gapY: 2,\n            arrow: true\n        }\n\n        this.tooltipComponent = new Tooltip(Component, tooolTipConfiguration);\n    }\n\n    openToolTip(): void {\n        if (this.openState) {\n            this.destroyTooltip();\n            this.openState = false;\n        }\n\n        if (!this.tooltipComponent) {\n            return;\n        }\n\n        this.tooltipComponent.api.open();\n        this.openState = true;\n        const tooltipDelay = this.optionsHandler.getTooltipHideDelay();\n\n        if (this.tooltipTimeoutId) {\n            clearTimeout(this.tooltipTimeoutId);\n            this.tooltipTimeoutId = null;\n        }\n\n        this.tooltipTimeoutId = window.setTimeout(() => {\n            this.destroyTooltip();\n            this.tooltipTimeoutId = null;\n        }, tooltipDelay);\n    }\n\n    destroyTooltip(): void {\n        if (!this.tooltipComponent) {\n            return;\n        }\n\n        this.tooltipComponent.api.destroy();\n        this.openState = false;\n        this.tooltipComponent = null;\n        if (this.tooltipTimeoutId) {\n            clearTimeout(this.tooltipTimeoutId);\n            this.tooltipTimeoutId = null;\n        }\n    }\n}","\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { ComponentMetadataProvider } from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport { UserComponentRegistry } from '@dg/corecomponent/UserComponentRegistry.js';\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { NumberAPI } from \"./core/model/number-api\";\nimport { NumberOptionHandler } from \"./core/model/number-option-handler\";\nimport { NumberUserComponentHandler } from \"./core/model/number-user-component-handler\";\nimport { INumberConfiguration } from \"./number-configuration.types\";\nimport { NumberEventHandler } from \"./core/model/number-event-handler\";\nimport { IModule } from '../../core/modules.types';\nimport { NumericAdjusterModel } from \"./core/model/number-adjuster\";\nimport { ModuleRegistry } from \"./modules/ModuleRegistry\";\nimport { NumberKeyBoardShortCuts } from \"./core/model/number-keyboard-shortcuts\";\nimport { Label } from \"../../label/label-view\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { NumberStateManager } from \"./core/model/number-state-manager\";\nimport { NumberButtonComponent } from \"./core/number-button/number-button-view\";\nimport { ButtonRenderer } from \"./core/user-component/buttonRenderer\";\nimport { SpinButtonComponent } from \"./core/spin-button/spin-button-view\";\nimport { NumberInputComponent } from \"./core/number-input/number-input-view\";\nimport { NumberControllerHandler } from \"./core/model/number-controller\";\nimport { PropertyName } from \"../../button/src/model/button-user-component-handler\";\nimport { SuffixComponent } from \"../../Suffix/suffix-view\";\nimport { PrefixComponent } from \"../../Prefix/prefix-view\";\nimport { RenderingNumberInputComponent } from \"./core/rendering-number-input/rendering-number-input-view\";\nimport { StartAdonrmentComponent } from \"../../addOnBefore/start-adornment-view\";\nimport { EndAdonrmentComponent } from \"../../addOnAfter/end-adornment-view\";\nimport { NumberTooltipHandler } from \"./core/model/number-tooltip-handler\";\nimport { ErrorComponent } from \"../../error/error-view\";\n\nexport interface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IModule[];\n}\n\n\nlet nextInstanceId = 1;\n\n\nexport class NumberCoreComponent {\n\tinitializeNumber( configuration: INumberConfiguration, params: IUserParams = {}, createUI: CallableFunction, ): void {\n\t\t\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n\t\tconst registeredModules = this.getRegisteredModules(params, instanceID);\n\n\t\tconst beanClasses = this.CreateBeanClasses(registeredModules, configuration);\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n        // Model classes\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n\t\tthis.registerCoreComponent(context);\n        // Default user compoent registry\n\t\tthis.registerDefaultUserComponent(context);\n        // Optional Dependency Module\n\t\tthis.registerModuleUserComponents(context, registeredModules);\n        // \n\t\tthis.registerStackComponents(context, registeredModules);\n\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate CreateBeanClasses(registeredModules : IModule[], _configuration : INumberConfiguration): Set<any> {\n\t\t// const formattedNumberModules = this.extractModuleEntity(registeredModules, (module : IModule) => module.modelType != configuration.format)\n\t\tlet beanList = [\n\t\t\t//default framework\n\t\t\tComponentsRegistry, // component registry\n\t\t\tUserComponentRegistry, // user component registry\n\t\t\tEventHandler, // pub sub model\n\t\t\tNumberOptionHandler, //configuation\n\t\t\tComponentMetadataProvider, // framework component metadata provider\n\t\t\tNumberUserComponentHandler, // framework custom rendering\n\n\t\t\t//number component model layer\n\t\t\tNumberAPI, //api part\n\t\t\tNumberEventHandler, // callback for custom layout\n\t\t\tNumberKeyBoardShortCuts, //\n\t\t\tNumberStateManager, // helper, label\n\n\t\t\tNumericAdjusterModel, // data part\n\t\t\tNumberControllerHandler,\n\t\t\tNumberTooltipHandler\n\t\t];\n\n \t\tconst moduleBeans = this.extractModuleEntity(registeredModules, (module : IModule) => module.beans ? module.beans : []);\n        beanList.push(...moduleBeans);\n\n\t\t// if(formattedNumberModules) {\n\t\t// \tbeanList.push(...formattedNumberModules);\n\t\t// }\n\n\t\treturn new Set(beanList);\n\t}\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID : string; } {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n            [PropertyName.BUTTON_RENDERER] : ButtonRenderer\n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\tprivate registerModuleUserComponents(context: Context, registeredModules: IModule[]): void {\n        const moduleUserComps: { componentName: string, componentClass: any; }[] = this.extractModuleEntity(registeredModules, (module : IModule) => module.userComponents ? module.userComponents : []);\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY);\n        moduleUserComps.forEach(compMeta => {\n            userComponentRegistry.registerDefaultComponent(compMeta.componentName, compMeta.componentClass);\n        });\n    }\n\n\tprivate registerStackComponents(context: Context, registeredModules: IModule[]): void {\n        const Components = this.createComponentsList(registeredModules);\n\t\tconst componentRegistry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY);\n        componentRegistry.setupComponents(Components);\n    }\n\n\tprivate extractModuleEntity(moduleEntities: any[], extractor: (module: any) => any) {\n        return [].concat(...moduleEntities.map(extractor));\n    }\n\n\tprivate createComponentsList(registeredModules: IModule[]): any[] {\n\t\tlet components: ComponentMeta[] = []\n\n        const moduleComps = this.extractModuleEntity(registeredModules, (module : IModule) => module.components ? module.components : []);\n\n        components = components.concat(moduleComps);\n\n        return components;\n\t}\n\n\tprivate getRegisteredModules( params: IUserParams | undefined, instanceID: string, ): IModule[] {\n\t\tconst passedViaConstructor: IModule[] | undefined | null = params ? params.modules : null;\n\t\tconst registered = ModuleRegistry.__getRegisteredModules(instanceID);\n\n\t\tconst allModules: IModule[] = [];\n\t\tconst mapNames: { [name: string]: boolean } = {};\n\n\t\tconst addModule = (mod: IModule, instanceID: string | undefined) => {\n\t\t\tconst addIndividualModule = (currentModule: IModule) => {\n\t\t\t\tif (!mapNames[currentModule.moduleName]) {\n\t\t\t\t\tmapNames[currentModule.moduleName] = true;\n\t\t\t\t\tallModules.push(currentModule);\n\t\t\t\t\tModuleRegistry.__register(currentModule, instanceID);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\taddIndividualModule(mod);\n\t\t\tif (mod.dependantModules) {\n\t\t\t\tmod.dependantModules.forEach((m) => addModule(m, instanceID));\n\t\t\t}\n\t\t};\n\n\t\tif (passedViaConstructor) {\n\t\t\tpassedViaConstructor.forEach((m) => addModule(m, instanceID));\n\t\t}\n\n\t\tif (registered) {\n\t\t\tregistered.forEach((module) =>\n\t\t\t\taddModule( module, undefined),\n\t\t\t);\n\t\t}\n\n\t\treturn allModules;\n\t}\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'number-label',\n\t\t\tcomponentClass: Label\n\t\t},\n\t\t{\n            componentName: 'number-helper-text',\n\t\t\tcomponentClass: DescriptionComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'number-increment',\n\t\t\tcomponentClass: NumberButtonComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'number-decrement',\n\t\t\tcomponentClass: NumberButtonComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'number-spin-button',\n\t\t\tcomponentClass: SpinButtonComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'number-input',\n\t\t\tcomponentClass: NumberInputComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'number-prefix',\n\t\t\tcomponentClass: PrefixComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'input-prefix',\n\t\t\tcomponentClass: StartAdonrmentComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'input-suffix',\n\t\t\tcomponentClass: EndAdonrmentComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'number-suffix',\n\t\t\tcomponentClass: SuffixComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :\"number-rendering-element\",\n\t\t\tcomponentClass :RenderingNumberInputComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : \"number-error\",\n\t\t\tcomponentClass : ErrorComponent\n\t\t}\n\t\t\n    ];\n\n\treturn components;\n}\n\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumberOptionHandler } from \"../model/number-option-handler.types\";\nimport { INumberEventHandler } from \"../model/number-event-handler.types\";\nimport { NumberKeyBoardShortCuts } from \"../model/number-keyboard-shortcuts\";\nimport { NumberRootCompType } from \"./number-root.types\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { NumberControllerHandler } from \"../model/number-controller\";\nimport { INumericAdjusterModel } from \"../model/number-adjuster.types\";\nimport { useUtilityClasses } from \"../number-utils/number-classnames-slots\";\nimport { NumberTooltipHandlerType } from \"../model/number-tooltip-handler.types\";\nimport { EVENT_NAME } from \"../../constants/event-name\";\nimport { subElement } from \"../model/number-api.types\";\nimport type { NumberStateManager } from \"../model/number-state-manager\";\n\n\n\n\nexport class NumberController extends AbstractController<NumberRootCompType> {\n    \n    // Model should only be autowired for controller\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !               : INumberOptionHandler;\n\t@AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler !       : INumberEventHandler;\n\t@AutoWired(NUMBER_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER) adjusterEventHandler !: NumberKeyBoardShortCuts;\n\t@AutoWired('NumberAdjusterHandler') adjusterModel !                            : INumericAdjusterModel;\n\t@AutoWired(NUMBER_BEAN_NAME.NUMBER_CONTROLLER_HANDLER) controllerHandler !   : NumberControllerHandler;\n\t@AutoWired(NUMBER_BEAN_NAME.NUMBER_TOOLTIP_HANDLER)\n\tnumberTooltipHandler!: NumberTooltipHandlerType;\n\n\t@AutoWired('stateManager') private stateManager !: NumberStateManager;\n\n\tprivate    wrapperFocused !                                                  : boolean;\n\tprefixComponent!                                                  : HTMLElement | null;\n\tsuffixComponent!                                                  : HTMLElement| null;\n\n    init(){\n        this.registerEvents();\n\t\tthis.applyClassNames();\n\t\tthis.addListeners();\n\n\t\tthis.controllerHandler.registerNumber(this);\n\t\tthis.prefixComponent = this.component?.getPrefixElement() ? this.component?.getPrefixElement() : null;\n\t\tthis.suffixComponent = this.component?.getSuffixElement() ? this.component?.getSuffixElement() : null;\n    }\n\n\tprivate addListeners(){\n\t\tthis.component?.getGui().addEventListener('focusin', (_event)=>{\n\t\t\tconst ownerState = this.getOwnerState();\n\t\t\tthis.wrapperFocused = true;\n\t\t\t\n\t\t\tif( ownerState.readonly || ownerState.disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t\t// this.onFocusIn(event)\n\t\t});\n\t\t\n\t\tthis.component?.getGui().addEventListener('mousedown', (_event)=>{\n\t\t\tconst ownerState = this.getOwnerState();\n\t\t\tthis.wrapperFocused = true;\n\n\n\t\t\tif( ownerState.readonly || ownerState.disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.refresh();\n\n\t\t\t// this.onFocusIn(event)\n\t\t\t\n\t\t});\n\t\tthis.component?.getGui().addEventListener('focusout', (event)=>{\n\t\t\tconst ownerState = this.getOwnerState();\n\t\t\tthis.wrapperFocused = false;\n\n\t\t\tif( ownerState.readonly || ownerState.disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t\tthis.numberEventHandler.onFocusOut(event);\n\n\n\t\t\t// this.onFocusIn(event)\n\t\t});\n\t}\n\n\n    private registerEvents() {\n        this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_RERENDER', this.rerender.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_BLUR', this.blur.bind(this));\n\t\t// this.addListener(this.eventHandler, 'EVENT_SET_PREFIX', this.setPrefix.bind(this));\n\t\t// this.addListener(this.eventHandler, 'EVENT_SET_SUFFIX', this.setSuffix.bind(this));\n\t\tthis.addListener(this.eventHandler, EVENT_NAME.SHOW_TOOLTIP, this.enableTooltip.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n\t\tthis.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.refresh.bind(this));\n\n    }\n\n\tprivate addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.component!.getGui().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n\n\tprivate refresh(){\n\t\tthis.applyClassNames();\n\t}\n\n\tprivate applyClassNames(){\n\t\tconst ownerState = this.getOwnerState();\n\t\t\tif(this.wrapperFocused === true){\n\t\t\t\townerState.focus = true;\n\t\t\t}\n\t\tconst classes = useUtilityClasses('root');\n\t\tthis.component?.addOrRemoveCssClass(classes.root);\n\t\tthis.component?.getGui().classList.add(\"dg-field__root\");\n\t\tconst userClassName = this.optionHandler.getClassName();\n\t\tif(userClassName){\n\t\t\tif(typeof userClassName != 'string' ){\n\t\t\t\tfor(const className of userClassName){\n\t\t\t\tthis.component?.getGui().classList.add(className);\n\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.component?.getGui().classList.add(userClassName);\n\t\t\t}\n\t\t}\n\t\tthis.component?.getGui().classList.add(\"dg-field__root\");\n\t\townerState.disabled &&  this.component?.getGui().classList.add(\"dg-input__status--disabled\")\n\t\townerState.readonly &&  this.component?.getGui().classList.add(\"dg-input__status--readonly\")\n\t\townerState.focus && this.component?.getGui().classList.add(\"dg-input__status--focus\")\n\t\tthis.addErrorClassName();\n\t\tthis.addPrefixAndSuffixClassNames();\n\t}\n\n\tprivate addPrefixAndSuffixClassNames(){\n\t\tconst prefix      = this.optionHandler.getPrefixValue() || this.optionHandler.getPrefixRenderer();\n\t\tconst suffix      = this.optionHandler.getSuffixValue() || this.optionHandler.getSuffixRenderer();\n\t\tconst inputPrefix = this.optionHandler.getStartAdornmentValue();\n\t\tconst inputSuffix = this.optionHandler.getEndAdornmentValue();\n\t\tif(prefix){\n\t\t\tthis.component?.getGui().classList.add(\"dg-field__prefix--active\");\n\t\t}\n\t\tif(suffix){\n\t\t\tthis.component?.getGui().classList.add(\"dg-field__suffix--active\");\n\t\t}\n\n\t\tif(inputPrefix){\n\t\t\tthis.component?.getGui().classList.add(\"dg-field__input-prefix--active\");\n\t\t}\n\t\tif(inputSuffix){\n\t\t\tthis.component?.getGui().classList.add(\"dg-field__input-suffix--active\");\n\t\t}\n\t}\n\n\tprivate getOwnerState() {\n\t\tconst showErrorState = this.optionHandler.showErrorState();\n\t\treturn {\n\t\t\tinvalid : showErrorState ? !this.adjusterModel?.isValid(): false,\n\t\t\tfocus   : this.adjusterModel.isFocused(),\n\t\t\tdisabled: this.optionHandler.isDisabled(),\n\t\t\treadonly: this.optionHandler.isReadonly(),\n\t\t\tsize    : this.optionHandler.getSize(),\n\t\t}\n\t}\n\n    private onFocusIn(_event : FocusEvent) : void {\n\t\t// this.numberEventHandler.onFocus(event);\n\t\tthis.component?.getInputElement().focus();\n\n\t}\n\n\tprivate onFocusOut(event : FocusEvent) : void {\n\t\tthis.numberEventHandler.onFocusOut(event);\n\n\t}\n\n\tprivate onInput(_value : number) : void {\n\t\t// this.numberEventHandler.onInput(value);\n\t}\n\n\tprivate onKeyDown(event : KeyboardEvent) : void {\n\t\tthis.numberEventHandler.onKeyDown(event);\n\n\t}\n\n    getProperty() : any {\n        return {\n\t\t\tonInput                : this.onInput.bind(this),\n\t\t\tonKeyDown              : this.onKeyDown.bind(this),\n\t\t\tonFocusIn              : this.onFocusIn.bind(this),\n\t\t\tonFocusOut             : this.onFocusOut.bind(this),\n\t\t\tisvalid                : this.adjusterModel.isValid(),\n\t\t\tfocused                : this.adjusterModel.isFocused(),\n\t\t\tlabel                  : this.optionHandler.getLabel(),\n\t\t\tdescription            : this.optionHandler.getDescription() ||this.optionHandler.getDescriptionRenderer(),\n\t\t\tgenerateEmptyDom       : this.optionHandler.shouldGenerateEmptyDom(),\n\t\t\tprefix                 : this.optionHandler.getPrefixValue() || this.optionHandler.getPrefixRenderer(),\n\t\t\tsuffix                 : this.optionHandler.getSuffixValue() || this.optionHandler.getSuffixRenderer(),\n\t\t\tinputPrefix            : this.optionHandler.getStartAdornmentValue(),\n\t\t\tinputSuffix            : this.optionHandler.getEndAdornmentValue(),\n\t\t\thelperText             : this.optionHandler.getDescription(),\n\t\t\thtmlFor                : 'number',\n\t\t\tid                     : 'number',\n\t\t\trequired               : this.optionHandler.isRequired(),\n\t\t\treadOnly               : this.optionHandler.isReadonly(),\n\t\t\tdisabled               : this.optionHandler.isDisabled(),\n\t\t\tonIncrement            : (event:any) => this.numberEventHandler.onIncrement(event),\n\t\t\tonDecrement            : (event: any) => this.numberEventHandler.onDecrement(event),\n\t\t\tincrementDisabled      : this.adjusterModel.isIncrementDisabled(),\n\t\t\tdecrementDisabled      : this.adjusterModel.isDecrementDisabled(),\n\t\t\tspinButton             : this.optionHandler.getSpinButton(),\n\t\t\tregisterAdjusterElement: (element : HTMLElement) => this.adjusterEventHandler.registerElement(element),\n\t\t\tgetTemplate            : (props: any) => this.optionHandler.getTemplate(props),\n\t\t\terror                  : this.optionsHandler.showErrorState()\n\t\t};\n    }\n\n\tgetParamsProperty() {\n        return {\n\t\t\tincrementButton: {\n                getIcon          : () =>  this.optionsHandler.getIncrementButtonSVGIconId(),\n                getRenderer      : () => this.optionsHandler.getIncrementButtonRenderer(),\n                getRendererParams: () => this.optionsHandler. getIncrementButtonRendererParams(),\n                callback         : (event: any) =>  !this.adjusterModel.isIncrementDisabled() && this.numberEventHandler.onIncrement(event),\n                isDisabled       : () => this.adjusterModel.isIncrementDisabled(),\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole          : () => 'increment',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\t// getClasses : ()=> [useUtilityClasses(\"spinbutton\").root, useUtilityClasses(\"spin-upbtn\").root],\n\t\t\t\tgetClasses : ()=> [useUtilityClasses(\"spinbutton\").root, useUtilityClasses(\"spin-upbtn\").root],\n\t\t\t\tgetTabindex : ()=> \"-1\"\n\t\t\t},\n\t\t\tdecrementButton: {\n\t\t\t\tgetIcon          : () =>  this.optionsHandler.getDecrementButtonSVGIconId(),\n\t\t\t\tgetRenderer      : () => this.optionsHandler.getDecrementButtonRenderer(),\n\t\t\t\tgetRendererParams: () => this.optionsHandler.getDecrementButtonRendererParams(),\n\t\t\t\tcallback         : (event : any) =>  !this.adjusterModel.isDecrementDisabled() &&  this.numberEventHandler.onDecrement(event),\n\t\t\t\tisDisabled       : () => this.adjusterModel.isDecrementDisabled(),\n\t\t\t\tisReadonly       : () => this.optionHandler.isReadonly(),\n\t\t\t\tgetRole          : () => 'decrement',\n\t\t\t\tgetSpinButton    : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses       : ()=> [ \"dg-number__spinbutton\", \"dg-number__spin-downbtn\"],\n\t\t\t\tgetTabindex      : ()=> \"-1\"\n\n\t\t\t},\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> useUtilityClasses('label').root,\n\t\t\t\tgetLabelTitleClasses :()=> useUtilityClasses('label-title').root\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  useUtilityClasses('validation-message').root,\n\t\t\t\tgetDescriptionClasses :()=> useUtilityClasses('description').root\n\t\t\t},\n\t\t\tsuffix : {\n\t\t\t\tgetUserClasses : ()=> useUtilityClasses('suffix-elem').root\n\t\t\t},\n\t\t\tprefix : {\n\t\t\t\tgetUserClasses : ()=> useUtilityClasses('prefix-elem').root\n\t\t\t},\n\t\t\tinputSuffix:{\n\t\t\t\tgetUserClasses : ()=> useUtilityClasses('input-suffix').root\n\t\t\t},\n\t\t\tinputPrefix:{\n\t\t\t\tgetUserClasses : ()=>useUtilityClasses('input-prefix').root \n\t\t\t}\n\t\t};\n    }\n\n\tgetElement() : HTMLElement |  undefined {\n\t\treturn this.component?.getGui();\n\t}\n\n\tfocus(): void{\n\t\tthis.component?.getInputElement().focus();\n\t\tthis.dispatchEvent({type : 'FOCUS_IN'});\n\t\tconst inputElement = this.component?.getInputElement() as HTMLInputElement;\n\n\t\tif(inputElement) {\n\t\t\tconst length = inputElement.value.length;\n    \t\tinputElement.setSelectionRange(length, length);\n\t\t}\n\t\t\n\t}\n\n\tblur(): void{\n        this.component?.getInputElement().blur();\n\t\t// this.component?.getGui().blur();\n\t\tthis.wrapperFocused = false;\n\t\tthis.refresh();\n\n    }\n\t \n\tdestroy():void{\n\n\t\t// this.component?.getGui().remove();\n\t\t// super.destroy();\n\t\t\n\t}\n\n\tgetshouldGenerateEmptyDom(){\n\t\tconst generateEmptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\tconst label = this.optionHandler.getLabel();\n\t\tconst description = this.optionHandler.getDescription();\n\t\tif( label || description){\n\t\t\treturn true\n\t\t}else if(generateEmptyDom){\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\trerender():void{\n\t\tthis.component?.rerender()\n\t\tthis.refresh();\n\n\n\t}\n\n\t// setPrefix(params:any){\n\t// \tthis.prefixComponent && this.prefixComponent.remove();\n\t// \tif(!params.options.prefix){\n\t// \t\treturn\n\n\t// \t}\n\t// \tconst container = this.component?.getContainerElement();\n\t// \t this.prefixComponent = document.createElement('div');\n\t// \tthis.prefixComponent.classList.add(\"dg-number__prefix-elem\");\n\t// \tthis.prefixComponent.classList.add(\"dg-prefix-elem\");\n\t// \tthis.prefixComponent.setAttribute(\"ref\",\"prefix\")\n\n\t// \tthis.prefixComponent.innerHTML = params.options.prefix;\n\t// \tcontainer?.insertBefore(this.prefixComponent, container.firstChild);\n\n\t// }\n\t// setSuffix(params:any){\n\t// \tthis.suffixComponent && this.suffixComponent.remove();\n\t// \tif(!params.options.suffix){\n\t// \t\treturn\n\t// \t}\n\t// \tconst container = this.component?.getContainerElement();\n\t// \tthis.suffixComponent = document.createElement('div');\n\t// \tthis.suffixComponent.classList.add(\"dg-number__suffix-elem\");\n\t// \tthis.suffixComponent.classList.add(\"dg-suffix-elem\");\n\t// \tthis.suffixComponent.innerHTML = params.options.suffix;\n\t// \tthis.suffixComponent.setAttribute(\"ref\",\"suffix\")\n\t// \tcontainer?.appendChild(this.suffixComponent);\n\t// }\n\n\thide(subElement: subElement[]): void {\n\t\tif (!this.component?.getGui()) {\n\t\t\tconsole.warn('Component GUI not available');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subElement || subElement.length === 0) {\n\t\t\t// Hide the entire component\n\t\t\tconst elem = this.component.getGui();\n\t\t\telem.style.display = \"none\";\n\t\t\treturn;\n\t\t}\n\n\t\t// Hide specific elements\n\t\tsubElement.forEach(element => {\n\t\t\tlet elem: HTMLElement | null = null;\n\n\t\t\tswitch (element) {\n\t\t\t\tcase 'suffix':\n\t\t\t\t\telem = this.component?.getSuffixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prefix':\n\t\t\t\t\telem = this.component?.getPrefixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'label':\n\t\t\t\t\telem = this.component?.getLabelElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'description':\n\t\t\t\t\telem = this.component?.getDescriptionElement();\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn(`Unknown element type to hide: ${element}`);\n\t\t\t}\n\n\t\t\tif (elem) {\n\t\t\t\telem.style.display = \"none\";\n\t\t\t}\n\t\t});\n\t}\n\n\tshow(subElement: subElement[]): void {\n\t\tif (!this.component?.getGui()) {\n\t\t\tconsole.warn('Component GUI not available');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subElement || subElement.length === 0) {\n\t\t\t// Hide the entire component\n\t\t\tconst elem = this.component.getGui();\n\t\t\telem.style.display = \"block\";\n\t\t\treturn;\n\t\t}\n\n\t\t// Hide specific elements\n\t\tsubElement.forEach(element => {\n\t\t\tlet elem: HTMLElement | null = null;\n\n\t\t\tswitch (element) {\n\t\t\t\tcase 'suffix':\n\t\t\t\t\telem = this.component?.getSuffixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prefix':\n\t\t\t\t\telem = this.component?.getPrefixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'label':\n\t\t\t\t\telem = this.component?.getLabelElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'description':\n\t\t\t\t\telem = this.component?.getDescriptionElement();\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn(`Unknown element type to hide: ${element}`);\n\t\t\t}\n\n\t\t\tif (elem) {\n\t\t\t\tif(element === 'label' || element === 'description'){\n\t\t\t\t\t\telem.style.display = \"block\";\n\t\t\t\t}else{\n\t\t\t\telem.style.display = \"flex\";\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t\n\n\n\tenableTooltip(): void {\n\t\tconst shouldShowTooltip =  this.optionHandler.shouldShowTooltip()\n\t\tif(!shouldShowTooltip){\n\t\t\treturn;\n\t\t}\n\t\tthis.numberTooltipHandler.createToolTip(this.component?.getGui() as HTMLElement);\n\t\tthis.numberTooltipHandler.openToolTip();\n\n\t}\n\n}\n\n\n","import { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { NumberController } from './number-root-controller';\nimport { composeClasses } from '@dg/utils';\nimport { BasicTemplateWithoutButtons, spinButtonTogetherTemplate, splitButtonTemplate } from '../number-utils/number-template';\nimport { getNumberRootUtilityClass } from '../number-utils/number-classnames-slots';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'container',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\treturn composeClasses(slots, getNumberRootUtilityClass)\n}\n\n\n\nfunction RootTemplate(props : any): HTMLElement {\n\tconst { spinButton, getTemplate,prefix, suffix, generateEmptyDom, label, description, error, inputPrefix, inputSuffix } = props;\n\tconst classes = useUtilityClasses();\n\tconst customTemplate = getTemplate(classes);\n\tconst template = customTemplate ? customTemplate : (spinButton === \"together\" ? spinButtonTogetherTemplate(prefix, suffix, generateEmptyDom, label, description, error):(spinButton === \"split\" ? splitButtonTemplate( prefix, suffix, generateEmptyDom,  label, description, error) : BasicTemplateWithoutButtons( prefix, suffix, generateEmptyDom, label, description, error, inputPrefix, inputSuffix)))\n\treturn template;\n}\n\nexport class NumberRootComponent extends Component {\n\n\t@queryAssignedNodes('numberInputRef') numberInputElement !: any;\n\t@queryAssignedNodes('container') containerElement \t\t !: any;\n\t@queryAssignedNodes('prefix') prefixElement \t\t\t !: any;\n\t@queryAssignedNodes('suffix') suffixElement \t\t\t !: any;\n\t@queryAssignedNodes('label') LabelElement \t\t\t !: any;\n\t@queryAssignedNodes('description') descriptionElement \t\t\t !: any;\n\n\tprivate appendTo: HTMLElement | undefined ;\n\tconstructor(appendTo: HTMLElement | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: any = {\n\t\t\tgetGui             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tgetInputElement : ()=> this.getInputElement(),\n\t\t\tgetSuffixElement : ()=> this.getSuffixElement(),\n\t\t\tgetPrefixElement : ()=> this.getPrefixElement(),\n\t\t\tgetLabelElement : ()=> this.getLabelElement(),\n\t\t\tgetDescriptionElement : ()=> this.getDescriptionElement(),\n\t\t\trerender : () => this.rerenderComponent(controller),\n\t\t\tgetContainerElement : ()=> this.getContainerElement(),\n\t\t};\n\n        // change createMangedBean to createWire\n\t\tconst controller = this.createManagedBean(new NumberController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = RootTemplate(props);\n\n\t\tconst properties = controller.getParamsProperty();\n\t\t\n\t\tthis.setTemplate(template, {\n\t\t\tincrementButton: properties.incrementButton,\n\t\t\tdecrementButton: properties.decrementButton,\n\t\t\tspinButton     : properties,\n\t\t\tlabel          : properties.label,\n\t\t\tdescription    : properties.description,\n\t\t\tsuffix         : properties.suffix,\n\t\t\tprefix         : properties.prefix,\n\t\t\tinputSuffix    : properties.inputSuffix,\n\t\t\tinputPrefix    : properties.inputPrefix,\n\t\t\terror          : properties.description\n\t\t});\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo  = undefined;\n\t\t});\n\t}\n\n\t getSuffixElement():any{\n\t\treturn this.suffixElement ? this.suffixElement.eGui  : null; \n\t}\n\n\t getLabelElement():any{\n\t\treturn this.LabelElement ? this.LabelElement.eGui  : null\n\t}\n\n\t getDescriptionElement():any{\n\t\treturn this.descriptionElement ? this.descriptionElement.eGui : null;\n\t}\n\n\t getPrefixElement():any{\n\t\treturn this.prefixElement ? this.prefixElement.eGui : null\n\t}\n\n\n\tgetInputElement(): HTMLElement {\n\t\treturn this.numberInputElement.eGui;\n\t}\n\tgetContainerElement(): HTMLElement {\n\t\treturn this.containerElement;\n\t}\n\trerenderComponent(controller: NumberController): void {\n\t\tcontroller.destroy()\n\t\tconst props = controller.getProperty();\n\t\tconst properties = controller.getParamsProperty();\n\t\tconst newTemplate = RootTemplate(props);\n\t\tthis.setTemplate(newTemplate, {\n\t\t\tincrementButton: properties.incrementButton,\n\t\t\tdecrementButton: properties.decrementButton,\n\t\t\tspinButton     : properties,\n\t\t\tlabel          : properties.label,\n\t\t\tdescription    : properties.description,\n\t\t\tsuffix         : properties.suffix,\n\t\t\tprefix         : properties.prefix,\n\t\t\tinputSuffix    : properties.inputSuffix,\n\t\t\tinputPrefix    : properties.inputPrefix,\n\t\t});\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n}","\n\n\nconst splitButtonTemplate = (\n\tprefix?: string,\n\tsuffix?: string,\n\tignoreEmptyDOM ?: boolean,\n\tlabel?:string\n\t, description?:string,\n\terror ?: boolean\n): HTMLElement => {\n\t\n\t// Container for everything\n\tconst wrapper = document.createElement('div');\n\tconst fragmentElemet = document.createDocumentFragment();\n\n\t\n\t// Label, if present\n\tif(ignoreEmptyDOM || label){\n\t\tconst labelElement = document.createElement('number-label');\n\t\tlabelElement.setAttribute('ref', 'label');\n\t\tfragmentElemet.appendChild(labelElement);\n\n\t}\n\t\n\t\n\t// Main container\n\tconst container = document.createElement('div');\n\tcontainer.setAttribute('ref', 'container');\n\tcontainer.classList.add('dg-number__container', 'dg-field__container');\n\t\n\t// Prefix, if present\n\tif (prefix || ignoreEmptyDOM) {\n\t\tconst prefixElement = document.createElement('number-prefix');\n\t\tprefixElement.setAttribute('ref', 'prefix');\n\t\tcontainer.appendChild(prefixElement);\n\t\tif(!prefix){\n\t\t\tcontainer.classList.add('dg-field__prefix--hidden');\n\t\t}\n\t}\n\t\n\t// Input Wrapper with Increment and Decrement buttons\n\tconst inputWrapper = document.createElement('div');\n\tinputWrapper.classList.add('dg-number__input-wrapper', 'dg-field__input-wrapper');\n\tinputWrapper.setAttribute('tabindex', '-1');\n\t\n\tconst incrementButton = document.createElement('number-increment');\n\tincrementButton.setAttribute('ref', 'incrementButton');\n\tinputWrapper.appendChild(incrementButton);\n\t\n\tconst inputElement = document.createElement('number-input');\n\tinputElement.setAttribute('ref', 'numberInputRef');\n\tinputWrapper.appendChild(inputElement);\n\t\n\tconst decrementButton = document.createElement('number-decrement');\n\tdecrementButton.setAttribute('ref', 'decrementButton');\n\tinputWrapper.appendChild(decrementButton);\n\t\n\t// Append input wrapper to container\n\tcontainer.appendChild(inputWrapper);\n\t\n\t// Suffix, if present\n\tif (suffix || ignoreEmptyDOM) {\n\t\tconst suffixElement = document.createElement('number-suffix');\n\t\tsuffixElement.setAttribute('ref', 'suffix');\n\t\tcontainer.appendChild(suffixElement);\n\t\tif(!suffix){\n\t\t\tcontainer.classList.add('dg-field__suffix--hidden');\n\t\t}\n\t}\n\t\n\t// Append container to fragmentElemet\n\tfragmentElemet.appendChild(container);\n\t\n\t// Helper text, if present\n\tif(ignoreEmptyDOM || description){\n\t\tconst helperTextElement = document.createElement('number-helper-text');\n\t\thelperTextElement.setAttribute('ref', 'description');\n\t\tfragmentElemet.appendChild(helperTextElement);\n\t}\n\t\n\tif(ignoreEmptyDOM || error){\n\t\tconst errorElement = document.createElement('number-error');\n\t\terrorElement.setAttribute('ref', 'error');\n\t\tfragmentElemet.appendChild(errorElement);\n\t}\n\n\twrapper.append(fragmentElemet)\n\n\t\n\t\n\treturn wrapper;\n};\nconst spinButtonTogetherTemplate = (\n\tprefix?: string,\n\tsuffix?: string,\n\tignoreEmptyDOM ?: boolean,\n\tlabel?:string,\n\tdescription?:string,\n\terror ?: boolean\n): HTMLElement => {\n\t\n\t// Container for everything\n\tconst wrapper = document.createElement('div');\n\tconst fragmentElemet = document.createDocumentFragment();\n\n\t\n\t// Label, if present\n\tif(ignoreEmptyDOM || label){\n\t\tconst labelElement = document.createElement('number-label');\n\t\tlabelElement.setAttribute('ref', 'label');\n\t\tfragmentElemet.appendChild(labelElement);\n\t}\n\t\n\t\n\t// Main container\n\tconst container = document.createElement('div');\n\tcontainer.setAttribute('ref', 'container');\n\tcontainer.classList.add('dg-number__container', 'dg-field__container');\n\t\n\t// Prefix, if present\n\tif (ignoreEmptyDOM || prefix) {\n\t\tconst prefixElement = document.createElement('number-prefix');\n\t\tprefixElement.setAttribute('ref', 'prefix');\n\t\tcontainer.appendChild(prefixElement);\n\t\tif(!prefix){\n\t\t\tcontainer.classList.add('dg-field__prefix--hidden');\n\t\t}\n\t}\n\t\n\t// Input Wrapper with Spin Button\n\tconst inputWrapper = document.createElement('div');\n\tinputWrapper.classList.add('dg-number__input-wrapper', 'dg-field__input-wrapper');\n\tinputWrapper.setAttribute('tabindex', '-1');\n\t\n\tconst inputElement = document.createElement('number-input');\n\tinputElement.setAttribute('ref', 'numberInputRef');\n\tinputWrapper.appendChild(inputElement);\n\t\n\tconst spinButton = document.createElement('number-spin-button');\n\tspinButton.setAttribute('ref', 'spinButton');\n\tinputWrapper.appendChild(spinButton);\n\t\n\t// Append input wrapper to container\n\tcontainer.appendChild(inputWrapper);\n\t\n\t// Suffix, if present\n\tif (ignoreEmptyDOM || suffix) {\n\t\tconst suffixElement = document.createElement('number-suffix');\n\t\tsuffixElement.setAttribute('ref', 'suffix');\n\t\tcontainer.appendChild(suffixElement);\n\t\tif(!suffix){\n\t\t\tcontainer.classList.add('dg-field__suffix--hidden');\n\t\t}\n\t}\n\t\n\t// Append container to wrapper\n\tfragmentElemet.appendChild(container);\n\t\n\t// Helper text, if present\n\tif(ignoreEmptyDOM || description){\n\t\tconst helperTextElement = document.createElement('number-helper-text');\n\t\thelperTextElement.setAttribute('ref', 'description');\n\t\tfragmentElemet.appendChild(helperTextElement);\n\t}\n\n\tif(ignoreEmptyDOM || error){\n\t\tconst errorElement = document.createElement('number-error');\n\t\terrorElement.setAttribute('ref', 'error');\n\t\tfragmentElemet.appendChild(errorElement);\n\t}\n\n\twrapper.append(fragmentElemet)\n\n\treturn wrapper;\n};\nconst BasicTemplateWithoutButtons = (\n\tprefix?: string,\n\tsuffix?: string,\n\tignoreEmptyDOM ?: boolean,\n\tlabel?:string,\n\tdescription?:string,\n\terror ?: boolean,\n\tinputPrefix?: string,\n\tinputSuffix?: string\n): HTMLElement => {\n\t\n\t// Container for everything\n\tconst wrapper = document.createElement('div');\n\n\tconst fragmentElemet = document.createDocumentFragment();\n;\t\n\t// Label, if present\n\tif(ignoreEmptyDOM || label){\n\t\tconst labelElement = document.createElement('number-label');\n\t\tlabelElement.setAttribute('ref', 'label');\n\t\tfragmentElemet.appendChild(labelElement);\n\t}\n\t\n\n\t\n\t// // Main container\n\tconst container = document.createElement('div');\n\tcontainer.setAttribute('ref', 'container');\n\tcontainer.classList.add('dg-number__container', 'dg-field__container');\n\t\n\t// // Prefix, if present\n\tif (ignoreEmptyDOM || prefix) {\n\t\tconst prefixElement = document.createElement('number-prefix');\n\t\tprefixElement.setAttribute('ref', 'prefix');\n\t\tcontainer.appendChild(prefixElement);\n\t\tif(!prefix){\n\t\t\tcontainer.classList.add('dg-field__prefix--hidden');\n\t\t}\n\t}\n\t\n\t// // Input Wrapper\n\tconst inputWrapper = document.createElement('div');\n\tinputWrapper.classList.add('dg-number__input-wrapper', 'dg-field__input-wrapper');\n\tinputWrapper.setAttribute('tabindex', '-1');\n\n\tif(ignoreEmptyDOM || inputPrefix){\n\t\tconst inputPrefixElement = document.createElement('input-prefix');\n\t\tinputPrefixElement.setAttribute('ref', 'inputPrefix');\n\t\tinputWrapper.appendChild(inputPrefixElement);\n\t}\n\t\n\t// // Input Element\n\tconst inputElement = document.createElement('number-input');\n\tinputElement.setAttribute('ref', 'numberInputRef');\n\tinputWrapper.appendChild(inputElement);\n\t\n\tif(ignoreEmptyDOM || inputSuffix){\n\t\tconst inputSuffixElement = document.createElement('input-suffix');\n\t\tinputSuffixElement.setAttribute('ref', 'inputSuffix');\n\t\tinputWrapper.appendChild(inputSuffixElement);\n\t}\n\t\n\t// Append input wrapper to container\n\tcontainer.appendChild(inputWrapper);\n\t\n\t// Suffix, if present\n\tif (ignoreEmptyDOM || suffix) {\n\t\tconst suffixElement = document.createElement('number-suffix');\n\t\tsuffixElement.setAttribute('ref', 'suffix');\n\t\tcontainer.appendChild(suffixElement);\n\t\tif(!suffix){\n\t\t\tcontainer.classList.add('dg-field__suffix--hidden');\n\t\t}\n\t}\n\t\n\t// Append container to wrapper\n\tfragmentElemet.appendChild(container);\n\t\n\t// Helper text, if present\n\tif(ignoreEmptyDOM || description){\n\t\tconst helperTextElement = document.createElement('number-helper-text');\n\t\thelperTextElement.setAttribute('ref', 'description');\n\t\tfragmentElemet.appendChild(helperTextElement);\n\t}\n\n\tif(ignoreEmptyDOM || error){\n\t\tconst errorElement = document.createElement('number-error');\n\t\terrorElement.setAttribute('ref', 'error');\n\t\tfragmentElemet.appendChild(errorElement);\n\t}\n\t\n\n\twrapper.appendChild(fragmentElemet);\n\t\n\treturn wrapper;\n};\n\nexport {\n    splitButtonTemplate,\n    spinButtonTogetherTemplate,\n    BasicTemplateWithoutButtons\n\n}","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { NUMBER_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { INumberOptionHandler } from \"../model/number-option-handler.types\";\nimport { INumberEventHandler } from \"../model/number-event-handler.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { NumberKeyBoardShortCuts } from \"../model/number-keyboard-shortcuts\";\nimport { NumberRootCompType } from \"./rendering-number-root.types\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { NumberControllerHandler } from \"../model/number-controller\";\nimport { INumericAdjusterModel } from \"../model/number-adjuster.types\";\nimport { getNumberRootUtilityClass } from \"../number-utils/number-classnames-slots\";\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'root',\n\t\t\tmodifiers: [],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getNumberRootUtilityClass);\n};\n\n\n\n\nexport class RenderingNumberController extends AbstractController<NumberRootCompType> {\n    \n    // Model should only be autowired for controller\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: INumberOptionHandler;\n    @AutoWired(NUMBER_BEAN_NAME.NUMBER_EVENT_HANDLER) numberEventHandler !: INumberEventHandler;\n\t@AutoWired(NUMBER_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER) adjusterEventHandler !: NumberKeyBoardShortCuts;\n\t@AutoWired('NumberAdjusterHandler') adjusterModel !: INumericAdjusterModel;\n\t@AutoWired(NUMBER_BEAN_NAME.NUMBER_CONTROLLER_HANDLER) controllerHandler !: NumberControllerHandler;\n\tprivate wrapperFocused !: boolean;\n\tprivate prefixComponent!: HTMLElement | null;\n\tprivate suffixComponent!: HTMLElement| null;\n\n    init(){\n        this.registerEvents();\n\t\tthis.applyClassNames();\n\t\t// this.addListeners();\n\n\t\tthis.controllerHandler.registerNumber(this);\n\t\tthis.prefixComponent = this.component?.getPrefixElement() ? this.component?.getPrefixElement().eGui : null;\n\t\tthis.suffixComponent = this.component?.getSuffixElement() ? this.component?.getSuffixElement().eGui : null;\n    }\n\n\t// private addListeners(){\n\t// \tthis.component?.getGui().addEventListener('focusin', (event)=>{\n\t// \t\tconst ownerState = this.getOwnerState();\n\t// \t\tthis.wrapperFocused = true;\n\t// \t\tthis.refresh();\n\n\t// \t\tif( ownerState.readonly || ownerState.disabled) {\n\t// \t\t\treturn\n\t// \t\t}\n\t// \t\tthis.onFocusIn(event)\n\t// \t});\n\n\t// \tthis.component?.getGui().addEventListener('mousedown', (event)=>{\n\t// \t\tconst ownerState = this.getOwnerState();\n\t// \t\tthis.wrapperFocused = true;\n\n\n\t// \t\tthis.refresh();\n\n\n\t// \t\tif( ownerState.readonly || ownerState.disabled) {\n\t// \t\t\treturn\n\t// \t\t}\n\t// \t\tthis.onFocusIn(event)\n\t\t\t\n\t// \t});\n\t// \tthis.component?.getGui().addEventListener('focusout', (_event)=>{\n\t// \t\tconst ownerState = this.getOwnerState();\n\t// \t\tthis.wrapperFocused = false;\n\t// \t\tthis.refresh();\n\n\t// \t\tif( ownerState.readonly || ownerState.disabled) {\n\t// \t\t\treturn\n\t// \t\t}\n\t// \t\t// this.onFocusIn(event)\n\t// \t});\n\t// }\n\n\n    private registerEvents() {\n        this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_RERENDER', this.rerender.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_BLUR', this.blur.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_SET_PREFIX', this.setPrefix.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_SET_SUFFIX', this.setSuffix.bind(this));\n\n\t\t\n\n    }\n\n\tprivate refresh(){\n\t\tthis.applyClassNames();\n\t}\n\n\tprivate applyClassNames(){\n\t\tconst ownerState = this.getOwnerState();\n\t\t\tif(this.wrapperFocused === true){\n\t\t\t\townerState.focus = true;\n\t\t\t}\n\t\tconst classes = useUtilityClasses();\n\t\tthis.component?.addOrRemoveCssClass(classes.root);\n\t\tthis.component?.getGui().classList.add(\"dg-field__root\");\n\t\tthis.component?.getGui().classList.add(\"dg-field--render-state\");\n\t\tif(this.optionHandler.getType() === \"currency\" ){\n            this.component?.getGui().classList.add(\"dg-currency__root\");\n            }else if(this.optionHandler.getType() === \"percent\"){\n            this.component?.getGui().classList.add(\"dg-percentage__root\");\n            }\n\t\townerState.invalid &&  this.component?.getGui().classList.add(\"dg-input__status--error\")\n\t\townerState.disabled &&  this.component?.getGui().classList.add(\"dg-input__status--disabled\")\n\t\townerState.readonly &&  this.component?.getGui().classList.add(\"dg-input__status--readonly\")\n\t\townerState.focus && this.component?.getGui().classList.add(\"dg-input__status--focus\")\n\t\t// this.component.getGui().setAttribute(\"tabindex\",\"0\")\n\t}\n\n\tprivate getOwnerState() {\n\t\tconst showErrorState = this.optionHandler.showErrorState();\n\t\treturn {\n\t\t\tinvalid : showErrorState ? !this.adjusterModel?.isValid(): false,\n\t\t\tfocus : this.adjusterModel.isFocused(),\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadonly(),\n\t\t\tsize : this.optionHandler.getSize(),\n\t\t}\n\t}\n\n    private onFocusIn(event : FocusEvent) : void {\n\t\tthis.numberEventHandler.onFocus(event);\n\t\tthis.component?.getInputElement().focus();\n\t\t// this.component.getGui().classList.add(\"dg-input__status--focus\")\n\t}\n\n\tprivate onFocusOut(event : FocusEvent) : void {\n\t\tthis.numberEventHandler.onFocusOut(event);\n\t\t// this.component.getGui().classList.remove(\"dg-input__status--focus\")\n\n\t}\n\n\tprivate onInput(_value : number) : void {\n\t\t// this.numberEventHandler.onInput(value);\n\t}\n\n\tprivate onKeyDown(event : KeyboardEvent) : void {\n\t\tthis.numberEventHandler.onKeyDown(event);\n\t\t// this.component.getGui().classList.add(\"dg-input__status--focus\")\n\n\t}\n\n    getProperty() : any {\n        return {\n\t\t\tonInput                : this.onInput.bind(this),\n\t\t\tonKeyDown              : this.onKeyDown.bind(this),\n\t\t\tonFocusIn              : this.onFocusIn.bind(this),\n\t\t\tonFocusOut             : this.onFocusOut.bind(this),\n\t\t\tisvalid                : this.adjusterModel.isValid(),\n\t\t\tfocused                : this.adjusterModel.isFocused(),\n\t\t\tlabel                  : this.optionHandler.getLabel(),\n\t\t\tprefix : this.optionHandler.getPrefixValue(),\n\t\t\tsuffix : this.optionHandler.getSuffixValue(),\n\t\t\tinputPrefix : this.optionHandler.getStartAdornmentValue(),\n\t\t\tinputSuffix : this.optionHandler.getEndAdornmentValue(),\n\t\t\thelperText             : this.optionHandler.getDescription(),\n\t\t\thtmlFor                : 'number',\n\t\t\tid                     : 'number',\n\t\t\trequired               : this.optionHandler.isRequired(),\n\t\t\treadOnly               : this.optionHandler.isReadonly(),\n\t\t\tdisabled               : this.optionHandler.isDisabled(),\n\t\t\tonIncrement            : (event:any) => this.numberEventHandler.onIncrement(event),\n\t\t\tonDecrement            : (event: any) => this.numberEventHandler.onDecrement(event),\n\t\t\tincrementDisabled      : this.adjusterModel.isIncrementDisabled(),\n\t\t\tdecrementDisabled      : this.adjusterModel.isDecrementDisabled(),\n\t\t\tspinButton             : this.optionHandler.getSpinButton(),\n\t\t\tregisterAdjusterElement: (element : HTMLElement) => this.adjusterEventHandler.registerElement(element),\n\t\t\tgetTemplate            : (props: any) => this.optionHandler.getTemplate(props),\n\t\t\tdescription            : this.optionHandler.getDescription() || this.optionHandler.getDescriptionRenderer(),\n\t\t\terror                  : this.optionsHandler.showErrorState(),\n\t\t\tinvalid                : !this.optionHandler.isValid(),\n\t\t\tinvalidText            : this.optionHandler.getValidationMessage(),\n\t\t};\n    }\n\n\tgetParamsProperty() {\n        return {\n\t\t\tincrementButton: {\n                getIcon          : () =>  this.optionsHandler.getIncrementButtonSVGIconId(),\n                getRenderer      : () => this.optionsHandler.getIncrementButtonRenderer(),\n                getRendererParams: () => this.optionsHandler. getIncrementButtonRendererParams(),\n                callback         : (event: any) => this.numberEventHandler.onIncrement(event),\n                isDisabled       : () => this.adjusterModel.isIncrementDisabled(),\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole          : () => 'increment',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses : ()=> [\"dg-number__spinbutton\", \"dg-number__spin-downbtn\"],\n\t\t\t\tgetTabindex : ()=> \"-1\"\n\t\t\t},\n\t\t\tdecrementButton: {\n                getIcon       : () =>  this.optionsHandler.getDecrementButtonSVGIconId(),\n                renderer      : () => this.optionsHandler.getDecrementButtonRenderer(),\n                rendererParams: () => this.optionsHandler.getDecrementButtonRendererParams(),\n                callback      : (event : any) => this.numberEventHandler.onDecrement(event),\n                isDisabled    : () => this.adjusterModel.isDecrementDisabled(),\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole       : () => 'decrement',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses    : ()=> [ \"dg-number__spinbutton\", \"dg-number__spin-downbtn\"],\n\t\t\t\tgetTabindex : ()=> \"-1\"\n\n\t\t\t},\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> \"dg-number__label\",\n\t\t\t\tgetLabelTitleClasses :()=> \"dg-number__label-title\"\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-number__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-number__description\",\n\t\t\t\tinvalid : () => {\n\t\t\t\t\tconst showErrorState = this.optionHandler.showErrorState();\n\t\t\t\t\treturn showErrorState ? !this.adjusterModel?.isValid() : false;\n\t\t\t\t},\n\t\t\t\tinvalidText : () => this.optionHandler.getValidationMessage()\n\t\t\t},\n\t\t\tsuffix : {\n\t\t\t\tgetUserClasses : ()=> \"dg-number__suffix-elem\"\n\t\t\t},\n\t\t\tprefix : {\n\t\t\t\tgetUserClasses : ()=> \"dg-number__prefix-elem\"\n\t\t\t},\n\t\t\tinputSuffix:{\n\t\t\t\tgetUserClasses : ()=> \"dg-number__input-suffix\"\n\t\t\t},\n\t\t\tinputPrefix:{\n\t\t\t\tgetUserClasses : ()=> \"dg-number__input-prefix\"\n\t\t\t}\n\t\t};\n    }\n\n\tgetElement() : HTMLElement |  undefined {\n\t\treturn this.component?.getGui();\n\t}\n\n\tfocus(): void{\n\t\tthis.component?.getInputElement().focus();\n\t\tthis.dispatchEvent({type : 'FOCUS_IN'})\n\t}\n\n\tblur(): void{\n        this.component?.getInputElement().blur();\n\t\t// this.component?.getGui().blur();\n\t\tthis.wrapperFocused = false;\n\t\tthis.refresh();\n\n    }\n\t \n\tdestroy():void{\n\n\t\t// this.component?.getGui().remove();\n\t\t// super.destroy();\n\t\t\n\t}\n\n\trerender():void{\n\t\tthis.component?.rerender()\n\t\tthis.refresh();\n\n\n\t}\n\n\tsetPrefix(params:any){\n\t\tthis.prefixComponent && this.prefixComponent.remove();\n\t\tif(!params.options.prefix){\n\t\t\treturn\n\n\t\t}\n\t\tconst container = this.component?.getContainerElement();\n\t\t this.prefixComponent = document.createElement('div');\n\t\tthis.prefixComponent.classList.add(\"dg-number__prefix-elem\");\n\t\tthis.prefixComponent.classList.add(\"dg-prefix-elem\");\n\t\tthis.prefixComponent.setAttribute(\"ref\",\"prefix\")\n\n\t\tthis.prefixComponent.innerHTML = params.options.prefix;\n\t\tcontainer?.insertBefore(this.prefixComponent, container.firstChild);\n\n\t}\n\tsetSuffix(params:any){\n\t\tthis.suffixComponent && this.suffixComponent.remove();\n\t\tif(!params.options.suffix){\n\t\t\treturn\n\t\t}\n\t\tconst container = this.component?.getContainerElement();\n\t\tthis.suffixComponent = document.createElement('div');\n\t\tthis.suffixComponent.classList.add(\"dg-number__suffix-elem\");\n\t\tthis.suffixComponent.classList.add(\"dg-suffix-elem\");\n\t\tthis.suffixComponent.innerHTML = params.options.suffix;\n\t\tthis.suffixComponent.setAttribute(\"ref\",\"suffix\")\n\t\tcontainer?.appendChild(this.suffixComponent);\n\t}\n\n\thide(){\n\t\t// this.component?.getGui().style.display = 'none';\n\t}\n\n\tshow(){\n\t\t// this.component?.getGui().style.display = 'flex';\n\t}\n\n}\n\n\n","import { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { RenderingNumberController } from './rendering-number-root-controller';\nimport { composeClasses } from '@dg/utils';\nimport { getNumberRootUtilityClass } from '../number-utils/number-classnames-slots';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'container',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getNumberRootUtilityClass)\n}\n\n// const splitButtonTemplate = (label:string, helperText : any, prefix:string, suffix:string) => {\n// \treturn `<div>\n// \t${label ? `<number-label ref=\"label\"></number-label>` : ''}\n// \t\t<div ref=\"container\" class=\"dg-number__container dg-field__container\">\n// \t\t${prefix ? `<number-prefix ref=\"prefix\"></number-prefix>` : ''}\n\n// \t\t\t\t<div class=\"dg-number__input-wrapper dg-field__input-wrapper\" tabindex=\"0\">\n// \t\t\t\t\t<number-increment ref=\"incrementButton\"></number-increment>\n// \t\t\t\t\t<number-rendering-element ref = \"numberInputRef\"></number-rendering-element>\n// \t\t\t\t\t<number-decrement ref=\"decrementButton\"></number-decrement>\n// \t\t\t\t</div>\n// \t\t${suffix ? `<number-suffix ref=\"suffix\"></number-suffix>` : ''}\n\n// \t\t</div>\n// \t\t${helperText ? `<number-helper-text ref = \"description\"></number-helper-text>` : ''}\n// \t</div>`;\n// }\n// const spinButtonTogetherTemplate = (label:string, helperText : any, prefix:string, suffix:string) => {\n\n// \t\treturn `<div>\n// \t\t${label ? `<number-label ref=\"label\"></number-label>` : ''}\n// \t\t<div ref=\"container\" class=\"dg-number__container dg-field__container\">\n// \t\t${prefix ? `<number-prefix ref=\"prefix\"></number-prefix>` : ''}\n// \t\t\t<div class=\"dg-number__input-wrapper dg-field__input-wrapper\" tabindex=\"0\">\n// \t\t\t<number-rendering-element ref = \"numberInputRef\" ></number-rendering-element>\n// \t\t\t<number-spin-button ref=\"spinButton\"></number-spin-button>\n// \t\t\t${suffix ? `<number-suffix ref=\"suffix\"></number-suffix>` : ''}\n// \t\t\t</div>\n// \t\t</div>\n// \t\t${helperText ? `<number-helper-text ref = \"description\"></number-helper-text>` : ''}\n// \t</div>`;\n\n\t\n// }\n\n// const BasicTemplateWithoutButtons = (label:string, helperText : any, prefix:string, suffix:string,inputPrefix:string,inputSuffix:string) =>{\n\t\n// \treturn `<div>\n// \t     ${label ? `<number-label ref=\"label\"></number-label>` : ''}\n// \t\t<div ref=\"container\" class=\"dg-number__container dg-field__container\">\n// \t\t${prefix ? `<number-prefix ref=\"prefix\"></number-prefix>` : ''}\n// \t\t\t<div class=\"dg-number__input-wrapper dg-field__input-wrapper\" tabindex=\"0\">\n// \t\t\t\t${inputPrefix ? `<input-prefix ref=\"inputPrefix\"></input-prefix>` : ''}\n// \t\t\t\t\t\t<number-rendering-element ref = \"numberInputRef\" ></number-rendering-element>\n// \t\t\t\t${inputSuffix ? `<input-suffix ref=\"inputSuffix\"></input-suffix>` : ''}\n\n// \t\t\t</div>\n// \t\t${suffix ? `<number-suffix ref=\"suffix\"></number-suffix>` : ''}\n\n// \t\t</div>\n// \t\t${helperText ? `<number-helper-text ref = \"description\"></number-helper-text>` : ''}\n// \t\t</div>`;\n// }\n\nconst splitButtonTemplate = (\n    label: string, \n    helperText: boolean, \n    prefix: string, \n    suffix: string\n): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"number-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Number container\n    const numberContainer = document.createElement(\"div\");\n    numberContainer.setAttribute(\"ref\", \"container\");\n    numberContainer.classList.add(\"dg-number__container\", \"dg-field__container\");\n\n    // Prefix\n    if (prefix) {\n        const prefixElement = document.createElement(\"number-prefix\");\n        prefixElement.setAttribute(\"ref\", \"prefix\");\n        numberContainer.appendChild(prefixElement);\n    }\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-number__input-wrapper\", \"dg-field__input-wrapper\");\n    inputWrapper.setAttribute(\"tabindex\", \"0\");\n\n    // Increment button\n    const incrementButton = document.createElement(\"number-increment\");\n    incrementButton.setAttribute(\"ref\", \"incrementButton\");\n\n    // Number rendering element\n    const numberInput = document.createElement(\"number-rendering-element\");\n    numberInput.setAttribute(\"ref\", \"numberInputRef\");\n\n    // Decrement button\n    const decrementButton = document.createElement(\"number-decrement\");\n    decrementButton.setAttribute(\"ref\", \"decrementButton\");\n\n    // Append elements to input wrapper\n    inputWrapper.appendChild(incrementButton);\n    inputWrapper.appendChild(numberInput);\n    inputWrapper.appendChild(decrementButton);\n\n    // Append input wrapper to number container\n    numberContainer.appendChild(inputWrapper);\n\n    // Suffix\n    if (suffix) {\n        const suffixElement = document.createElement(\"number-suffix\");\n        suffixElement.setAttribute(\"ref\", \"suffix\");\n        numberContainer.appendChild(suffixElement);\n    }\n\n    // Append number container to main container\n    container.appendChild(numberContainer);\n\n    // Helper text\n    if (helperText) {\n        const helperTextElement = document.createElement(\"number-helper-text\");\n        helperTextElement.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperTextElement);\n    }\n\n    return container;\n};\nconst spinButtonTogetherTemplate = (\n    label: string, \n    helperText: boolean, \n    prefix: string, \n    suffix: string\n): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"number-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Number container\n    const numberContainer = document.createElement(\"div\");\n    numberContainer.setAttribute(\"ref\", \"container\");\n    numberContainer.classList.add(\"dg-number__container\", \"dg-field__container\");\n\n    // Prefix\n    if (prefix) {\n        const prefixElement = document.createElement(\"number-prefix\");\n        prefixElement.setAttribute(\"ref\", \"prefix\");\n        numberContainer.appendChild(prefixElement);\n    }\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-number__input-wrapper\", \"dg-field__input-wrapper\");\n    inputWrapper.setAttribute(\"tabindex\", \"0\");\n\n    // Number rendering element\n    const numberInput = document.createElement(\"number-rendering-element\");\n    numberInput.setAttribute(\"ref\", \"numberInputRef\");\n\n    // Spin button\n    const spinButton = document.createElement(\"number-spin-button\");\n    spinButton.setAttribute(\"ref\", \"spinButton\");\n\n    // Append elements to input wrapper\n    inputWrapper.appendChild(numberInput);\n    inputWrapper.appendChild(spinButton);\n\n    // Suffix\n    if (suffix) {\n        const suffixElement = document.createElement(\"number-suffix\");\n        suffixElement.setAttribute(\"ref\", \"suffix\");\n        inputWrapper.appendChild(suffixElement);\n    }\n\n    // Append input wrapper to number container\n    numberContainer.appendChild(inputWrapper);\n\n    // Append number container to main container\n    container.appendChild(numberContainer);\n\n    // Helper text\n    if (helperText) {\n        const helperTextElement = document.createElement(\"number-helper-text\");\n        helperTextElement.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperTextElement);\n    }\n\n    return container;\n};\nconst BasicTemplateWithoutButtons = (\n    label: string, \n    helperText: boolean, \n    prefix: string, \n    suffix: string, \n    inputPrefix: string, \n    inputSuffix: string\n): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"number-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Number container\n    const numberContainer = document.createElement(\"div\");\n    numberContainer.setAttribute(\"ref\", \"container\");\n    numberContainer.classList.add(\"dg-number__container\", \"dg-field__container\");\n\n    // Prefix\n    if (prefix) {\n        const prefixElement = document.createElement(\"number-prefix\");\n        prefixElement.setAttribute(\"ref\", \"prefix\");\n        numberContainer.appendChild(prefixElement);\n    }\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-number__input-wrapper\", \"dg-field__input-wrapper\");\n    inputWrapper.setAttribute(\"tabindex\", \"0\");\n\n    // Input Prefix\n    if (inputPrefix) {\n        const inputPrefixElement = document.createElement(\"input-prefix\");\n        inputPrefixElement.setAttribute(\"ref\", \"inputPrefix\");\n        inputWrapper.appendChild(inputPrefixElement);\n    }\n\n    // Number rendering element\n    const numberInput = document.createElement(\"number-rendering-element\");\n    numberInput.setAttribute(\"ref\", \"numberInputRef\");\n    inputWrapper.appendChild(numberInput);\n\n    // Input Suffix\n    if (inputSuffix) {\n        const inputSuffixElement = document.createElement(\"input-suffix\");\n        inputSuffixElement.setAttribute(\"ref\", \"inputSuffix\");\n        inputWrapper.appendChild(inputSuffixElement);\n    }\n\n    // Append input wrapper to number container\n    numberContainer.appendChild(inputWrapper);\n\n    // Suffix\n    if (suffix) {\n        const suffixElement = document.createElement(\"number-suffix\");\n        suffixElement.setAttribute(\"ref\", \"suffix\");\n        numberContainer.appendChild(suffixElement);\n    }\n\n    // Append number container to main container\n    container.appendChild(numberContainer);\n\n    // Helper text\n    if (helperText) {\n        const helperTextElement = document.createElement(\"number-helper-text\");\n        helperTextElement.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperTextElement);\n    }\n\n    return container;\n};\n\n\n\n\n\n\nfunction RootTemplate(props : any): HTMLElement {\n\tconst { spinButton, getTemplate, label,helperText,prefix, suffix,inputPrefix,inputSuffix } = props;\n\tconst classes = useUtilityClasses();\n\tconst div = document.createElement('div');\n\tconst customTemplate = getTemplate(classes);\n\n\tconst template = customTemplate ? customTemplate : (spinButton === \"together\" ? spinButtonTogetherTemplate(label,helperText, prefix, suffix):(spinButton === \"split\" ? splitButtonTemplate(label,helperText, prefix, suffix) : BasicTemplateWithoutButtons(label, helperText, prefix, suffix,inputPrefix,inputSuffix)))\n\n\t// const template = spinButton === 'together' ? (customTemplate ? customTemplate : spinButton ? spinButtonTogetherTemplate(classes,label,helperText) : splitButtonTemplate(classes, label,helperText)): BasicTemplateWithoutButtons(classes, label, helperText);\n\n\tdiv.appendChild(template)\n\treturn div.firstChild as HTMLElement;\n}\n\nexport class RenderingNumberRootComponent extends Component {\n\n\t@queryAssignedNodes('numberInputRef') numberInputElement !      : any;\n\t@queryAssignedNodes('container') containerElement !      : any;\n\t@queryAssignedNodes('prefix') prefixElement !      : any;\n\t@queryAssignedNodes('suffix') suffixElement !      : any;\n\n\tprivate appendTo: HTMLElement | undefined ;\n\tconstructor(appendTo: HTMLElement | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: any = {\n\t\t\tgetGui             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tgetInputElement : ()=> this.getInputElement(),\n\t\t\tgetSuffixElement : ()=> this.getSuffixElement(),\n\t\t\tgetPrefixElement : ()=> this.getPrefixElement(),\n\t\t\trerender : () => this.rerenderComponent(controller),\n\t\t\tgetContainerElement : ()=> this.getContainerElement(),\n\t\t};\n\n        // change createMangedBean to createWire\n\t\tconst controller = this.createManagedBean(new RenderingNumberController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = RootTemplate(props);\n\n\t\tconst properties = controller.getParamsProperty();\n\t\t\n\t\tthis.setTemplate(template, {\n\t\t\tincrementButton: properties.incrementButton,\n\t\t\tdecrementButton: properties.decrementButton,\n\t\t\tspinButton     : properties,\n\t\t\tlabel : properties.label,\n\t\t\tdescription : properties.description,\n\t\t\tsuffix : properties.suffix,\n\t\t\tprefix  : properties.prefix,\n\t\t\tinputSuffix :properties.inputSuffix,\n\t\t\tinputPrefix :properties.inputPrefix,\n\t\t});\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo  = undefined;\n\t\t});\n\t}\n\n\tprivate getSuffixElement():any{\n\t\treturn this.suffixElement;\n\t}\n\n\tprivate getPrefixElement():any{\n\t\treturn this.prefixElement\n\t}\n\n\tgetInputElement(): HTMLElement {\n\t\treturn this.numberInputElement.eGui;\n\t}\n\tgetContainerElement(): HTMLElement {\n\t\treturn this.containerElement;\n\t}\n\trerenderComponent(controller: RenderingNumberController): void {\n\t\tcontroller.destroy()\n\t\tconst props = controller.getProperty();\n\t\tconst properties = controller.getParamsProperty();\n\t\tconst newTemplate = RootTemplate(props);\n\t\tthis.setTemplate(newTemplate, {\n\t\t\tincrementButton: properties.incrementButton,\n\t\t\tdecrementButton: properties.decrementButton,\n\t\t\tspinButton     : properties,\n\t\t\tlabel : properties.label,\n\t\t\tdescription : properties.description\n\t\t});\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { INumberAPI } from \"./core/model/number-api.types\";\nimport { NUMBER_BEAN_NAME } from \"./constants/beanname-constants\";\nimport { IUserParams, NumberCoreComponent } from \"./number-core-component\";\nimport { INumberConfiguration } from \"./number-configuration.types\";\nimport { NumberRootComponent } from \"./core/number-root/number-root-view\";\nimport { RenderingNumberRootComponent } from \"./core/rendering-number-root/rendering-number-root-view\";\nimport { isNullish } from \"./formatter/NumberFormatter\";\nimport { calculatePrecision } from \"./formatter/NumberFormatter\";\nimport { formatString } from \"./formatter/CurrencyFormatter\";\n\n\n\nfunction setSybmol(formattedValue: string, currencySymbol: string) {\n\tconst trimmed = formattedValue.trim();\n\tconst isNegative = trimmed.startsWith('-');\n\tconst core = isNegative ? trimmed.slice(1).trim() : trimmed;\n\treturn isNegative ? `-${currencySymbol}${core}` : `${currencySymbol}${core}`;\n}\n\nexport class NumberComponent {\n\n\t\n\n\tpublic api: INumberAPI | undefined;\n\tconstructor(configuration: INumberConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(NUMBER_BEAN_NAME.NUMBER_API) as INumberAPI;\n            context.createBean(new NumberRootComponent(configuration.appendTo));\n\t\t};\n\t\tnew NumberCoreComponent().initializeNumber(configuration, params, createUI);\n\t}\n}\n\nexport class RenderingNumberComponent {\n\n\tpublic static formatNumber(value: number, precision: number, useThousandSeparator: boolean, locale: string):string {\n        if (isNullish(value)) {\n            return \"\";\n        }\n        if (precision === undefined) {\n            precision = calculatePrecision(value);\n        }\n\n\t\tconst options: Intl.NumberFormatOptions = {\n\t\t\tstyle: \"decimal\",\n\t\t\tmaximumFractionDigits: precision,\n\t\t\tminimumFractionDigits: precision,\n\t\t\tuseGrouping:useThousandSeparator\n\t\t};\n\n\t\tconst formatter = createNumberFormatter(locale, options);\n\t\treturn formatter.format(value);\n\t}\n\n\tpublic static formatPercentage(value: number, precision: number, useThousandSeparator: boolean, hideSymbol: boolean, locale: string):string {\n\n        if (isNullish(value)) {\n            return \"\";\n        }\n\n\t\tconst options: Intl.NumberFormatOptions = {\n\t\t\tstyle: hideSymbol ?\"decimal\":\"percent\",\n\t\t\tmaximumFractionDigits: precision,\n\t\t\tminimumFractionDigits: precision,\n\t\t\tuseGrouping: useThousandSeparator\n\t\t};\n\n\t\tconst formatter = createNumberFormatter(locale, options);\n\t\treturn formatter.format(value as number);\n\t}\n\n\tpublic static formatCurrency(value: number, precision: number, useThousandSeparator: boolean, hideSymbol: boolean, symbolPosition: string, currencySymbol: string, locale: string): string {\n\t\tif (isNullish(value)) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst currencyCode    = \"INR\";\n\t\tconst currencyDisplay = \"symbol\";\n\n\t\tlet option : Intl.NumberFormatOptions ;\n\n\t\tif(hideSymbol){\n\t\t\toption = {\n\t\t\t\tstyle: \"decimal\",\n\t\t\t\tmaximumFractionDigits: precision,\n\t\t\t\tminimumFractionDigits: precision,\n\t\t\t\tuseGrouping:useThousandSeparator\n\t\t\t};\n\n\t\t} else{\n\t\t\toption  = { \n\t\t\t\tstyle: hideSymbol ? 'decimal':'currency',\n\t\t\t\tcurrencyDisplay,\n\t\t\t\tcurrency: currencyCode,\n\t\t\t\tmaximumFractionDigits: precision,\n\t\t\t\tminimumFractionDigits: precision,\n\t\t\t\tuseGrouping: useThousandSeparator,\n\t\t\t} \n\t\t}\n\n\n\t\tconst formatter = createNumberFormatter(locale, option);\n\t\tlet formattedValue = formatter.format(value);\n\t\tif(currencySymbol){\n\t\t\tif(symbolPosition == \"left\"){\n\t\t\t\tformattedValue = setSybmol(formattedValue,currencySymbol) as string;\n\t\t\t}\n\t\t}else{\n\t\t\tformattedValue = formatString(locale, currencyCode, formattedValue,symbolPosition) as string\n\t\t}\n\n\t\treturn formattedValue;\n\t}\n\t\n\tpublic api: INumberAPI | undefined;\n\tconstructor(configuration: INumberConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(NUMBER_BEAN_NAME.NUMBER_API) as INumberAPI;\n            context.createBean(new RenderingNumberRootComponent(configuration.appendTo));\n\t\t};\n\t\tnew NumberCoreComponent().initializeNumber(configuration, params, createUI);\n\t}\n}\n\nfunction normalizeLocale(locale?: string): string | undefined {\n\tif (!locale || locale.toLowerCase() === \"none\") {\n\t\treturn undefined;\n\t}\n\treturn locale;\n}\n\nfunction createNumberFormatter(locale: string | undefined, options: Intl.NumberFormatOptions): Intl.NumberFormat {\n\tconst normalizedLocale = normalizeLocale(locale);\n\ttry {\n\t\treturn new Intl.NumberFormat(normalizedLocale, options);\n\t} catch {\n\t\treturn new Intl.NumberFormat(undefined, options);\n\t}\n}","const PAGINATION_BEAN_NAME = {\n\tPAGINATION_API: 'PaginationAPI',\n\tPAGINATION_CONFIGURATION: 'configuration',\n\tCSSCLASSNAMEGENERATOR: 'CSSClassNameGenartor',\n\tPAGINATION_ADJUSTER_HANDLER: 'PaginationAdjusterHandler',\n\tFORMATTER: 'formatter',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tPAGINATION_EVENT_HANDLER: 'PaginationEventHandler',\n\tPAGINATION_CONTROLLER_HANDLER: 'PaginationControllerHandler',\n\tPAGINATION_DATA_HANDLER: 'PaginationDataHandler',\n\tPAGINATION_UI_UPDATE_HANDLER: 'PaginationUpdateHandler',\n}\nexport {\n    PAGINATION_BEAN_NAME\n}","\ninterface RootTemplateOptions {\n    showTotal: boolean;\n    hasPageSizeChanger: boolean;\n    hasQuickJumper: boolean;\n}\n\nconst rootTemplate = (options: RootTemplateOptions) => {\n    const { showTotal: showTotalEl, hasPageSizeChanger, hasQuickJumper } = options;\n    const div = document.createElement(\"div\");\n    if (showTotalEl) {\n        div.appendChild(document.createElement(\"show-total\"));\n    }\n    div.appendChild(document.createElement(\"page-set\"));\n    if (hasPageSizeChanger) {\n        div.appendChild(document.createElement(\"pagesize-changer\"));\n    }\n    if (hasQuickJumper) {\n        div.appendChild(document.createElement(\"quick-jumper\"));\n    }\n    return div as HTMLElement;\n}\n\n\nconst  paginationNameSpaces = {\n    count             : 'count',\n    initialPageSize   : 'initialPageSize',\n    initialPageNumber : 'initialPageNumber',\n    pageSizeOptions   : 'pageSizeOptions',\n    pageSet           : 'pageSet',\n  \n    siblingCount  : 'siblingCount',\n    boundaryCount : 'boundaryCount',\n    loop          : 'loop',\n  \n    onBeforePageChange     : 'onBeforePageChange',\n    onAfterPageChange      : 'onAfterPageChange',\n    onBeforePageChangeSize : 'onBeforePageChangeSize',\n    onAfterPageChangeSize  : 'onAfterPageChangeSize',\n  \n    shape    : 'shape',\n    size     : 'size',\n    mode     : 'mode',\n    disabled : 'disabled',\n    theme    : 'theme',\n  \n  \n    showPreviousIcon   : 'showPreviousIcon',\n    showFirstIcon      : 'showFirstIcon',\n    showNextIcon       : 'showNextIcon',\n    showLastIcon       : 'showLastIcon',\n    hasPageSizeChanger : 'hasPageSizeChanger',\n    quickJumper        : 'quickJumper',\n    showTotal          : 'showTotal',\n  \n  \n    dotJump      : 'dotJump',\n    dotJumpCount : 'dotJumpCount',\n    hasTripleDot : 'hasTripleDot',\n    displayText  : 'displayText',\n    slot         : 'slot'\n  }\n  \n  const  DG_PaginationMode =  {\n    style1 : 'style1',\n    style2 : 'style2',\n    style3 : 'style3',\n    style4 : 'style4'\n  }\n  \n\n\n  \n  \n  const  DG_PaginationSize  = {\n    small  : 'small',\n    medium : 'medium',\n    large  : 'larger'\n  } \n  \n  const  DG_PaginationTheme  = {\n    light  : 'light',\n    dark   : 'dark'\n  }\n  \n  interface ISlots{\n    firstIcon   ?: HTMLElement | string |  number,\n    lastIcon    ?: HTMLElement |  string |  number,\n    previousIcon?: HTMLElement |  string |  number,\n    nextIcon    ?: HTMLElement |  string |  number,\n  }\nconst logger = window.console;\n\n\nconst  paginationDefaultConfiguration = {\n    count             : 150,\n    initialPageNumber    : 1,\n    initialPageSize      : 30,\n\n    loop           : false,\n    dotJump        : false,\n    disabled       : false,\n    quickJumper    : false,\n    readonly       :  false,\n\n    mode: 'style1',\n    shape: 'rounded',\n    size: 'medium',\n\n    showFirstIcon    : true,\n    showPreviousIcon : true,\n    showNextIcon     : true,\n    showLastIcon     : true,\n\n    onBeforePageChange: (page : number) => { logger.log('default onBeforePageChange implemented',page); },\n    onAfterPageChange: (page : number) => { logger.log('default onAfterPageChange implemented',page); },\n    onBeforePageChangeSize: (pageSize :  number) => { logger.log('default onBeforePageChangeSize implemented',pageSize); },\n    onAfterPageChangeSize: (pageSize : number) => { logger.log('default onAfterPageChangeSize implemented'),pageSize },\n    showTotal: (_obj? : any) => { },\n    showShowTotal   : true,\n\n    dotJumpCount    : 3,\n    hasTripleDot  :  true,\n    siblingCount   :  1,\n    boundaryCount  :  1,\n    theme           : DG_PaginationTheme.light ,\n    displayText : (page :  number)=>{return page},\n    pageSizeOptions : [5,10,25,100,200],\n    hasPageSizeChanger : true,\n    slot : {\n      firstIcon    :  null,\n      lastIcon     :  null,\n      previousIcon :  null,\n      nextICon     :  null\n    },\n    appendTo :  document.body,\n    instanceID :  '1'\n}\nfunction callHook(onbefore : any,api :  any,onAfter : any,args : any){ \n  const canExecute = onbefore(...args);\n  if(canExecute !== false){\n      api();\n      onAfter(...args);\n  }        \n}\nfunction removeCommonElements(a : any, b: any) {\n  for (let i = 0; i < a.length; i++) {\n      let index = b.indexOf(a[i]);\n      if (index !== -1) {\n          b.splice(index, 1);\n      }\n  }\n  return { a: a, b: b };\n}\nexport {\n    rootTemplate,\n    RootTemplateOptions,\n    paginationDefaultConfiguration,\n    ISlots,\n    DG_PaginationMode,\n    paginationNameSpaces,\n    DG_PaginationSize,\n    DG_PaginationTheme,\n    callHook,\n    removeCommonElements\n}\n","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { PaginationOptionsHandlerTypes } from \"./pagination-options-handler.types\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\nimport { ISlots, paginationDefaultConfiguration } from \"../utiility\";\nimport { IPaginationConfigurations } from \"../../pagination-configuration.types\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nclass PaginationOptionHandler extends EventEmitter implements PaginationOptionsHandlerTypes{\n    \n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_CONFIGURATION) configuration !: IPaginationConfigurations;\n    getAriaLabel(): string {\n        return ''\n    }\n\n    getAriaLabelledby(): string {\n        return ''\n    }\n\n    getAriaDescribedby(): string {\n        return ''\n    }\n\n    getHelperText(): string | undefined {\n        return this.configuration?.showTotal?.() ?? paginationDefaultConfiguration.showTotal?.();\n    }\n\n    getHelperTextRenderer() {\n        return this.configuration?.helperTextRenderer ?? \" \";\n    }\n\n    getHelperTextRendererParams() {\n        return this.configuration?.helperTextRendererParams ?? '';\n    }\n\n    getInstanceID(): string {\n        return this.configuration?.instanceID ?? paginationDefaultConfiguration.instanceID\n    }\n\n    getOnBeforePageChange(): CallableFunction {\n        return this.configuration?.onBeforePageChange ?? paginationDefaultConfiguration.onBeforePageChange\n    }\n\n    getOnAfterPageChange(): CallableFunction {\n        return this.configuration?.onAfterPageChange ??  paginationDefaultConfiguration.onAfterPageChange\n    }\n\n    getOnBeforePageChangeSize(): CallableFunction {\n        return this.configuration?.onBeforePageChangeSize ?? paginationDefaultConfiguration.onBeforePageChangeSize\n    }\n    \n    getOnAfterPageChangeSize(): CallableFunction {\n        return this.configuration?.onAfterPageChangeSize ?? paginationDefaultConfiguration.onAfterPageChangeSize;\n    }\n    \n    getDisplayText(): CallableFunction {\n        return this.configuration?.displayText ?? paginationDefaultConfiguration.displayText\n    }\n    \n    getShowTotal(): CallableFunction {\n        return this.configuration?.showTotal ?? paginationDefaultConfiguration.showTotal\n    }\n\n    getShowShowTotal(): boolean {\n        return this.configuration?.showShowTotal ?? paginationDefaultConfiguration.showShowTotal\n    }\n    \n    getPageSize(): number {\n        return this.configuration?.initialPageSize ?? paginationDefaultConfiguration.initialPageSize; \n    }\n    \n    getInitialPageSize(): number {\n        return this.configuration?.initialPageSize ?? paginationDefaultConfiguration.initialPageSize;\n    }\n    \n    getInitialPageNumber(): number {\n        return this.configuration?.initialPageNumber ?? paginationDefaultConfiguration.initialPageNumber;\n    }\n    \n    getPageSizeOptions(): number[] {\n        return this.configuration?.pageSizeOptions ?? paginationDefaultConfiguration.pageSizeOptions;\n    }\n    \n    getBoundaryCount(): number {\n        return this.configuration?.boundaryCount ??  paginationDefaultConfiguration.boundaryCount;\n    }\n    \n    getDotJumpeCount(): number {\n        return this.configuration?.dotJumpCount ?? paginationDefaultConfiguration.dotJumpCount;\n    }\n    \n    showFirstIcon(): boolean {\n        return this.configuration?.showFirstIcon ?? paginationDefaultConfiguration.showFirstIcon;\n    }\n    \n    showPreviousIcon(): boolean {\n        return this.configuration?.showPreviousIcon ?? paginationDefaultConfiguration.showPreviousIcon;\n    }\n    \n    showNextIcon(): boolean {\n        return this.configuration?.showNextIcon ?? paginationDefaultConfiguration.showNextIcon;\n    }\n    \n    showLastIcon(): boolean {\n        return this.configuration?.showLastIcon ?? paginationDefaultConfiguration.showLastIcon;\n    }\n    \n    hasPageSizeChanger(): boolean {\n        return this.configuration?.hasPageSizeChanger ?? paginationDefaultConfiguration.hasPageSizeChanger;\n    }\n    \n    hasQuickJumper(): boolean {\n        return this.configuration?.quickJumper ?? paginationDefaultConfiguration.quickJumper;\n    }\n    \n    isDisabled(): boolean {\n        return this.configuration?.disabled ?? paginationDefaultConfiguration.disabled;\n    }\n    \n    isReadOnly(): boolean {\n        return this.configuration?.readonly ?? paginationDefaultConfiguration.readonly;\n    }\n    \n    hasDotJumper(): boolean {\n        return this.configuration?.dotJump ?? paginationDefaultConfiguration.dotJump;\n    }\n    \n    hasLoop(): boolean {\n        return this.configuration?.loop ??  paginationDefaultConfiguration.loop;\n    }\n    \n    hasTripleDot(): boolean {\n        return this.configuration?.hasTripleDot ?? paginationDefaultConfiguration.hasTripleDot;\n    }\n    \n    getSlot(): ISlots | any {\n        return this.configuration?.slot ?? paginationDefaultConfiguration.slot\n    }\n    \n    getParentContainer(): HTMLElement {\n        return this.configuration?.appendTo ?? paginationDefaultConfiguration.appendTo\n    }\n    isMultiple(): boolean {\n        return false\n    }\n    isSearchable(): boolean {\n        return false\n    }\n    getOptions(): object {\n        return {};\n    }\n    getPlaceHolder(): string {\n        return 'select-component';\n    }\n\n}\n\nexport {\n    PaginationOptionHandler\n}","\nimport {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\n@Bean('stateManager')\n class PaginationStateManager extends EventEmitter {\n\n    isInValid() : boolean {\n        return false;\n    }\n}\nexport {\n    PaginationStateManager\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\nimport { PaginationRootController } from \"../pagination-root/pagination-root-controller\";\n\n\n@Bean(PAGINATION_BEAN_NAME.PAGINATION_CONTROLLER_HANDLER)\nclass PaginationControllerHandler extends EventEmitter {\n\tprivate PaginationCtrl !: PaginationRootController;\n\tregisterPaginationCtrl(PaginationCtrl: PaginationRootController): void {\n\t\tthis.PaginationCtrl = PaginationCtrl;\n\t}\n\n\tgetPaginationCtrl(): PaginationRootController {\n\t\treturn this.PaginationCtrl;\n\t}\n}\n\nexport {\n    PaginationControllerHandler\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport {EventEmitter}from '@dg/corecomponent/EventEmitter.js';\nimport { IPaginationAPI } from \"./pagination-api.types\";\n\nimport { PaginationOptionsHandlerTypes } from \"./pagination-options-handler.types\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\nimport {  PaginationControllerHandler } from \"./pagination-controller\";\nimport { IPaginationDataHandler } from \"../../DataHandler/IPaginationDataHandler\";\nimport { IPaginationConfigurations } from \"../../pagination-configuration.types\";\n\n\n\n@Bean(PAGINATION_BEAN_NAME.PAGINATION_API)\nclass PaginationAPI extends EventEmitter implements IPaginationAPI{\n    \n   \n    \n   \n   \n    @AutoWired('configuration') configuration!: IPaginationConfigurations;\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_CONTROLLER_HANDLER) controllerHandler !: PaginationControllerHandler;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: PaginationOptionsHandlerTypes;\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_DATA_HANDLER) dataHandler!: IPaginationDataHandler;\n\n\n    getName() { return PAGINATION_BEAN_NAME.PAGINATION_API};\n\n    updateProperty(options : IPaginationConfigurations) {\n        const properties = Object.keys(this.configuration);\n\n        properties.forEach((_key) => {\n        })\n        this.dispatchEvent({\n            type : \"PROPERTY_CHANGED\",\n            options     \n        })\n    }\n\n    destroy(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    onBlur(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    onFocus(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    getValue(): string | number {\n        throw new Error(\"Method not implemented.\");\n    }\n\n    goToNextPage(): void {\n        return this.dataHandler.goToNextPage();\n    }\n\n    goToPreviousPage(): void {\n        return this.dataHandler.goToPreviousPage();\n    }\n\n    goToLastPage(): void {\n        return this.dataHandler.goToLastPage();\n    }\n\n    goToFirstPage(): void {\n        return this.dataHandler.goToFirstPage();\n    }\n\n    goToPage(page: number): void {\n        return this.dataHandler.goToPage(page);\n    }\n\n    updateCount(count: number): void {\n        return this.dataHandler.updateCount(count)\n    }\n    changePageSize(pageSize: number): void {\n        this.dataHandler.setPageSize(pageSize)\n    }\n    changePageSizeOptions(pageSizes: number[]): void {\n        this.dataHandler.changePageSizes(pageSizes)\n    }\n\n    getPageSize(): number {\n        return this.dataHandler.getPageSize()\n    }\n    getPage(): number {\n        return this.dataHandler.getPage()\n    }\n \n}\n\nexport {\n    PaginationAPI\n}","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport {  UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { PaginationUserComponentHandlerTypes } from \"./pagination-user-component-handler.types\";\n\n\nexport const enum PropertyName {\n\tHELPER_TEXT_RENDERER = 'helpTextRenderer',\n}\n\nexport const  PropertyNames =  {\n\tBUTTON_RENDERER      : 'buttonRenderer'\n}\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\n class PaginationUserComponentHandler extends UserComponentHandler implements PaginationUserComponentHandlerTypes{\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tgetHelperTextRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\t\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta{\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\tgetButtonRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyNames.BUTTON_RENDERER, params, PropertyNames.BUTTON_RENDERER);\n\t}\n\t\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(_item : any, propertyName : PropertyName, _params : any) : any {\n        switch(propertyName) {\n            default:\n                return {};\n        }\n\n    }\n}\n\n\nexport {\n    PaginationUserComponentHandler\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../../../Multiline/src/modules/CSSRegistry\";\n\n\n\n\ninterface OwnerStateType {\n    disabled : boolean;\n}\nfunction getPaginationUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('pagination', slots.slot, slots.modifiers, globalNameSpace as string[]);\n\n  }\n\nexport {\n    OwnerStateType,\n    getPaginationUtilityClass\n}","import { composeClasses } from \"@dg/utils\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { PaginationButtonType } from \"./pagination-button.types\";\nimport { getPaginationUtilityClass } from \"../pagination-root/pagination-root-classes\";\n\n\nconst useUtilityClasses = (ownerState : any) => {\n    const {disabled, role} = ownerState;\n\tconst slots = {\n\t\troot    : {\n            slot     : role,\n            modifiers: [\n                disabled && 'disabled'\n            ]\n        }\n\t};\n\treturn composeClasses(slots, getPaginationUtilityClass);\n};\n\nclass PaginationButtonController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: any;\n    \n    private comp !: PaginationButtonType;\n\n    ownerState : {disabled : boolean|null} = {disabled : null,};\n    setComp(comp : PaginationButtonType) : void {\n        this.comp = comp;\n        this.applyState();\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.applyState.bind(this));\n    }\n\n    private applyState() : void {\n        this.setRendererDetails();\n    }\n\n    private setRendererDetails() : void {\n        \n        const params          = this.createRendererParams();\n        const rendererWrapper = this.createRendererWrapper();\n        const compDetails     = this.userComponentHandler.getButtonRendererDetails(rendererWrapper, params);\n\n        this.comp.setRendererDetails(compDetails);\n    }\n\n    private createRendererParams() {\n        const params = this.comp.getParams() ?? {};\n        return {\n            parentElement: this.comp.getElement(),\n            callback     : (event :any) => params.callback && params.callback(event),\n            showIcon     : true,\n            showText     : false,\n            ariaLabel    : params.getRole(),\n            label        : params.label,\n            icon         : params.icon\n\t\t};\n    }\n\n    private createRendererWrapper() {\n        const {getRenderer, getRendererParams} = this.comp.getParams() ?? {};\n        return {\n\t\t\tgetRenderer          : () => getRenderer ? getRenderer() : undefined,\n\t\t\tgetUserRendererParams: () => getRendererParams ? getRendererParams() : undefined\n\t\t}\n    } \n\n    getOwnerState() {\n        const {  getRole, icon } = this.comp.getParams() ?? {};\n        return {\n            role : getRole(),\n            icon : icon\n        }\n    }\n\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n\n  \n\n\n}\nexport {\n    PaginationButtonController,\n    useUtilityClasses\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { PaginationButtonController } from \"./pagination-button-controller\";\nimport { PaginationButtonType } from \"./pagination-button.types\";\n\nconst PaginationButtonTemplate = () => {\n\tlet button =  document.createElement('button');\n    return button as HTMLElement;\n}\nclass PaginationButtonComponent extends Component {\n\tprivate renderer: any;\n\tprivate rendererElement: any;\n    private params : any;\n\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.setTemplate(PaginationButtonTemplate());\n\t\tconst comp : PaginationButtonType = {\n            addOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n            setRendererDetails : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getElement         : () => this.getGui(),\n            getParams          : () => this.params,\n\t\t\t\n\t\t};\n\n\t\tconst controller = this.createBean(new PaginationButtonController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className;\n\t}\n\tprotected destroy(): void {\n\t\tthis.getGui().remove()\n\n}\n\n\t\n}\n\nexport {\n\tPaginationButtonComponent\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { paginationDefaultConfiguration } from \"../core/utiility\";\nimport { IPaginationDataHandler } from \"./IPaginationDataHandler\";\nimport { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { PAGINATION_BEAN_NAME } from \"../constants/beaname-constants\";\nimport { PaginationOptionsHandlerTypes } from \"../core/model/pagination-options-handler.types\";\nimport { IPaginationConfigurations } from \"../pagination-configuration.types\";\n\n@Bean(PAGINATION_BEAN_NAME.PAGINATION_DATA_HANDLER)\nclass PaginationDataHandler extends Component implements IPaginationDataHandler{\n    private pageNumber: number = paginationDefaultConfiguration.initialPageNumber;\n    private pageSize  : number = paginationDefaultConfiguration.initialPageSize;\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_CONFIGURATION) config !: IPaginationConfigurations;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: PaginationOptionsHandlerTypes;\n    @AutoWired('stateManager') protected stateManager !: { dispatchEvent: (event: { type: string }) => void };\n\n\n    @PostConstruct()\n    init(){\n        const defaultInitialPage     = paginationDefaultConfiguration.initialPageNumber;\n        const defaultInitialPageSize = paginationDefaultConfiguration.initialPageSize;\n        const initialPageSize        = this.config.initialPageSize ?? defaultInitialPageSize;\n        const initialPageNumber      = this.config.initialPageNumber ?? defaultInitialPage;\n        this.pageSize                = this.isValidPageSize(initialPageSize) ? initialPageSize : paginationDefaultConfiguration.initialPageSize;\n        this.pageNumber              = this.isValidPage(initialPageNumber) ? initialPageNumber : paginationDefaultConfiguration.initialPageNumber;\n    }\n\n    isValidPageSize(size : number)  : boolean{\n        const type = typeof size;\n        if(type == 'number'){\n            const isValid  = size>0\n            return isValid;\n        }\n        return false\n    }\n    isValidPage(pageNumber:  number) : boolean{\n        const type = typeof pageNumber;\n        if(type == 'number'){\n            const totalPageNumber = this.getTotalPages();\n            const isValidPage     = (pageNumber > 0) && (pageNumber <= totalPageNumber);\n            return isValidPage;\n        }\n        return false\n    }\n   \n    isNextPageAllowed(): boolean {\n        const hasLoop         = this.hasLoop();\n        const totalPageNumber = this.getTotalPages()\n        return (this.pageNumber < totalPageNumber) || (hasLoop);\n    }\n    \n    isPreviousAllowed(): boolean {\n        const hasLoop =  this.hasLoop();\n        return (this.pageNumber > 1) || hasLoop;\n    }\n\n    getSiblingArray()  : number[]{\n        const totalPage             = this.getTotalPages();\n        const boundaryArray         = this.getBoundaryArray();\n        const boundaryArrayLength   = boundaryArray.length;\n        const siblingCount          = this.getSiblingCount();\n        const siblingArrayCount     = (siblingCount * 2) + 1;\n        const activePage            = this.getPage();\n        const ellipsisCount         = 2;\n        const totalPageSetLength    = boundaryArrayLength + siblingArrayCount + ellipsisCount;\n        const leftBoundaryLast      = boundaryArray[(boundaryArrayLength / 2) - 1];\n        const rightBoundaryFirst    = boundaryArray[boundaryArrayLength / 2];\n        const leftEllipsisPosition  = leftBoundaryLast + 1;\n        const rightEllipsisPosition = rightBoundaryFirst - 1;\n\n        const sibArr : number[] =[];\n        let startPage : number;\n\n        if (totalPage >= totalPageSetLength) {\n            if (boundaryArrayLength == 0) {\n                startPage           = (activePage - siblingCount);\n                const maxBoundary   = totalPage-siblingArrayCount+1;\n                startPage           = Math.min(maxBoundary,  Math.max(1, startPage));\n            }\n            else if (leftEllipsisPosition < (activePage - siblingCount) && (activePage + siblingCount) < rightEllipsisPosition) {       //two ellipsis present in this state ('...')\n                startPage = activePage- siblingCount;\n            }\n            else {\n                const leftDiff    = Math.abs(leftBoundaryLast - activePage);\n                const rightDiff   = Math.abs(rightBoundaryFirst - activePage);\n                if (leftDiff > rightDiff) {\n                    startPage = rightEllipsisPosition - siblingArrayCount;\n                }\n                else {\n                    startPage = leftEllipsisPosition+1;\n                }\n            }\n        }\n        else {\n            return []\n        }\n        \n        for (let index = startPage; index < startPage+siblingArrayCount; index++) {\n            sibArr.push(index);\n        }\n        return sibArr;\n    }\n\n    getBoundaryArray() :  number[]{\n            return [...this.getLeftBoundaryArray(),...this.getRightBoundaryArray()]\n    }\n\n    getLeftBoundaryArray() : number[]{\n        const leftBoundaryArray : number[]  = [];\n        const minimumpage         = 1;\n        const boundaryCount       = this.getBoundaryCount();\n        for (let index = minimumpage; index <= boundaryCount; index++) {\n           leftBoundaryArray.push(index)\n        }\n        return leftBoundaryArray\n    }\n    getRightBoundaryArray() : number[]{\n        const rightBoundaryArray  : number[]  = [];\n        const maximumPage           = this.getTotalPages();\n        const boundaryCount         = this.getBoundaryCount();\n        for (let index = maximumPage-boundaryCount+1; index <= maximumPage; index++) {\n            rightBoundaryArray.push(index);\n        }\n        return rightBoundaryArray;\n    }\n\n    getTotalPages(): number  {\n        const totalCount    = this.getCount();\n        const pageSize      = this.getPageSize();\n        return  Math.ceil( totalCount / pageSize);\n    }\n    \n    getPage(): number {\n        if(this.pageNumber && this.pageNumber>0){\n            return Math.floor(this.pageNumber);\n        }\n        return paginationDefaultConfiguration.initialPageNumber;\n    }\n\n    getCount(): number {\n        if (typeof this.config.count === 'number' && this.config.count >= 0) {\n            return this.config.count;\n        }\n        return paginationDefaultConfiguration.count;\n    }\n    getInitialPage(): number {\n        return this.config.initialPageNumber ?? paginationDefaultConfiguration.initialPageNumber\n    }\n    getPageSize(): number {\n        if(this.pageSize && this.pageSize > 0){\n            return Math.floor(this.pageSize);\n        }\n        return paginationDefaultConfiguration.initialPageSize;\n    }\n    getSiblingCount(): number {\n        const siblingCount =  this.config.siblingCount   ?? paginationDefaultConfiguration.siblingCount;\n        if(siblingCount<0){\n            return 0\n        };\n        return Math.floor(siblingCount);\n    }\n    getBoundaryCount(): number {\n        const boundaryCount =  this.config.boundaryCount ?? paginationDefaultConfiguration.boundaryCount;\n        if(boundaryCount < 0 ){\n            return 0;\n        };\n        return Math.floor(boundaryCount);\n    }\n\n    hasLoop(): boolean {\n        return this.config.loop ?? paginationDefaultConfiguration.loop;\n    }\n\n    hasDotJumper(): boolean {\n        return this.config.dotJump ?? paginationDefaultConfiguration.dotJump;\n    }\n    isDisabled(): boolean {\n        return this.config.disabled ?? paginationDefaultConfiguration.disabled;\n    }\n    hasQuickJumper(): boolean {\n        return  this.config.quickJumper ?? paginationDefaultConfiguration.quickJumper;\n    }\n    getMode(): string {\n        return this.config.mode ?? paginationDefaultConfiguration.mode;\n    }\n    getShape(): string {\n        return this.config.shape ?? paginationDefaultConfiguration.shape;\n    }\n    getSize(): string {\n        return this.config.size ?? paginationDefaultConfiguration.size;\n    }\n\n    getDotCount(): number {\n        return this.config.dotJumpCount ?? paginationDefaultConfiguration.dotJumpCount;\n    }\n\n    hasFirstIcon(): boolean {\n        return this.config.showFirstIcon ?? paginationDefaultConfiguration.showFirstIcon;\n    }\n    hasLastIcon(): boolean {\n        return this.config.showLastIcon ?? paginationDefaultConfiguration.showLastIcon;\n    }\n    hasNextIcon(): boolean {\n        return this.config.showNextIcon ?? paginationDefaultConfiguration.showNextIcon;\n    }\n    hasPreviousIcon(): boolean {\n        return this.config.showPreviousIcon ?? paginationDefaultConfiguration.showPreviousIcon\n    }\n\n    onBeforePageChange(page : number) {\n        // return this.config.onBeforePageChange(page) ?? paginationDefaultConfiguration.onBeforePageChange(page);\n        return this.config.onBeforePageChange  ? this.config.onBeforePageChange(page) : paginationDefaultConfiguration.onBeforePageChange(page);\n    }\n    onAfterPageChange(page :  number) {\n        // return this.config.onAfterPageChange(page) ?? paginationDefaultConfiguration.onAfterPageChange(page);\n        return this.config.onAfterPageChange ? this.config.onAfterPageChange(page) : paginationDefaultConfiguration.onAfterPageChange(page);\n        \n    }\n    onBeforePageSizeChange(pageSize : number) {\n        // return this.config.onBeforePageChangeSize(pageSize) ?? paginationDefaultConfiguration.onBeforePageChangeSize(pageSize);\n        return  this.config.onBeforePageChangeSize ? this.config.onBeforePageChangeSize(pageSize) : paginationDefaultConfiguration.onBeforePageChangeSize(pageSize);\n    }\n    onAfterPageSizeChange() {\n        // return this.config.onAfterPageChangeSize(this.pageSize) ?? paginationDefaultConfiguration.onAfterPageChangeSize(this.pageSize);\n        return this.config.onAfterPageChangeSize ? this.config.onAfterPageChangeSize(this.pageSize) : paginationDefaultConfiguration.onAfterPageChangeSize(this.pageSize);\n    }\n\n    hasTripleDot() : boolean {\n        return this.config.hasTripleDot ?? paginationDefaultConfiguration.hasTripleDot;\n    }\n    hasPageSizeChanger(): boolean {\n        return this.config.hasPageSizeChanger ?? paginationDefaultConfiguration.hasPageSizeChanger;\n    }\n\n    getNextPage(): number {\n        let computedPage;\n        const currentpage       = this.getPage();\n        const totalPageNumber   = this.getTotalPages();\n        const hasLoop           = this.hasLoop();\n        const firstPage         = 1;\n        const nextPage          = currentpage+1;\n        \n        if(hasLoop){\n            computedPage = (currentpage % totalPageNumber == 0) ? firstPage : nextPage; \n        }\n        else{\n            computedPage = nextPage\n        }\n        return computedPage;\n\n    }\n    \n    getPreviousPage(): number {\n        let computedPage;\n        const firstPage       = 1;\n        const previousPage    = this.getPage()-1;\n        const totalPageNumber = this.getTotalPages();\n        const hasLoop         = this.hasLoop();\n        if(hasLoop){\n            computedPage = (previousPage ===  0) ? totalPageNumber: previousPage;\n        }\n        else{\n            computedPage = Math.max(previousPage, firstPage);\n        }\n        return computedPage;\n    }\n    \n    goToPage(page: number): void {\n        const type = typeof page;\n        if (type !== 'number') return;\n        const pageNumber = Math.floor(page);\n        const totalPageNumber = this.getTotalPages();\n        if (pageNumber <= totalPageNumber && pageNumber > 0) {\n            const onBefore = () => this.config.onBeforePageChange?.(pageNumber) ?? paginationDefaultConfiguration.onBeforePageChange(pageNumber);\n            const onAfter = () => this.config.onAfterPageChange?.(pageNumber) ?? paginationDefaultConfiguration.onAfterPageChange(pageNumber);\n            const canProceed = onBefore();\n            if (canProceed !== false) {\n                this.pageNumber = pageNumber;\n                onAfter();\n                this.stateManager?.dispatchEvent?.({ type: 'paginationStateChanged' });\n            }\n        }\n    }\n\n    setPageSize(size: number): void {\n        if (!this.isValidPageSize(size)) return;\n        const onBefore = () => this.config.onBeforePageChangeSize?.(size) ?? paginationDefaultConfiguration.onBeforePageChangeSize(size);\n        const onAfter = () => this.config.onAfterPageChangeSize?.(this.pageSize) ?? paginationDefaultConfiguration.onAfterPageChangeSize(this.pageSize);\n        const canProceed = onBefore();\n        if (canProceed !== false) {\n            this.pageSize = size;\n            const totalPages = this.getTotalPages();\n            if (this.pageNumber > totalPages) {\n                this.pageNumber = Math.max(1, totalPages);\n            }\n            onAfter();\n            this.stateManager?.dispatchEvent?.({ type: 'paginationStateChanged' });\n        }\n    }\n\n    goToNextPage(): void {\n        const nextPage = this.getNextPage();\n        this.goToPage(nextPage);\n    }\n    goToPreviousPage(): void {\n        const previousPage = this.getPreviousPage();\n        this.goToPage(previousPage);\n    }\n    goToFirstPage(): void {\n        this.goToPage(1);\n    }\n\n    goToLastPage(): void {\n        const totalPageNumber = this.getTotalPages();\n        this.goToPage(totalPageNumber);\n    }\n   \n    updateConfiguration(config : IPaginationConfigurations, force ? : boolean ): void {\n        this.config = force ? config : { ...this.config, ...config };\n    }\n\n    updateCount(count: number): void {\n        this.config.count = count;\n        const totalPages = this.getTotalPages();\n        if (this.pageNumber > totalPages) {\n            this.pageNumber = Math.max(1, totalPages);\n        }\n        this.stateManager?.dispatchEvent?.({ type: 'paginationStateChanged' });\n    }\n\n    getDisplayText():  CallableFunction{\n        return this.config.displayText ?? paginationDefaultConfiguration.displayText;\n    }\n\n    changePageSizes(pageSizes: number[]): void {\n        let pageSizeArray             = Array.from(new Set(pageSizes));\n         pageSizeArray                = pageSizeArray.filter(num => this.isValidPageSize(num));\n        this.config.pageSizeOptions   = pageSizeArray;\n    }\n\n    getPageSizeArray(): number[] {\n        if (this.config.pageSizeOptions) {\n            const pageSize = this.getPageSize();\n            const baseOptions = [...this.config.pageSizeOptions];\n            if (!baseOptions.includes(pageSize)) {\n                baseOptions.push(pageSize);\n            }\n            const filtered = baseOptions.filter((size: number) => this.isValidPageSize(size));\n            const unique = [...new Set(filtered)];\n            unique.sort((a: number, b: number) => a - b);\n            return unique.length === 0 ? paginationDefaultConfiguration.pageSizeOptions : unique;\n        }\n        return paginationDefaultConfiguration.pageSizeOptions;\n    }\n    \n    getShowTotal() : CallableFunction{\n        return this.config.showTotal ?? paginationDefaultConfiguration.showTotal\n    }\n\n    getButtons()  : (number | string)[] {\n        const boundaryCount       = this.getBoundaryCount();\n        const siblingCount        = this.getSiblingCount();\n        const siblingArrayCount   = (siblingCount*2) + (boundaryCount*2) + 1;\n        let combinedArray         = [...this.getBoundaryArray(),...this.getSiblingArray()];\n        combinedArray             = [...new Set(combinedArray)]\n        combinedArray.filter(a=>this.isValidPage(a)); \n        combinedArray.sort((a,b)=>a-b);\n        const pageSet             = combinedArray;\n    \n        const arr  :  (number | string)[] = [];\n        if(siblingArrayCount == pageSet.length){\n            for (let i = 0; i < pageSet.length; i++) {\n                const next    = pageSet[i + 1];\n                const current = pageSet[i];\n                arr.push(current);\n                if (current + 1 != next && next) {\n                    if(Math.abs(next-current) ==2){\n                        arr.push(current+1)\n                    }\n                    else{\n                        arr.push('...');\n                    }\n                }\n            }\n        }\n        else{\n            const lastElement = pageSet[pageSet.length-1];\n            for(let i=0;i<lastElement;i++){\n                arr.push(i+1)\n            }\n        }\n        if(arr.length == 0){\n            arr.push(1);\n        }\n        return arr\n    }\n    getFirstButtonIcon(): HTMLElement  |  null | Text{\n        const icon = this.config?.slot?.firstIcon;\n        if (this.hasFirstIcon() && icon !== undefined) {\n            if (typeof icon === 'string' || typeof icon === 'number') {\n                return document.createTextNode(`${icon}`);\n            }\n            return icon;\n        }\n        return null;\n    }\n    getLastButtonIcon(): HTMLElement  |  null | Text{\n        const icon = this.config?.slot?.lastIcon;\n        if (this.hasLastIcon() && icon !== undefined) {\n            if (typeof icon === 'string' || typeof icon === 'number') {\n                return document.createTextNode(`${icon}`);\n            }\n            return icon;\n        }\n        return null;\n        \n    }\n    getPreviousIcon(): HTMLElement |  null | Text{\n        const icon = this.config?.slot?.previousIcon;\n        if (this.hasPreviousIcon() && icon !== undefined) {\n            if (typeof icon === 'string' || typeof icon === 'number') {\n                return document.createTextNode(`${icon}`);\n            }\n            return icon;\n        }\n        return null;\n        \n    }\n    getNextIcon(): HTMLElement  |  null | Text{\n        const icon = this.config?.slot?.nextIcon;\n        if (this.hasNextIcon() && icon !== undefined) {\n            if (typeof icon === 'string' || typeof icon === 'number') {\n                return document.createTextNode(`${icon}`);\n            }\n            return icon;\n        }\n        return null;\n    }\n\n}\n\nexport {\n    PaginationDataHandler\n}","import { PageSetViewType } from \"./pageset-view-types\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getPaginationUtilityClass } from \"../pagination-root/pagination-root-classes\";\nimport { PaginationOptionsHandlerTypes } from \"../model/pagination-options-handler.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'pagintationUL',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getPaginationUtilityClass)\n}\n\n\nclass PageSetController extends AbstractController<PageSetViewType>{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: PaginationOptionsHandlerTypes;\n     parentComponent!: any;\n    \n    setComponent(comp : PageSetViewType ) {\n        this.component    = comp;\n        this.applyClassNames();\n        this.setAriaAttributes();\n        this.registerEventListener();\n    }\n   init(){\n    }\n    \n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    getProperty(){\n       return{\n       }\n    }\n\n    setAriaAttributes():void{\n    }\n\n    getParamsProperty() {\n        return {\n\t\t};\n    }\n\n    goToPreviousPage():void{\n    }\n    goToNextPage():void{\n    }\n\n    goToLastPage():void{\n    }\n\n    goToFirstPage():void{\n\n    }\n\n    registerEventListener(): void {\n    }\n\n    rerender():void{\n        this.applyClassNames();\n\n    }\n\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n\n\n\n\n}\n\n\nexport {\n    PageSetController\n}","import { AutoWired, Bean, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { PageSetViewType } from \"./pageset-view-types\";\nimport { PageSetController } from \"./pageset-controller\";\nimport { IPaginationDataHandler } from \"../../DataHandler/IPaginationDataHandler\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\nimport { IButtonConfiguration } from \"../../../../button/src/button-configuration.types\";\nimport { Button } from \"../../../../button/src/button\";\nimport { removeCommonElements } from \"../utiility\";\n\n\nconst pageSetTemplate = () =>{\n\tconst pageSet =  document.createElement('ul');\n\treturn pageSet as HTMLElement;\n}\n\ninterface IPaginationPageSet{\n\tsetButtonComponent() :  void;\n\tarraySetter(pageButtons :(number | string)[]) :  any[][]\n}\n@Bean(PAGINATION_BEAN_NAME.PAGINATION_UI_UPDATE_HANDLER)\nclass  PaginationPageSetComponent extends Component implements IPaginationPageSet{\n\t@queryAssignedNodes('prevNavigators')  prevNavigators!: HTMLElement;\n\t@queryAssignedNodes('nextNavigators')  nextNavigators!: HTMLElement;\n\t@queryAssignedNodes('siblingElement') siblingElement !: HTMLElement;\n\n\t@queryAssignedNodes('rightBoundaryElemet') rightBoundaryElement!: HTMLElement;\n\t@queryAssignedNodes('leftBoundaryElement') leftBoundaryElement! : HTMLElement;\n\n\t@queryAssignedNodes('rightEllipsisDom') rightEllipsisDom!: HTMLElement;\n\t@queryAssignedNodes('leftEllipsisDom') leftEllipsisDom!  : HTMLElement;\n\n\t@queryAssignedNodes('nextPageUI') nextPageUI        !    : HTMLButtonElement;\n\t@queryAssignedNodes('previousPageUI') previousPageUI    !: HTMLButtonElement;\n\t@queryAssignedNodes('lastPageUI') lastPageUI        !    : HTMLButtonElement;\n\t@queryAssignedNodes('firstPageUI') firstPageUI       !   : HTMLButtonElement;\n\t@queryAssignedNodes('subElement') subElement       !   : HTMLElement;\n\t@queryAssignedNodes('pageSet') pageSet       !   : HTMLElement;\n\n\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_DATA_HANDLER) dataHandler!: IPaginationDataHandler;\n    @AutoWired('stateManager') private stateManager!: { addEventListener?: (event: string, handler: () => void) => void };\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tthis.stateManager?.addEventListener?.('paginationStateChanged', () => this.setButtonComponent());\n\n\t\tconst component  :  PageSetViewType = {\n\t\t\tgetElement : () => this.getGui() as HTMLElement,\n\t\t\taddOrRemoveCssClass :(className :  string) => this.addOrRemoveCSSClass(className)\n\t\t}\n\t\tconst controller = this.createManagedBean(new PageSetController);\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): PageSetViewType | any {\n\t\treturn {\n\t\t\t\n\t\t}\n\n\t}\n\tprivate addOrRemoveCSSClass(className: string) : void {\t\t\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\n\n\n\tprivate renderTemplate(_controller: PageSetController) {\n\t\tconst template = pageSetTemplate();\n\t\tthis.pageSet = template;\n\t\tconst subElement =  document.createElement('sub-element');\n\t\tthis.subElement =  subElement;\n        this.setTemplate(template);\n\t\tthis.setButtonComponent();\n\t}\n\n\tsetButtonComponent() {\n\t\tthis.pageSet.textContent = '';\n\t\tconst classListArray = [\n\t\t\t'DG-paginationNavPrevList',\n\t\t\t'DG-paginationBoundaryPointFirst',\n\t\t\t'DG-PaginationItemEllipsisLeft',\n\t\t\t'DG-paginationSiblingPoint',\n\t\t\t'DG-PaginationItemEllipsisRight',\n\t\t\t'DG-paginationBoundaryPointLast',\n\t\t\t'DG-paginationNavNextList'\n\t\t];\n\t\n\t\t// Create elements and add to the pageSet\n\t\tconst elementArray : any[]= [];\n\t\tclassListArray.forEach((className, index) => {\n\t\t\tconst element = this.subElement.cloneNode(true) as HTMLElement;\n\t\t\telement.classList.add(className);\n\t\t\tthis.pageSet.appendChild(element);\n\t\t\telementArray[index] = element;\n\t\t});\n\t\n\t\tconst prevNavigators = ['⬅️', '←'];\n\t\tconst nextNavigators = ['→', '➡️'];\n\t\tconst pages = this.dataHandler.getButtons();\n\t\tconst pageArray = this.arraySetter(pages);\n\t\n\t\tpageArray.unshift(prevNavigators);\n\t\tpageArray.push(nextNavigators);\n\t\n\t\tconst currentPage = this.dataHandler.getPage();\n\t\tpageArray.forEach((array, index) => {\n\t\t\tconst element = elementArray[index];\n\t\t\tarray.forEach((text, buttonIndex) => {\n\t\t\t\tconst pageNum = Number(array[buttonIndex]);\n\t\t\t\tconst isActivePage = !isNaN(pageNum) && pageNum === currentPage;\n\t\t\t\tconst buttonConfig: IButtonConfiguration = {\n\t\t\t\t\tappendTo: element ?? document.body,\n\t\t\t\t\ttext: text.toString(),\n\t\t\t\t\tshowText: true,\n\t\t\t\t\tcallback: (_event: KeyboardEvent) => this.handlePageNavigation(index, buttonIndex, pageArray),\n\t\t\t\t\tclasses: isActivePage ? 'DG-paginationActivePage' : undefined,\n\t\t\t\t};\n\t\t\t\tnew Button(buttonConfig);\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandlePageNavigation(index: number, buttonIndex: number, pageArray: any[]) {\n\t\tconst value = pageArray[index][buttonIndex] ?? pageArray[index];\n\t\tconst page = Number(value);\n\t\tconst isValidPage = this.dataHandler.isValidPage(page);\n\n\t\tif (index === 0) {\n\t\t\tif (buttonIndex === 0) {\n\t\t\t\tthis.dataHandler.goToFirstPage();\n\t\t\t} else {\n\t\t\t\tthis.dataHandler.goToPreviousPage();\n\t\t\t}\n\t\t} else if (index === pageArray.length - 1) {\n\t\t\tif (buttonIndex === 0) {\n\t\t\t\tthis.dataHandler.goToNextPage();\n\t\t\t} else {\n\t\t\t\tthis.dataHandler.goToLastPage();\n\t\t\t}\n\t\t} else if (isValidPage) {\n\t\t\tthis.dataHandler.goToPage(page);\n\t\t}\n\t\tthis.setButtonComponent();\n\t}\n\t\n\t\n\n\tarraySetter(pageButtons :(number | string)[]) :  any[][]{\n\t\tconst buttonShape                   = this.dataHandler.getShape();\n\n        let leftBoundary = this.dataHandler.getLeftBoundaryArray();\n        let rightBoundary =  this.dataHandler.getRightBoundaryArray();\n        let siblingArray = this.dataHandler.getSiblingArray();\n        let mergedArray = [...new Set([...leftBoundary, ...rightBoundary])];\n        let newArr = [...leftBoundary,...siblingArray,...rightBoundary];\n        let missedArray = pageButtons.filter(element => newArr.indexOf(Number(element)) === -1);\n        let missingElements = [missedArray[0],missedArray[missedArray.length-1]];\n        const displayText =  this.dataHandler.getDisplayText();\n\t\tconst emptyArray :  any[] =[];\n\t\tif(missingElements.length){\n            const ellipsisElements =[this.leftEllipsisDom,this.rightEllipsisDom];  \n            for (let index = 0; index < ellipsisElements.length; index++) {\n                if(missingElements[index]){\n\t\t\t\t\temptyArray.push(missingElements[index]);\n                    if(buttonShape =='circular'){\n                    }\n                    if(this.dataHandler.isValidPage(missingElements[index])){\n                        const element=  displayText(missingElements[index]);\n                        if(element?.nodeType == '1'){\n                            // ellipsisDom.textContent ='';\n\t\t\t\t\t\t\temptyArray.push('');\n                        }\n                        else{\n\t\t\t\t\t\t\tconst value = (element ?? missingElements[index]).toString();\n\t\t\t\t\t\t\temptyArray.push(value);\n                        }\n                    }\n    \n                }\n                \n            }\n            \n        }\n        const hasLoop  = this.dataHandler.hasLoop();\n        [this.lastPageUI,this.nextPageUI,this.previousPageUI,this.firstPageUI].forEach((_ele)=>{\n            // ele.disabled=false;\n        });\n        // (currentPage == maximumPage) && (this.lastPageUI.disabled =true);\n        // (currentPage ==1) && (this.firstPageUI.disabled = true); \n        if(!hasLoop){\n            // (currentPage == maximumPage) && (this.nextPageUI.disabled =true);\n            // (currentPage ==1) && (this.previousPageUI.disabled = true); \n        }\n        if((leftBoundary.length+rightBoundary.length)!= mergedArray.length){\n            removeCommonElements(leftBoundary,rightBoundary);\n        }\n\n\t\tlet returnArr = [leftBoundary,[emptyArray[0]],siblingArray,[emptyArray[emptyArray.length-1]],rightBoundary];\n        // if(siblingArray.length==0){\n        //     let siblingArr = pageButtons.filter(item => {\n        //         let num = Number(item);\n        //         return leftBoundary.indexOf(num) === -1 &&\n        //                rightBoundary.indexOf(num) === -1 &&\n        //                missingElements.indexOf(num) === -1;\n        //     });  // 8 1 1 3 1\n            \n        //     siblingArr.forEach((ele : number) => siblingArray.push(ele));\n        // }\n\n\t\treturn returnArr ?? []\n\n\n\t\t\n\t}\n\n\taddDomEventListener(boundaryDom : HTMLElement){\n        boundaryDom.childNodes.forEach((node:any)=>{\n            if (node.nodeType === Node.ELEMENT_NODE) {\n                const button: any = node;\n                const value = button.getAttribute('value');\n\n                if (this.dataHandler.isValidPage(Number(value))) { \n                    button.addEventListener('click',()=>{\n                        this.dataHandler.goToPage(Number(value));\n                    });\n                }\n            }\n        });\n    }\n\n\trerender(controller:PageSetController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\n\nexport {\n    PaginationPageSetComponent,\n\tIPaginationPageSet\n}\n","import { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getPaginationUtilityClass } from \"../pagination-root/pagination-root-classes\";\nimport { showTotalViewType } from \"./show-total-view-types\";\nimport { PaginationOptionsHandlerTypes } from \"../model/pagination-options-handler.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\nimport { IPaginationDataHandler } from \"../../DataHandler/IPaginationDataHandler\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'page-details',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getPaginationUtilityClass)\n}\n\n\nclass ShowTotalController extends AbstractController<showTotalViewType>{\n \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: PaginationOptionsHandlerTypes;\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_DATA_HANDLER) protected  dataHandler !:  IPaginationDataHandler;\n    @AutoWired('stateManager') protected stateManager!: { addEventListener?: (event: string, handler: () => void) => void };\n\n    rerender():void{\n    }\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n    setComponent(comp : showTotalViewType ) {\n        this.component    = comp;\n        this.stateManager?.addEventListener?.('paginationStateChanged', () => this.setInitialTextContent());\n        this.init();\n    }\n    init(): void {\n        this.applyClasses();\n        this.setValue();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n        \n        this.setInitialTextContent()\n        \n    }\n\n    private applyClasses() : void {\n        const classes       = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadOnly()\n\t\t}\n\t}\n\n    private registerEventHandler() {\n        const ownerState = this.getOwnerState();\n        if(ownerState.readonly || ownerState.disabled) {\n            return \n        }\n    }\n\n    private setAccessibility() : void {\n        this.setAriaAttributes();\n    }\n\n    private setInitialTextContent(){\n        const showTotalCallBack  = this.dataHandler.getShowTotal();\n        const showTotalObj = {\n            pageNumber :this.dataHandler.getPage() ,\n            totalPage : this.dataHandler.getTotalPages(),\n            pageSize : this.dataHandler.getPageSize(),\n            totalCount : this.dataHandler.getCount(),\n        }\n        const showTotalContent = showTotalCallBack(showTotalObj);\n        const text = showTotalContent != null && showTotalContent !== '' ? String(showTotalContent) : '';\n        this.component && (this.component.getElement().textContent = text);\n\n    }\n    \n    private setAriaAttributes() : void {\n        this.component?.getElement();\n    }\n    private setValue() : void {\n        this.setAccessibility();\n    }\n\n\n    \n    // destroy(): void {\n    //     super.destroy();\n    // }\n\n\n\n\n\n}\n\n\nexport {\n    ShowTotalController\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { ShowTotalController } from \"./show-total-controller\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { showTotalViewType } from \"./show-total-view-types\";\n\nconst showTotalTemplate = () =>{\n\tconst showTotal =  document.createElement('div');\n\treturn showTotal as HTMLElement;\n}\nclass PaginationShowTotal extends Component{\n    @PostConstruct()\n\tinit(): void {\n\n\n\t\tconst component : showTotalViewType = {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCssClass   : (className: string) => this.addOrRemoveCssClass(className,true),\n        }\n\n\t\tconst controller = this.createManagedBean(new ShowTotalController);\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): showTotalViewType | any {\n\t\treturn {\n\t\t\t\n\t\t}\n\n\t}\n\taddOrRemoveCSSClass(className: string) : void {\n\t\t\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\n\n\n\tprivate renderTemplate(_controller: ShowTotalController) {\n\t\tconst template = showTotalTemplate();\n        this.setTemplate(template);\n      \n        // this.setTemplate()\n    }\n\n\trerender(controller:ShowTotalController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\n\nexport {\n    PaginationShowTotal\n\n}","export const SELECT_BEAN_NAME = {\n\tSELECT_API: 'selectAPI',\n\tSELECT_CONFIGURATION: 'configuration',\n\tCSSCLASSNAMEGENERATOR: 'CSSClassNameGenerator',\n\tSELECT_OPTIONS_HANDLER: 'SelectOptionsHandler',\n\tFORMATTER: 'formatter',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tSELECT_EVENT_HANDLER: 'SelectEventHandler',\n\tSELECT_CONTROLLER_HANDLER: 'SelectControllerHandler',\n\tPOPUP_HANDLER : \"PopupHandler\",\n\tSELECT_TOOLTIP_HANDLER : \"SELECT_TOOLTIP_HANDLER\"\n};","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport {SELECT_BEAN_NAME} from \"../../constants/beanname-constant\"\nimport {ICustomRenderer, ISelectConfiguration, SelectOptionElementModel} from \"../../select-configuration-types/select_configuration\"\nimport {IErrorRenderer, ISelectOptionHandler} from \"./select-option-handler.types\"\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { IRenderer } from \"../../../../date-time-field/src/date-time-configuration.types\";\nimport { IPlaceHolderRendererInterface } from \"../../select-configuration-types/placeholder-renderer.types\";\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class SelectOptionHandler extends EventEmitter implements ISelectOptionHandler {\n\n\n    @AutoWired(SELECT_BEAN_NAME.SELECT_CONFIGURATION)\n    configuration!: ISelectConfiguration;\n\n\tprivate domKey = `_DG_${Math.random().toString()}`;\n\n\n    getDomKey(): string {\n\t\treturn this.domKey;\n\t}\n\n\tgetDomData(element: Node | null, key: string): any {\n        if(!element) {\n            return;\n        }\n        const domData = (element as any)[this.getDomKey()];\n\t\treturn domData ? domData[key] : undefined;\n\t}\n\n\tsetDomData(element: Element, key: string, value: any): any {\n\t\tconst domKey = this.getDomKey();\n\t\tlet domData = (element as any)[domKey];\n\n\t\tif (!domData) {\n\t\t\tdomData = {};\n\t\t\t(element as any)[domKey] = domData;\n\t\t}\n\n\t\tdomData[key] = value;\n\t}\n\n    getConfiguration(): ISelectConfiguration {\n        return this.configuration;\n    }\n\n    getAppendTo(): HTMLElement | undefined {\n        return this.configuration.appendTo;\n    }\n\n    getDropdownAppendTo(): HTMLElement {\n        return this.configuration.dropdownAppendTo ?? document.body;\n    }\n\n    getOptions(): SelectOptionElementModel[] | undefined {\n        return this.configuration.options;\n    }\n\n    isMultiple(): boolean {\n        return this.configuration.multiple ?? false;\n    }\n\n    getSelectedData(): SelectOptionElementModel[] {\n        return this.configuration.selectedOptions ?? [];\n    }\n\n    getSelectionLimit(): number | undefined {\n        return this.configuration.selectionLimit;\n    }\n\n    isCloseOnSelect(): boolean {\n        return this.configuration.closeOnSelect ?? false;\n    }\n\n    getDropdownPosition(): Position | undefined {\n        return this.configuration.dropdownPosition ?? Position.bottomLeft;\n    }\n\n    isSearchable(): boolean {\n        return this.configuration.searchable ?? false;\n    }\n\n    getSearchBoxPlaceholder(): string  {\n        return this.configuration.searchBoxPlaceholder?? '';\n    }\n\n    isVirtualList(): boolean {\n        return this.configuration.virtualList ?? false;\n    }\n\n    isSortEnabled(): boolean {\n        return this.configuration.sort ?? false;\n    }\n\n    getSortOrder(): 'asc' | 'desc' | undefined {\n        return this.configuration.sortOrder;\n    }\n\n    isGroupByEnabled(): boolean {\n        return this.configuration.groupBy ?? false;\n    }\n\n    isSelectAllButtonEnabled(): boolean {\n        return this.configuration.selectAllButton ?? false;\n    }\n\n    isClearableButtonEnabled(): boolean {\n        return this.configuration.clearable ?? false;\n    }\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n\n    isReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n    getPlaceholder(): string | undefined {\n        return this.configuration.placeholder;\n    }\n\n    getPlaceHolderRenderer(): { new (...args: any[]): IPlaceHolderRendererInterface } | undefined {\n        return this.configuration.placeHolderRenderer;\n    }\n\n    getPlaceHolderRendererParams(): object | undefined {\n        return this.configuration.placeHolderRendererParams;\n    }\n\n    getValidation(): ((value: any) => boolean) | undefined {\n        return this.configuration.validation;\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n\n    getLabel(): string | undefined {\n        return this.configuration.label;\n    }\n\n    getHelperText(): string | undefined {\n        return this.configuration.helpertext;\n    }\n\n    // Event handlers\n    onBeforeDropdownOpen(): void {\n        this.configuration.onBeforeDropdownOpen?.();\n    }\n\n    onAfterDropdownOpen(): void {\n        this.configuration.onAfterDropdownOpen?.();\n    }\n\n    onBeforeDropdownClose(): void {\n        this.configuration.onBeforeDropdownClose?.();\n    }\n\n    onAfterDropdownClose(): void {\n        this.configuration.onAfterDropdownClose?.();\n    }\n\n    onBeforeSelect(option: any): void {\n        this.configuration.onBeforeSelect?.(option);\n    }\n\n    onAfterSelect(option: any): void {\n        this.configuration.onAfterSelect?.(option);\n    }\n\n    onBeforeDeselect(option: any): void {\n        this.configuration.onBeforeDeselect?.(option);\n    }\n\n    onAfterDeselect(option: any): void {\n        this.configuration.onAfterDeselect?.(option);\n    }\n\n    onChange(params:any): void {\n        this.configuration.onChange?.(params);\n    }\n\n    onCreateOption(option :any):any{\n        this.configuration.onCreateOption?.(option);\n    }\n\n    onBeforeCreateOption(option:any): any{\n        return this.configuration.onBeforeCreateOption?.(option) ?? true;\n    }\n    onAfterCreateOption(option:any) :any{\n        return this.configuration.onAfterCreateOption?.(option) ?? true;\n    }\n\n    onFocus():void{\n         this.configuration.onFocus?.();\n    }\n\n    onBlur():void{\n         this.configuration.onBlur?.();\n    }\n\n    onKeydown(event:KeyboardEvent):void{\n        this.configuration.onKeydown?.(event);\n    }\n\n    getAriaLabelledby():string{\n        return this.configuration.ariaLabelledby ?? \"label\";\n    }\n\n    getDescription(): string {\n        return this.configuration.description?? \"\";\n    }\n\n    getDescriptionRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.descriptionRenderer;\n    }\n\n    getDescriptionRendererParams(): object | undefined {\n        return this.configuration.descriptionRendererParams;\n    }\n\n    getAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? 'SelectDropdownHelper';\n\t}\n\n    isOptionAsChip(): boolean{\n        return this.configuration.optionAsChip?? false;\n    }\n\n\n    isUseElipses():boolean {\n        return this.configuration.useElipses?? false;\n    }\n\n    getshowEllipsisAfter():number{\n        return ((this.configuration?.showEllipsisAfter ?? 1) - 1) || 0;\n    }\n\n    isCreateNewOptionEnabled():boolean{\n        return this.configuration.enableCreateNewOption?? false;\n    }\n\n    // isAddCollaboratorEnabled(): boolean {\n    //     return this.configuration.enableAddCollaborator?? false;\n    // }\n\n    isNoneOptionEnabled():boolean{\n        return this.configuration.enableNoneOption ?? false;\n    }\n\n    isPlusIconEnabled():boolean{\n        return this.configuration.enablePlusIcon?? false;\n    }\n\n    showDropdownIcon():boolean{\n        return this.configuration.showDropdownIcon?? false;\n    }\n\n    canGenerateEmptyDom():boolean{\n        return this.configuration?.ignoreEmptyDOM !== undefined ? !this.configuration?.ignoreEmptyDOM :false;\n    }\n\n\n    getGapX():number{\n        return this.configuration.horizontalSpacing ?? 0;\n    }\n\n    getGapY(): number {\n        return this.configuration?.verticalSpacing ?? 0;\n    }\n\n    getClassName(): string {\n        return this.configuration?.className ?? '';\n    }\n\n    getDropdownClassName(): string |string[]{\n        return this.configuration.dropdownClassName ?? '';\n    }\n\n    getSelectBoxIconRenderer():  { new (...args: any[]): ICustomRenderer }  | undefined {\n        return this.configuration.selectBoxIconRenderer;\n    }\n\n    getSelectBoxIconRendererParams(): object | undefined {\n        return this.configuration.selectBoxIconRendererParams;\n    }\n\n    getDropdownRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.dropdownRenderer;\n    }\n\n    getDropdownRendererParams(): object | undefined {\n        return this.configuration.dropdownRendererParams;\n    }\n\n    getDropdownFooterRenderer():  { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.dropdownFooterRenderer;\n    }\n\n    getDropdownFooterRendererParams(): object | undefined {\n        return this.configuration.dropdownFooterRendererParams;\n    }\n\n    getDropdownHeaderRenderer():  { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.dropdownHeaderRenderer;\n    }\n\n    getDropdownHeaderRendererParams(): object | undefined {\n        return this.configuration.dropdownHeaderRendererParams;\n    }\n\n    getEllipsesRenderer():  { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.ellipsesRenderer;\n    }\n\n    updateEllipsesRendererParams(params: object): void {\n        this.configuration.ellipsesRendererParams =  {\n            ...this.configuration.ellipsesRendererParams,\n            ...params\n        };\n    }\n\n    getEllipsesRendererParams(): object | undefined {\n        return this.configuration.ellipsesRendererParams;\n    }\n\n    // tool tip related apis started//\n\n    getTooltipMessage(): string  {\n        return this.configuration.tooltipMessage ?? \"\";\n    }\n\n    getTooltipRegex(): RegExp | undefined {\n        return this.configuration.tooltipRegex;\n    }\n\n    getTooltipPosition(): Position  {\n        return this.configuration.tooltipPosition ?? Position.bottomRight;\n    }\n\n    getTooltipAppendto(): HTMLElement | undefined {\n        return this.configuration.tooltipAppendto ?? document.body;\n    }\n\n    getTooltipHideDelay(): number  {\n        return this.configuration.tooltipHideDelay?? 700;\n\n    }\n    shouldShowTooltip(): boolean {\n        return this.configuration.tooltip ?? false;\n\n    }\n\n    // tool tip related apis ended//\n\n    getPlusIconRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.plusIconRenderer;\n    }\n\n    getPlusIconRendererParams(): object | undefined {\n        return this.configuration.plusIconRendererParams;\n    }\n\n    getCreateNewOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.createNewOptionRenderer;\n    }\n\n    getCreateNewOptionRendererParams(): object | undefined {\n        return this.configuration.createNewOptionRendererParams;\n    }\n\n    getNoOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.configuration.noOptionRenderer;\n    }\n\n    getNoOptionRendererParams(): object | undefined {\n        return this.configuration.noOptionRendererParams;\n    }\n\n    isautoFocusSelectedOptionEnabled(): boolean { \n        return this.configuration.autoFocusSelectedOption ?? false;\n    }\n\n    isDropdownOpenPrevented():boolean{\n        return this.configuration.preventDropdownOpen ?? false;\n    }\n\n \n    showErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n    getValidationMessage(): string | undefined {\n        return this.configuration.validationMessage ?? undefined;\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getValidationMessageRenderer(): (new() => IErrorRenderer) | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n\n    isImageRenderer() : boolean {\n        return this.configuration.isImageRenderer ?? false;\n    }\n}\n\n\n\n","import { BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { CorePopupHandler } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(BEAN_NAME.POPUP_HANDLER)\nexport class PopupHandler extends CorePopupHandler {\n   \n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport {CSSRegistry} from \"../../modules/CSSRegistry\";\n\n// const globalNameSpace = CSSRegistry.getNameSpaces();\n\nexport function getSelectRootUtilityClass(slots: { slot: string, modifiers: string[] }): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('selectbox', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { SelectInputCompType } from \"./select-input.types\";\nimport { AutoWired, BEAN_NAME, setAriaDisabled, setAriaExpanded, setAriaLabel, setAriaRole} from \"@dg/corecomponent\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { Chip } from \"../../../../chip/chip\";\nimport { PopupHandler } from \"../model/popup-handler\";\nimport { ISelectDataPart } from \"../model/select-ds\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\nimport { ISelectConfigAPI } from \"../model/select-configApi\";\nimport { SELECT_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ISelectInputAPI } from \"../model/select-api\";\nimport { getSelectRootUtilityClass } from \"../select-root/select-root-classes\";\nimport { ISelectConfiguration, SelectOptionElementModel } from \"../../select-configuration-types/select_configuration\";\nimport { IChipConfiguration } from \"../../../../chip/chip-configuration.types\";\nimport { SelectUserComponentHandlerTypes } from \"../model/select-user-component-handler.types\";\nimport { EllipsesComponent } from \"../ellipses/ellipses-view\";\n\n\nconst useUtilityClasses = (ownerState : any) =>{\n    const {disabled, readonly} = ownerState;\n    const slots = {\n        root : {\n            slot : 'inner',\n            modifiers:[\n                disabled && 'disabled',\n                readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getSelectRootUtilityClass);\n}\n\n\n\n\nexport class SelectInputController extends EventEmitter{\n    comp !: SelectInputCompType;\n    placeholder !: HTMLElement;\n    ellipsisIcon !:HTMLElement\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    @AutoWired(\"SelectDataPart\") protected selectDataPart !: ISelectDataPart;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(\"SelectConfigAPI\")  selectConfigAPI !: ISelectConfigAPI;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_API) selectAPI !: ISelectInputAPI;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_CONFIGURATION) configuration!: ISelectConfiguration;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: SelectUserComponentHandlerTypes;\n\n    private chipCache: WeakMap<HTMLElement, { width: number; height: number }> = new WeakMap();\n    private imageCache: Map<string, { image: HTMLImageElement; width: number; height: number }> = new Map();\n    private containerWidth: number = 0;    \n    private containerHeight: number = 0;\n    private totalUsedWidth: number = 0;\n    private totalUsedHeight: number = 0;\n    private ellipsesDom !: HTMLElement | null;\n    private ellipsesComp !: EllipsesComponent | null;\n\n\n\n\n    setComp(comp:SelectInputCompType){\n        this.comp = comp;\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n        this.registerInput();\n        this.addDefaultSelectedOption(false);\n        this.updateEllipsisClassName();\n        this.addListener(this.eventHandler, 'EVENT_SELECT_FOCUS', this.focus.bind(this));\n\n        \n    }\n\n    updateEllipsisClassName() : void {\n        const element = this.comp.getElement();\n        if(element) {\n            element.classList.toggle('dg-selectbox__nowrap', this.optionHandler.isUseElipses());\n        }\n    }\n\n\n    registerInput(){\n        this.selectInputHandler.registerSelectInput(this);\n    }\n\n    setPlaceholder(placeholder :HTMLElement){\n        placeholder && (this.placeholder = placeholder);\n    }\n\n    private setAriaAttributes() {\n        const inputfield = this.comp.getElement();\n\n        setAriaRole(inputfield, 'listbox');\n        if (this.optionHandler.isMultiple()) {\n            setAriaLabel(inputfield, \"Multi Select Input Field\");\n            inputfield.setAttribute('aria-multiselectable', 'true');\n        } else {\n            setAriaLabel(inputfield, \"Single Select Input Field\");\n        }\n\n        setAriaExpanded(inputfield, true);\n        setAriaDisabled(inputfield, this.optionHandler.isDisabled());\n    }\n\n\n\n    private applyClasses() : void {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        // if(!this.optionHandler.isOptionAsChip()){\n        //     // this.comp.getElement().classList.add(\"dg-selectbox__text\")\n        // }\n    }\n\n\n    // private refresh() : void {\n    //     this.applyClasses();\n    //     this.setAriaAttributes();\n    // }\n\n    private getOwnerState() {\n        return {\n            disabled: this.optionHandler.isDisabled(),\n            readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n\n\n\n    private registerEventHandler(){\n\n        this.addListener(this.eventHandler,'EnablePlusIcon_Property_Changed',this.updateEnablePlusIconProperty.bind(this));\n        this.addListener(this.eventHandler,'Tooltip_Property_Changed',this.updateTooltip.bind(this));\n\n        const ownerState =  this.getOwnerState();\n        if( ownerState.disabled){\n            return;\n        }\n        this.addListener(this.eventHandler,\"updateMultiSelectData\",(value:any)=>{ \n            this.updateMultiSelectData(value);\n            this.optionHandler.isCloseOnSelect() && this.selectAPI.closeDropdown();\n        });\n        this.addListener(this.eventHandler,\"updateSingleSelectData\",(value:any)=>{ \n            this.updateSingleSelectData(value);  \n            this.optionHandler.isCloseOnSelect() && this.selectAPI.closeDropdown();\n        });\n        this.addListener(this.eventHandler,\"clearSingleSelectData\",(value:any)=>{ \n            this.clearSingleSelectData(value.initator);  \n            this.optionHandler.isCloseOnSelect() && this.selectAPI.closeDropdown();\n        });\n        this.addListener(this.eventHandler,\"clearAll\",(params)=>this.clearAll(params.initiator));  \n        this.addListener(this.eventHandler, \"EVENT_PLACEHOLDER_CHANGED\", this.renderPlaceHolder.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_DATA_UPDATED', () => this.addDefaultSelectedOption(true));\n        this.addListener(this.eventHandler, 'PROPERTY_CHANGED', () => this.addDefaultSelectedOption(true));\n\n    }\n  \n    getProperty() : any{\n        return {\n            getAppendTo : ()=>this.optionHandler.getAppendTo(),\n            isMultiple : ()=>this.optionHandler.isMultiple(),\n            isSearchable : ()=>this.optionHandler.isSearchable(),\n            isDisabled : ()=>this.optionHandler.isDisabled(),\n            placeholder : ()=>this.optionHandler.getPlaceholder(),\n            placeHolderRenderer : ()=>this.optionHandler.getPlaceHolderRenderer(),\n            placeHolderRendererParams : ()=>this.optionHandler.getPlaceHolderRendererParams(),\n            getOption : ()=>this.optionHandler.getOptions(),\n            getParentComp : () => this.comp.getElement(),\n            isOptionAsChip : ()=>this.optionHandler.isOptionAsChip(),\n        }\n    }\n\n    addDefaultSelectedOption(trigger : boolean = true){\n        this.clearAll('api' , trigger);\n        const selectedOptionsData  = this.optionHandler.getSelectedData();\n        if(selectedOptionsData.length > 0 ){\n            if(this.optionHandler.isMultiple()){\n                for(let index=0;index<selectedOptionsData.length;index++){\n                    const selectedOption = selectedOptionsData[index];\n                    // this.selectConfigAPI.onAfterSelect(selectedOption);\n                    const params = {\n                        value : selectedOption,\n                        initiator :  \"API\",\n                        updateUI : index === selectedOptionsData.length - 1\n                    }\n                    selectedOption && this.dispatchEvent({\n                        type : \"updateMultiSelectData\",\n                        value : selectedOption,\n                        params,\n                        init: true\n                    });\n                }\n            }\n            else{\n                // this.selectConfigAPI.onAfterSelect(selectedOptions[0]);\n                const params = {\n                    value :  selectedOptionsData[0],\n                    initiator :  \"API\"\n                 }\n                selectedOptionsData[0] && this.dispatchEvent({\n                    type : \"updateSingleSelectData\",\n                    value : selectedOptionsData[0],\n                    params,\n                    init : true\n                });\n            }\n        }\n        this.handlePlusIconComp();\n    }\n\n    clearAll(initiator : 'api' | 'ui' = 'ui', trigger : boolean = true){\n        // const input =  this.comp.getElement();\n        if(this.optionHandler.isMultiple()){\n            this.selectDataPart.deleteAllOptions();\n            this.ellipsesDom && this.ellipsesDom.remove();\n        }\n        // else{\n            this.clearSingleSelectData(initiator, trigger);\n        // }\n       this.optionHandler.getPlaceholder() &&  this.renderPlaceHolder();\n    }\n\n    updateMultiSelectData(event:any){\n        const triggerChange = event.init ? false : true;\n\n        const params = event.params;\n        const updateUI = params.updateUI ?? true;\n        const option =  params.value;\n        (this.selectDataPart.getSelectedOptions().length <= 0)  &&  this.comp.getElement().replaceChildren();\n        option && ( (this.selectDataPart?.isOptionAdded(option)) ?  this.removeOption(option, updateUI) :  this.addOption(option, updateUI));\n        this.renderPlaceHolder();\n        this.handlePlusIconComp();\n        const hooksParams =  {\n            values            : this.selectDataPart.getSelectedOptions(),\n            initiator         : params.initiator,\n            selectAll         : params.selectAll,\n            selectAllTriggered: params.selectAllTriggered\n        }\n        triggerChange && this.optionHandler.onChange?.(hooksParams);\n    }\n\n    private handlePlusIconComp():void{\n        this.comp.destroyPlusIcon();\n        this.optionHandler.isPlusIconEnabled() && this.comp.renderPlusIcon({},this.comp.getParentComp());\n    }\n\n\n\n   private addOption(option:SelectOptionElementModel, updateUI : boolean = true){\n     if(this.optionHandler.isOptionAsChip() ){\n        this.selectDataPart.deleteAllChipInstance();\n        this.selectDataPart.addOption(option);\n        this.optionHandler.isUseElipses() ? (updateUI && this.renderSelectedChip()) :  (updateUI && this.createSelectedChip())\n        this.handlePlusIconComp();\n    }\n    else{\n        this.selectDataPart.addOption(option);\n        this.createCommmaSeparatedOptions();\n        this.handlePlusIconComp();\n    }\n   }\n\n   private removeOption(option:SelectOptionElementModel, updateUI : boolean = true){\n    if(this.optionHandler.isOptionAsChip() ){\n        this.selectDataPart.deleteAllChipInstance();\n        this.selectDataPart.deleteOption(option);\n        this.optionHandler.isUseElipses() ? (updateUI && this.renderSelectedChip()) :  this.createSelectedChip()\n    }\n    else{\n        this.selectDataPart.deleteOption(option);\n        this.createCommmaSeparatedOptions()\n    }\n    }\n\n    updateOption(option:SelectOptionElementModel){\n        this.selectAPI.closeDropdown();\n        this.selectDataPart.updateOption(option);\n        if(this.optionHandler.isOptionAsChip() ){\n            this.selectDataPart.deleteAllChipInstance();\n            this.optionHandler.isUseElipses() ?this.renderSelectedChip() :  this.createSelectedChip()\n            this.handlePlusIconComp();\n            this.renderPlaceHolder();\n        }\n        else{\n            this.createCommmaSeparatedOptions();\n            this.handlePlusIconComp();\n            this.renderPlaceHolder();\n        }\n\n    }\n\n    setOptionsDisabled(optionIds:string[], disabled : boolean) : void {\n        this.selectDataPart.setOptionsDisabled(optionIds, disabled);\n        const inputcontroller = this.selectInputHandler.getSelectInputWrapper();\n        if(disabled) {\n            inputcontroller.disableOptions(optionIds);\n        }else {\n            inputcontroller.enableOptions(optionIds);\n        }\n        if(this.optionHandler.isOptionAsChip() ){\n            this.selectDataPart.deleteAllChipInstance();\n            this.optionHandler.isUseElipses() ?this.renderSelectedChip() :  this.createSelectedChip()\n            this.handlePlusIconComp();\n            this.renderPlaceHolder();\n        }\n        else{\n            this.createCommmaSeparatedOptions();\n            this.handlePlusIconComp();\n            this.renderPlaceHolder();\n        }\n\n    }\n\n    private createCommmaSeparatedOptions(){\n        const input = this.comp.getElement();\n        input.replaceChildren();\n        const selectedOptions = this.selectDataPart.getSelectedOptions().map(option => option.label ?? option.value);\n        const commaSeparatedOptions = selectedOptions.join(\",\");\n        // const option = this.comp.createSelectSpan(commaSeparatedOptions);\n        input.classList.toggle(\"dg-selectbox__text\", this.selectDataPart.getSelectedOptions().length > 0);\n        input.textContent = commaSeparatedOptions;\n    }\n\n    updateSingleSelectData(event:any):void{\n        const triggerChange = event.init ? false : true;\n\n        const params = event.params;\n        const option:SelectOptionElementModel = params.value;\n        const input =  this.comp.getElement();\n        input.replaceChildren();\n        this.selectDataPart.resetOptions();\n        this.addOption(option);\n        this.optionHandler.getPlaceholder() &&   this.renderPlaceHolder();\n        const hookParams =  {\n            values : this.selectDataPart.getSelectedOptions(),\n            initiator : params.initiator,\n        }\n        triggerChange && this.optionHandler.onChange?.(hookParams);\n    }\n\n    clearSingleSelectData(initiator : 'api' | 'ui' = 'ui', trigger : boolean = true):void{\n        // const option:SelectOptionElementModel = event.value;\n        const input =  this.comp.getElement();\n        input.replaceChildren();\n        this.selectDataPart.resetOptions();\n        input.classList.toggle(\"dg-selectbox__text\", false);\n        \n        this.renderPlaceHolder();\n        const params = {\n            values : this.selectDataPart.getSelectedOptions(),\n            initiator : initiator\n        }\n        trigger && this.optionHandler.onChange?.(params);\n    }\n\n    \n\n    createChip(option:SelectOptionElementModel,appendTo?:HTMLElement |  null, wrapperClassname ?: string ) :any{\n        if(option.selectedValueRenderer){\n            const customOptionInstance =  new option.selectedValueRenderer;\n            customOptionInstance.init(this.createOptionsParams(option));\n            customOptionInstance.createElement();\n            appendTo?.appendChild(customOptionInstance.getElement())\n            return customOptionInstance;\n        }\n        else{\n            \n            let chipConfig: IChipConfiguration = {\n                                                    appendTo: appendTo ?? null,\n                                                    label: option.label ?? option.value,\n                                                    readOnly : true,\n                                                    wrapperClassname : wrapperClassname || '',\n                                                    chipColor : option.color,\n                                                    href : option.href,\n                                                    hrefTarget : option.hrefTarget,\n                                                }\n            option.id === 'ellipses' && (chipConfig.labelasDom =  true); // temp fix\n\n            if((this.optionHandler.shouldShowTooltip()) && (!wrapperClassname)){\n                chipConfig.tooltip = this.optionHandler.shouldShowTooltip();\n                chipConfig.tooltipAppendto = this.optionHandler.getTooltipAppendto();2\n                chipConfig.tooltipMessage =  option.value;\n                chipConfig.tooltipRegex = this.optionHandler.getTooltipRegex();\n                chipConfig.tooltipPosition = this.optionHandler.getTooltipPosition();\n                chipConfig.tooltipHideDelay = this.optionHandler.getTooltipHideDelay();\n            }\n             \n            \n            if((!this.optionHandler.isReadOnly()) && (this.optionHandler.isMultiple()) && (option.id !== 'ellipses')){\n                    chipConfig.onRemove = (_params:any) => {\n                        if(option.disabled) {\n                            return;\n                        }\n                        this.selectInputHandler.getSelectInputWrapper().focus();\n                        this.selectAPI.deselect(option.id,\"UI\");\n                    };\n                    chipConfig.removeIconId = \"#remove-icon\";\n            }\n\n            if (option.thumbnailRenderer) {\n                chipConfig.thumbnailRenderer = option.thumbnailRenderer;\n                chipConfig.userThumbnailRendererParams = option.userThumbnailRendererParams;\n            }\n            return new Chip(chipConfig);\n        }\n\n    }\n\n    createOptionsParams(option:SelectOptionElementModel):any{\n        return {\n            option : option,\n            readonly : this.optionHandler.isReadOnly()\n        };\n    }\n\n    renderPlaceHolder(){\n        if(this.selectDataPart.getSelectedOptions().length <= 0){\n            this.comp.getElement().replaceChildren();\n            this.comp.renderPlaceholder(this.getProperty());\n        }\n    }\n\n    // updateProperties(){\n    //     this.renderPlaceHolder();\n    //     this.addDefaultSelectedOption();\n    // }\n\n    updateEnablePlusIconProperty(){\n        if(this.optionHandler.isUseElipses()){\n            this.renderSelectedChip();\n        }\n        else{\n            this.selectDataPart.deleteAllChipInstance();\n            this.createSelectedChip();\n        }\n     \n    }\n    updateTooltip(){\n        if(this.optionsHandler.isOptionAsChip()){\n            const chipInstances = this.selectDataPart.getChipsInstances();\n            Object.values(chipInstances).forEach(chipInstance=>{\n\n                  const tooltipMessage =  this.optionHandler.getTooltipMessage();\n                  const tooltipRegex = this.optionHandler.getTooltipRegex();\n                  const tooltipPosition = this.optionHandler.getTooltipPosition();\n                  const tooltipHideDelay = this.optionHandler.getTooltipHideDelay();\n                  const tooltipAppendto = this.optionHandler.getTooltipAppendto();\n                  const tooltip = this.optionHandler.shouldShowTooltip();\n\n                const toolConfig = {\n                    tooltipMessage,\n                    tooltipRegex,\n                    tooltipPosition ,\n                    tooltipAppendto ,\n                    tooltipHideDelay,\n                    tooltip \n                }\n                \n                toolConfig && (chipInstance as any)?.api?.updateProperties(toolConfig);\n            });\n        }\n    }\n\n    getPlusIconDom(): HTMLElement | undefined{\n        return this.comp.getPlusIcon() ?? undefined;\n    }\n\n    focus(){\n        this.comp.getElement().focus();\n    }   \n\n\n    addOptions(options:SelectOptionElementModel[],selectOption: boolean = true){\n\n       if((!this.optionHandler.getDropdownRenderer()) && this.selectInputHandler.getDropdownInteractor() ){\n        this.selectInputHandler.getDropdownInteractor()?.addOptions(options);\n        return\n       }\n\n       for(let index = 0; index < options.length; index++){\n            if (!this.configuration.options) {\n                this.configuration.options = []; \n            }\n            this.configuration.options.push(options[index]);\n            selectOption && this.addOption(options[index]);\n        }\n    }\n\n    removeOptions(options:SelectOptionElementModel[]){\n        for(let index = 0; index < options.length; index++){\n            if (!this.configuration.options) {\n                this.configuration.options = []; \n            }\n            // this.configuration.options = this.configuration.options.filter((option:SelectOptionElementModel) => option.id!== options[index].id);\n\n          if (this.selectDataPart.isOptionAdded(options[index])){\n            this.selectDataPart.deleteChipInstance(options[index]);\n            this.selectDataPart.deleteOption(options[index]);\n          } \n        }\n\n        (!this.optionHandler.getDropdownRenderer()) && this.selectInputHandler.getDropdownInteractor()?.removeOptions(options);\n    }\n\n    getEllipsesIcon():HTMLElement{\n        return this.ellipsisIcon \n    }\n\n     createSelectedChip(){\n        // const appendTo =  this.comp.getElement();\n        // const selectedOptions =  this.selectDataPart.getSelectedOptions();\n        // for(let i = 0; i < selectedOptions.length; i++){\n        //     const chipInstance =  this.createChip(selectedOptions[i],appendTo);\n        //     this.selectDataPart.updateChipInstance(selectedOptions[i],chipInstance);\n        // }\n        const appendTo = this.comp.getElement();\n        const selectedOptions = this.selectDataPart.getSelectedOptions();\n        appendTo.textContent = \"\";\n        for (const option of selectedOptions) {\n           this.createChipDOM(option, appendTo, null, null);\n        }\n    }\n\n\n\n    //................resize handler started.....................//\n    \n    public renderSelectedChip() {\n        const appendTo        = this.comp.getElement();\n        const selectedOptions = this.selectDataPart.getSelectedOptions();\n        const rootController  = this.selectInputHandler.getSelectRoot();\n        let rootElement: HTMLElement | undefined;\n        if(rootController){\n            rootElement = rootController.getElement();\n        }\n        this.resetContainerDimensions();\n        rootElement &&rootElement.classList.remove(\"dg-selectbox__root--single-chip\");\n    \n        appendTo.textContent = \"\";\n    \n        // Add Plus Icon\n        const plusIcon = this.addPlusIcon(appendTo);\n    \n        // Add Ellipsis Chip if Necessary\n        const ellipsisChipComp : EllipsesComponent= this.addEllipsisChip(appendTo, selectedOptions.length, plusIcon);\n        this.ellipsisIcon = ellipsisChipComp?.getElement();\n    \n        let previousChipColor: string | undefined;\n        let chipCount = 0; \n\n        let totalRenderedChips = 0;\n    \n        for (const option of selectedOptions) {\n            this.ellipsesDom && this.getCachedDimensions(this.ellipsesDom)\n            const chipDOM = this.createChipDOM(option, appendTo, this.ellipsesDom, plusIcon);\n    \n            const { width, height } = this.getCachedDimensions(chipDOM);\n    \n            if (chipCount === 0) {\n                this.updateUsedHeightForFirstChip(height);\n            }\n            \n            const ignoreEllipses = this.isEllipsesNeeded(chipCount);\n    \n            if (!this.fitsWithinContainer(width, height, ignoreEllipses)) {\n                if(chipCount === 0 ){\n                    // ellipsisChip?.api.updateBgColor(option.color);\n                    this.optionHandler.updateEllipsesRendererParams(this.createEllipsesRendererParams(option.color || \"\",chipCount));\n                    ellipsisChipComp?.reRender();\n                    totalRenderedChips++;\n\n                    break;\n                }\n                this.selectDataPart.deleteChipInstance(option);\n                chipCount--;\n                this.optionHandler.updateEllipsesRendererParams(this.createEllipsesRendererParams(previousChipColor || \"\",chipCount));\n                // ellipsisChip?.api.updateBgColor(previousChipColor);\n                ellipsisChipComp?.reRender();\n                break;\n            }\n    \n            this.updateUsedDimensions(width, height);\n            previousChipColor = option.color;\n            chipCount++; \n            totalRenderedChips++;\n        }\n\n        if(totalRenderedChips === 1 && ellipsisChipComp){\n            rootElement && rootElement.classList.add(\"dg-selectbox__root--single-chip\");\n        }\n    \n        if (ellipsisChipComp && selectedOptions.length === chipCount) {\n            // ellipsisChip?.api.destroyComponent();\n            ellipsisChipComp?.destroy();\n            rootElement && rootElement.classList.remove(\"dg-selectbox__root--single-chip\");\n        }\n    }\n\n    private isEllipsesNeeded(chipCount : number):boolean{\n        return ((chipCount+1) === this.selectDataPart.getSelectedOptions().length);\n    }\n\n    private createEllipsesRendererParams(color: string, chipCount: number):any{\n        const selectedOptions =this.selectDataPart.getSelectedOptions();\n        const remainingSelectedOptions = selectedOptions?.slice(-chipCount);\n        return {\n            bgColor : color,\n            chipCount :(selectedOptions.length - chipCount)-1,\n            remainingSelectedOptions \n        }\n    }\n\n    private updateUsedHeightForFirstChip(height: number): void {\n        this.totalUsedHeight += height; \n    }\n    \n\n    private resetContainerDimensions() {\n        const selectInputWrapperDOM : HTMLElement= this.selectInputHandler.getSelectInputWrapper()?.getElement();\n        // const selectIconContainer   : HTMLElement= this.selectInputHandler.getSelectBoxIcon()?.getElement() as HTMLElement;\n        const selectInner : HTMLElement = this.selectInputHandler.getSelectInput()?.getElement() as HTMLElement;\n\n        if(!selectInputWrapperDOM){\n            return;\n        }\n        // const InputWrapperComputedStyle = window.getComputedStyle(selectInputWrapperDOM);\n        // const selectIconContainerComputedStyle =  window.getComputedStyle(selectIconContainer);\n\n        // this.containerWidth = selectInputWrapperDOM?.offsetWidth -\n        //                     (parseInt(InputWrapperComputedStyle.paddingLeft) + parseInt(InputWrapperComputedStyle.paddingRight) \n        //                                             -(  (selectIconContainer.offsetWidth) - (parseInt(InputWrapperComputedStyle?.paddingLeft) + parseInt(InputWrapperComputedStyle?.paddingRight));\n\n                                //  this.containerWidth = selectInputWrapperDOM?.offsetWidth \n                                //                     - (parseInt(InputWrapperComputedStyle.paddingLeft) \n                                //                     + parseInt(InputWrapperComputedStyle.paddingRight)) \n                                //                     - ((selectIconContainer.offsetWidth ?? 0) \n                                //                     - (parseInt(selectIconContainerComputedStyle.paddingLeft) \n                                //                     + parseInt(selectIconContainerComputedStyle.paddingRight)));\n        this.containerWidth =  selectInner.offsetWidth;\n                        \n        this.containerHeight = selectInputWrapperDOM?.offsetHeight;\n        this.totalUsedWidth = 0;\n        this.totalUsedHeight = 0;\n    }\n\n    private addPlusIcon(appendTo: HTMLElement): HTMLElement | null {\n        if (this.optionHandler.isPlusIconEnabled()) {\n            this.handlePlusIconComp();\n            const plusIcon = this.comp.getPlusIcon();\n            appendTo.appendChild(plusIcon);\n            this.totalUsedWidth += this.getCachedDimensions(plusIcon).width ;\n            return plusIcon;\n        }\n        return null;\n    }\n\n    private addEllipsisChip(appendTo: HTMLElement, optionsCount: number, plusIcon: HTMLElement | null): any | null {\n        if(optionsCount <= 1) {\n            this.ellipsesDom = null;\n            return null;\n        }\n        !this.ellipsesDom && (this.ellipsesComp = this.comp.createEllipses());\n        this.ellipsesDom =  this.ellipsesComp?.getElement() as HTMLElement;\n        if (this.optionHandler.isUseElipses() ) {\n            if(plusIcon){\n                this.ellipsesDom && appendTo.insertBefore(this.ellipsesDom,plusIcon)\n            }\n            else{\n                this.ellipsesDom &&  appendTo.appendChild(this.ellipsesDom);\n            }\n            this.totalUsedWidth += this.getCachedDimensions(this.ellipsesDom).width;\n            return this.ellipsesComp;\n        }\n        return null;\n    }\n\n    private createChipDOM(option: any, appendTo: HTMLElement, ellipsisChip: HTMLElement|null, plusIcon: HTMLElement | null): HTMLElement {\n        const chipInstance = this.createChip(option);\n        const chipDOM = option.selectedValueRenderer\n            ? chipInstance.getElement()\n            : chipInstance.api.getElement();\n\n        if (ellipsisChip) {\n            appendTo.insertBefore(chipDOM, ellipsisChip);\n        } else if (plusIcon) {\n            appendTo.insertBefore(chipDOM, plusIcon);\n        } else {\n            appendTo.appendChild(chipDOM);\n        }\n\n        this.selectDataPart.updateChipInstance(option, chipInstance);\n\n     \n        const imageElement = chipDOM.querySelector(\"img\") as HTMLImageElement;\n        if (imageElement) {\n            this.cacheImageDimensions(imageElement);\n        }\n\n        return chipDOM;\n    }\n\n    private getCachedDimensions(element: HTMLElement): { width: number; height: number } {\n        const isImageRenderer = this.optionHandler.isImageRenderer();\n        const imageElement    = isImageRenderer ? element.querySelector(\"img\") as HTMLImageElement : null;\n        let cachedDimensions;\n\n        if (!this.chipCache && !imageElement) {\n            this.chipCache = new WeakMap<HTMLElement, { width: number; height: number }>();\n        }\n\n        imageElement ?(cachedDimensions= this.imageCache.get(this.generateIdFromUrl(imageElement.src))):(cachedDimensions = this.chipCache.get(element));\n        \n        if (cachedDimensions) {\n            if (imageElement) {\n                const imageId = this.generateIdFromUrl(imageElement.src);\n                const imageCacheEntry = this.imageCache.get(imageId);\n                if (imageCacheEntry) {\n                    this.imageCache.set(imageId, { \n                        ...imageCacheEntry, \n                        image: imageElement \n                    });\n                }\n            }\n            if(cachedDimensions.width!==0){\n                return cachedDimensions; \n            }\n     \n        }\n    \n        const computedStyle = window.getComputedStyle(element);\n        const width = element.offsetWidth + \n                      parseInt(computedStyle.marginLeft.trim() || \"0\", 10) + \n                      parseInt(computedStyle.marginRight.trim() || \"0\", 10);\n\n        const height = element.offsetHeight + \n                       parseInt(computedStyle.marginTop.trim() || \"0\", 10) + \n                       parseInt(computedStyle.marginBottom.trim() || \"0\", 10);\n\n        const dimensions = { width, height };\n\n        if(imageElement) {\n            const imageId = this.generateIdFromUrl(imageElement.src);\n            this.imageCache.set(imageId, { \n                image: imageElement,\n                width : width,\n                height : height\n            });\n        }else{\n            this.chipCache.set(element, dimensions); \n        }\n\n        return dimensions;\n    }\n\n    private cacheImageDimensions(image: HTMLImageElement) {\n        const imageId = this.generateIdFromUrl(image.src);\n    \n        const setDimensions = () => {\n            if(image.offsetWidth > 0){\n                this.imageCache.set(imageId, {\n                    image: image,\n                    width: image.offsetWidth,\n                    height: image.offsetHeight\n                });\n            }\n        };\n        \n    \n        if (image.complete && image.naturalWidth !== 0) {\n             setDimensions();\n        } else {\n            image.onload = () => {\n                setDimensions();\n            };\n            // image.onerror = () => {\n            //     console.error(`Failed to load image with ID: ${id}`);\n            // };\n        }\n    }\n    \n\n    private generateIdFromUrl(url: string): string {\n        return btoa(url); \n    }\n    \n\n    private fitsWithinContainer(width: number, height: number, isEllipsesNeeded : boolean): boolean {\n        let ellipseswidth = this.chipCache.get(this.ellipsesDom as HTMLElement)?.width ?? 0;\n        ellipseswidth = isEllipsesNeeded ? ellipseswidth : 0;\n        if ((this.totalUsedWidth-ellipseswidth) + width <= this.containerWidth) {\n            return true;\n        }\n        if (this.totalUsedHeight + height <= this.containerHeight) {\n            return true;\n        }\n        return false;\n    }\n\n    private updateUsedDimensions(width: number, height: number) {\n        if (this.totalUsedWidth + width <= this.containerWidth) {\n            this.totalUsedWidth += width;\n        } else {\n            this.totalUsedWidth = width;\n            this.totalUsedHeight += height;\n        }\n    }\n    //................resize handler ended.....................//\n\n    getElement():HTMLElement{\n        return this.comp.getElement();\n    }\n\n\n\n}\n\n\n","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n// import { composeClasses } from \"@dg/utils\";\n// import { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { SelectUserComponentHandlerTypes } from \"../model/select-user-component-handler.types\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { PlusIconComponentType } from \"./plus-icon.types\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\nimport { SELECT_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ISelectInputAPI } from \"../model/select-api\";\n// import { IRatingUserComponentHandler } from \"../model/rating-user-component-handler.types\";\n\n\n\n// const useUtilityClasses = () => {\n// \tconst slots = {\n// \t\troot: {\n// \t\t\tslot: '',\n// \t\t\tmodifiers: [\n\t\t\t\t\n// \t\t\t],\n// \t\t},\n// \t};\n\n// \treturn composeClasses(slots, getSelectRootUtilityClass);\n// };\n\n\n\n\nexport class PlusIconController extends EventEmitter {\n    private component !: PlusIconComponentType\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: SelectUserComponentHandlerTypes;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_API) selectAPI !: ISelectInputAPI;\n\n    setComponent(component : PlusIconComponentType){\n        this.component = component;\n        this.applyClassNames();\n        this.setRendererDetails();\n        this.registerEventHandlers();\n\n        // this.selectInputHandler.registerSelectBoxIcon(this);\n    }\n\n    private registerEventHandlers(){\n        const plusIcon = this.component.getElement();\n        if(plusIcon && !this.optionHandler.isReadOnly()){\n            plusIcon.addEventListener(\"click\",()=>this.selectAPI.toggleDropdown());\n        }\n    }\n\n    private applyClassNames(){\n\t\tthis.component.getElement().classList.add(\"dg-plus-icon\");\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails     = this.userComponentHandler.getPlusIconRendererDetails(rendererWrapper, params) as IComponentDetails;\n        // this.isInValid = inValid;\n        this.component.setRendererDetails(userDetails);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getPlusIconRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getPlusIconRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getPlusIconRenderer(),\n            parentElement  :  this.component.getElement(),\n\t\t};\n    }\n\n    reRenderIcon():void{\n        this.setRendererDetails();\n    }\n    getProperty(){\n\n    }\n\n    getElement(){\n        return this.component.getElement();\n    }\n\n     destroy(): void {\n      this.component.destroy();  \n    }\n\n\n}","\n\n\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { PlusIconComponentType } from \"./plus-icon.types\";\nimport { PlusIconController } from \"./plus-icon-controller\";\n\n\nconst PlusIconComponentTemplate = (_property : any)=>{\n    const plusIconcomp =  document.createElement('div');\n    return plusIconcomp;\n}\n\nexport class PlusIconComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    @PostConstruct()\n    init() {\n        const comp : PlusIconComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n\t\t\tdestroy : () => this.destroyRenderer(),\n        }\n\n        const controller = this.createBean(new PlusIconController());\n        const property = controller.getProperty()\n        this.setTemplate(PlusIconComponentTemplate(property))\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\t\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\t\t\n\t\t// Create SVG element with namespace\n\t\tconst svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\tsvg.setAttribute(\"width\", \"14px\");\n\t\tsvg.setAttribute(\"height\", \"14px\");\n\t\tsvg.setAttribute(\"viewBox\", \"-1 -1 15 15\");\n\t\tsvg.setAttribute(\"class\", \"dg-plus-icon-svg\");\n\t\t\n\t\t// Create first g element (Layer 2)\n\t\tconst g1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tg1.setAttribute(\"data-name\", \"Layer 2\");\n\t\t\n\t\t// Create second g element (Fill Icon)\n\t\tconst g2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tg2.setAttribute(\"data-name\", \"Fill Icon\");\n\t\t\n\t\t// Create first path element (plus icon)\n\t\tconst path1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n\t\tpath1.setAttribute(\"d\", \"M10.5 5.75H7.25V2.5a.75.75 0 00-1.5 0v3.25H2.5a.75.75 0 000 1.5h3.25v3.25a.75.75 0 001.5 0V7.25h3.25a.75.75 0 000-1.5z\");\n\t\t\n\t\t// Create second path element (transparent background)\n\t\tconst path2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n\t\tpath2.setAttribute(\"fill\", \"none\");\n\t\tpath2.setAttribute(\"d\", \"M0 0h13v13H0z\");\n\t\t\n\t\t// Assemble the elements\n\t\tg2.appendChild(path1);\n\t\tg2.appendChild(path2);\n\t\tg1.appendChild(g2);\n\t\tsvg.appendChild(g1);\n\t\t\n\t\t// Add to parent\n\t\tparentElement.appendChild(svg);\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\tgetElement():HTMLElement{\n\t\treturn this.getGui();\n\t}\n\n\tdestroy(){\n\t\tthis.getGui().remove();\n\t}\n\n}\n","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n// import { composeClasses } from \"@dg/utils\";\n// import { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { SelectUserComponentHandlerTypes } from \"../model/select-user-component-handler.types\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { EllipsesComponentType } from \"./ellipses.types\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\nimport { SELECT_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ISelectInputAPI } from \"../model/select-api\";\n// import { IRatingUserComponentHandler } from \"../model/rating-user-component-handler.types\";\n\n\n\n// const useUtilityClasses = () => {\n// \tconst slots = {\n// \t\troot: {\n// \t\t\tslot: '',\n// \t\t\tmodifiers: [\n\t\t\t\t\n// \t\t\t],\n// \t\t},\n// \t};\n\n// \treturn composeClasses(slots, getSelectRootUtilityClass);\n// };\n\n\n\n\nexport class EllipsesController extends EventEmitter {\n    private component !: EllipsesComponentType\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: SelectUserComponentHandlerTypes;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_API) selectAPI !: ISelectInputAPI;\n\n\n\n    setComponent(component : EllipsesComponentType){\n        this.component = component;\n        this.applyClassNames();\n        this.setRendererDetails();\n        this.registerEventHandlers();\n        this.optionHandler.getEllipsesRenderer() &&  this.setRendererDetails();\n    }\n\n    private registerEventHandlers(){\n        const plusIcon = this.component.getElement();\n        if(plusIcon && !this.optionHandler.isReadOnly()){\n            plusIcon.addEventListener(\"click\",()=>this.selectAPI.toggleDropdown());\n        }\n    }\n\n    private applyClassNames(){\n\t\tthis.component.getElement().classList.add(\"dg-ellispes_icon\");\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails     = this.userComponentHandler.getEllipsesRendererDetails(rendererWrapper, params) as IComponentDetails;\n        // this.isInValid = inValid;\n        this.component.setRendererDetails(userDetails);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getEllipsesRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getEllipsesRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getEllipsesRendererParams(),\n\t\t};\n    }\n\n    reRenderIcon():void{\n        this.setRendererDetails();\n    }\n    getProperty(){\n\n    }\n\n    getElement(){\n        return this.component.getElement();\n    }\n\n     destroy(): void {\n      this.component.destroy();  \n    }\n\n\n}","\n\n\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { EllipsesComponentType } from \"./ellipses.types\";\nimport { EllipsesController } from \"./ellipses-controller\";\n\n\nconst EllipsesComponentTemplate = (_property : any)=>{\n    const plusIconcomp =  document.createElement('div');\n    return plusIconcomp;\n}\n\nexport class EllipsesComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n\tprivate controller !: EllipsesController;\n\n    @PostConstruct()\n    init() {\n        const comp : EllipsesComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails),\n\t\t\tdestroy : () => this.destroyRenderer(),\n        }\n\n        this.controller = this.createBean(new EllipsesController());\n        const property = this.controller.getProperty()\n        this.setTemplate(EllipsesComponentTemplate(property))\n        this.controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\t\t\n\t\t// Create SVG element using proper namespace\n\t\tconst svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\tsvg.setAttribute(\"width\", \"12\");\n\t\tsvg.setAttribute(\"height\", \"12\");\n\t\tsvg.setAttribute(\"viewBox\", \"-2 0 2 10\");\n\t\tsvg.setAttribute(\"class\", \"dg-chip__ellipse-svg\");\n\t\tsvg.style.transform = \"rotate(90deg)\";\n\t\t\n\t\t// Create g element\n\t\tconst g = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tg.setAttribute(\"fill-rule\", \"evenodd\");\n\t\t\n\t\t// Create three circle elements\n\t\tconst circle1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n\t\tcircle1.setAttribute(\"cx\", \"1\");\n\t\tcircle1.setAttribute(\"cy\", \"1\");\n\t\tcircle1.setAttribute(\"r\", \"1\");\n\t\t\n\t\tconst circle2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n\t\tcircle2.setAttribute(\"cx\", \"1\");\n\t\tcircle2.setAttribute(\"cy\", \"5\");\n\t\tcircle2.setAttribute(\"r\", \"1\");\n\t\t\n\t\tconst circle3 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n\t\tcircle3.setAttribute(\"cx\", \"1\");\n\t\tcircle3.setAttribute(\"cy\", \"9\");\n\t\tcircle3.setAttribute(\"r\", \"1\");\n\t\t\n\t\t// Assemble the elements\n\t\tg.appendChild(circle1);\n\t\tg.appendChild(circle2);\n\t\tg.appendChild(circle3);\n\t\tsvg.appendChild(g);\n\t\t\n\t\t// Add to parent\n\t\tparentElement.appendChild(svg);\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\tgetElement():HTMLElement{\n\t\treturn this.getGui();\n\t}\n\n\tdestroy(){\n\t\tthis.getGui().remove();\n\t}\n\n\treRender():void{\n\t\tthis.controller.setRendererDetails();\n\t}\n}\n","import { PostConstruct  } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { SelectInputController } from \"./select-input-controller\";\nimport { SelectInputCompType } from \"./select-input.types\";\nimport { PlusIconComponent } from \"../plus-icon/plus-icon-view\";\nimport { EllipsesComponent } from \"../ellipses/ellipses-view\";\n\n\nconst selectInput = (props: any) => {\n    const selectInputElement = document.createElement('div');\n    if (props.placeholder()) {\n        placeholder(props, selectInputElement);\n    }\n    return selectInputElement ;\n};\n\nconst placeholder = (props : any , parentComp : HTMLElement)=>{\n    let placeholderDom;\n    \n    const placeHolderRenderer = props.placeHolderRenderer();\n    const placeHolderRendererParams = props.placeHolderRendererParams();\n    if (placeHolderRenderer) {\n        const rendererInstance = new placeHolderRenderer();\n        rendererInstance.init(placeHolderRendererParams || {});\n        placeholderDom = rendererInstance.getElement();\n        placeholderDom.classList.add('dg-selectbox__input-placeholder');\n    } else {\n        placeholderDom = selectSpan(props.placeholder());\n        placeholderDom.classList.add('dg-selectbox__input-placeholder');\n    }\n    \n    parentComp.appendChild(placeholderDom);\n}\n\n\nconst selectSpan = (value:string):HTMLElement=> {\n    const div = document.createElement('div');\n    div.className = `dg-selectbox__text`;\n    div.textContent = value;\n   return div;\n}\n\nexport class SelectInputComponent extends Component {\n\n    props : any;\n    plusIconComp !:PlusIconComponent;\n    ellipsesComp !:EllipsesComponent;\n\n    @PostConstruct()\n    init(){\n        const controller = this.createManagedBean(new SelectInputController());\n        const props = controller.getProperty();\n        this.props = props; \n         \n        this.setTemplate(selectInput(props));\n        controller.setComp(this.getComponent());\n    }       \n    \n    private getComponent():SelectInputCompType{\n        const updateSelectSpan = (value:string):HTMLElement=> selectSpan(value);\n        return{\n            getElement           : () => this.getGui(),\n            getParentComp        : ()=>this.getGui(),\n            addOrRemoveCSSClass  : (className: string) => this.addOrRemoveCSSClass(className),\n            createSelectSpan     : (value:string):HTMLElement=> updateSelectSpan(value),\n            destroy              : () => this.destroy(),\n            renderPlaceholder    : (props:any)=> this.renderPlaceholder(props),\n            renderPlusIcon       : (props:any, parentDOM : HTMLElement)=> this.renderPlusIcon(props, parentDOM),\n            destroyPlusIcon      : ()=> this.destroyPlusIcon(),\n            getPlusIcon          : ()=> this.getPlusIcon(),\n            createEllipses       : ()=> this.createEllipses(),  \n            destroyEllipses      : ()=> this.destroyEllipses(),\n        }\n    }\n\n    private addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    protected destroy(): void {\n\t\tthis.getGui().remove();    \n\t}\n\n    renderPlaceholder(props:any):void{\n        // Clear existing placeholder\n        const parentComp = this.props.getParentComp();\n        const existingPlaceholder = parentComp.querySelector('.dg-selectbox__input-placeholder');\n        if (existingPlaceholder) {\n            existingPlaceholder.remove();\n        }\n        \n        // Render new placeholder\n        placeholder(props, parentComp);\n    } \n\n    renderPlusIcon(_props:any,parentDOM : HTMLElement){\n        const comp =  new PlusIconComponent();\n        this.plusIconComp = this.createBean(comp);\n        parentDOM.appendChild(this.plusIconComp?.getElement()); \n    }\n\n    destroyPlusIcon():void{\n        this.plusIconComp?.destroy();\n    }\n\n    getPlusIcon():HTMLElement{\n        return this.plusIconComp?.getElement();\n    }\n\n    createEllipses() : EllipsesComponent{\n        this.ellipsesComp =  this.createManagedBean(new EllipsesComponent());\n        return this.ellipsesComp;\n        \n    }\n\n    destroyEllipses():void{\n        this.ellipsesComp?.destroy();\n    }\n\n\n}\n\n\n\n\n","import { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ISelectOptionHandler } from \"./select-option-handler.types\";\nimport { ISelectConfiguration, SelectOptionElementModel } from \"../../select-configuration-types/select_configuration\";\nimport { SELECT_BEAN_NAME } from \"../../constants/beanname-constant\";\n\nexport interface ISelectDataPart {\n    addOption(option: SelectOptionElementModel): void;\n    updateChipInstance(option: SelectOptionElementModel, chipInstance: any): void;\n    deleteOption(option: SelectOptionElementModel): void;\n    isOptionAdded(option: SelectOptionElementModel): boolean;\n    getSelectedOptions(): SelectOptionElementModel[];\n    resetOptions(): void;\n    deleteAllOptions(): void;\n    deleteAllChipInstance(): void;\n    getChipsInstance(chip: string): any;\n    getChipsInstances(): any;\n    deleteChipInstance(option: SelectOptionElementModel): void;\n    getOption(id: string): SelectOptionElementModel | undefined;\n    updateOption(option: SelectOptionElementModel): void;\n    reOrderOptions(OptionIdsOrder: string[]): void;\n    setOptionsDisabled(optionIDs: string[], disabled: boolean): void;\n}\n\n@Bean(\"SelectDataPart\")\nexport class SelectDataPart extends EventEmitter implements ISelectDataPart {\n    selectedOptions!: SelectOptionElementModel[];\n    chipsInstance!: Record<string, any>;\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: ISelectOptionHandler;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_CONFIGURATION) configuration!: ISelectConfiguration;\n\n    @PostConstruct()\n    init() {\n        this.selectedOptions = [];\n        this.chipsInstance = {};\n    }\n\n    addOption(option: SelectOptionElementModel): void {\n        if (!this.isOptionAdded(option)) {\n            option.selected = true;\n            this.selectedOptions.push(option);\n        }\n    }\n\n    updateOption(selectedOption: SelectOptionElementModel): void {\n        const index = this.selectedOptions.findIndex(o => o.id === selectedOption.id);\n        if (index !== -1) {\n            this.selectedOptions[index] = selectedOption;\n        }\n\n        const options = this.configuration.options;\n        if (Array.isArray(options)) {\n            const targetOption = options.find(option => option.id === selectedOption.id);\n            if (targetOption) {\n                Object.assign(targetOption, selectedOption);\n            }\n        }\n        \n    }\n\n    updateChipInstance(option: SelectOptionElementModel, chipInstance: any): void {\n        this.chipsInstance[option.id] = chipInstance;\n    }\n\n    deleteOption(option: SelectOptionElementModel): void {\n        const index = this.selectedOptions.findIndex(o => o.id === option.id);\n        if (index !== -1) {\n            option.selected = false;\n            this.selectedOptions.splice(index, 1);\n            delete this.chipsInstance[option.id];\n        }\n    }\n\n    deleteAllOptions(): void {\n        if (this.optionHandler.isMultiple() && this.optionHandler.isOptionAsChip()) {\n            this.deleteAllChipInstance();\n        }\n        this.selectedOptions = [];\n        this.chipsInstance = {};\n    }\n\n    deleteAllChipInstance(): void {\n        this.selectedOptions.forEach(option => {\n            const instance = this.chipsInstance[option.id];\n            if (!instance) return;\n\n            if (option.selectedValueRenderer) {\n                instance?.destroy();\n            } else {\n                instance.api.destroyComponent();\n            }\n        });\n        this.chipsInstance = {};\n    }\n\n    deleteChipInstance(option: SelectOptionElementModel): void {\n        const chipInstance = this.chipsInstance[option.id];\n        if (option.selectedValueRenderer) {\n            chipInstance?.destroy();\n        } else {\n            chipInstance?.api.destroyComponent();\n        }\n        delete this.chipsInstance[option.id];\n    }\n\n    isOptionAdded(option: SelectOptionElementModel): boolean {\n        return this.selectedOptions.some(o => o.id === option.id);\n    }\n\n    getOption(id: string): SelectOptionElementModel | undefined {\n        return this.selectedOptions.find(option => option.id === id);\n    }\n\n    getChipsInstance(optionId: string): any {\n        return this.chipsInstance[optionId];\n    }\n\n    getChipsInstances(): any {\n        return this.chipsInstance;\n    }\n\n    getSelectedOptions(): SelectOptionElementModel[] {\n        return this.selectedOptions;\n    }\n\n    resetOptions(): void {\n        this.selectedOptions = [];\n        this.chipsInstance = {};\n    }\n\n    reOrderOptions(OptionIdsOrder: string[]): void {\n        if (this.configuration.options) {\n            this.configuration.options = [...this.configuration.options].sort(\n                (a, b) => OptionIdsOrder.indexOf(a.id) - OptionIdsOrder.indexOf(b.id)\n            );\n        }\n    }\n\n    setOptionsDisabled(optionIDs: string[], disabled: boolean): void {\n        optionIDs.forEach(id => {\n           const option = this.getOption(id);\n           if(option) {\n                option.disabled = disabled;\n                this.updateOption(option);\n           }\n        })\n    }\n\n\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { SelectInputWrapperController } from \"../select-input-wrapper/select-input-wrapper-controller\";\nimport { SelectInputController } from \"../select-input/select-input-controller\";\nimport { SelectContainerController } from \"../select-container/select-container-controller\";\nimport { SelectRootController } from \"../select-root/select-root-controller\";\nimport { ISelectDropdownInteractor } from \"../../../../selectInteractor/selectDropdownInteractor\";\nimport { SelectBoxIconController } from \"../selectbox-icon/selectbox-icon-controller\";\n\nexport interface ISelectInputHandler{\n    registerSelectRoot(selectRootCtrl : SelectRootController) : void ,\n    getSelectRoot() : SelectRootController,\n    registerSelectContainer(selectContainerCtrl : SelectContainerController) : void ,\n    getSelectContainer() : SelectContainerController,\n    registerSelectInputWrapper(selectInputWarpperCtrl : SelectInputWrapperController) : void,\n    getSelectInputWrapper() : SelectInputWrapperController,\n    registerSelectInput(selectInputCtrl : SelectInputController) : void,\n    getSelectInput() : SelectInputController,\n    getDropdownInteractor() : ISelectDropdownInteractor | null,\n    registerSelectBoxIcon(SelectBoxIconCtrl :SelectBoxIconController):void,\n    getSelectBoxIcon() : SelectBoxIconController | null,\n}\n\n@Bean(\"controllerHandler\")\nexport class ControllerHandler extends EventEmitter{\n    private selectRootCtrl !: SelectRootController;\n    private selectContainerCtrl !:  SelectContainerController;\n    private selectInputWarpperCtrl !: SelectInputWrapperController;\n    private selectInputController !: SelectInputController;\n    private selectBoxIconCtrl !: SelectBoxIconController;\n \n\n    registerSelectRoot(selectRootCtrl : SelectRootController) : void {\n        this.selectRootCtrl = selectRootCtrl;\n    }\n    getSelectRoot() : SelectRootController{\n        return this.selectRootCtrl;\n    }\n    \n    registerSelectContainer(selectContainerCtrl : SelectContainerController) : void {\n        this.selectContainerCtrl = selectContainerCtrl;\n    }\n    getSelectContainer() : SelectContainerController{\n        return this.selectContainerCtrl;\n    }\n\n    registerSelectInputWrapper(selectInputWarpperCtrl : SelectInputWrapperController) : void{\n        this.selectInputWarpperCtrl = selectInputWarpperCtrl;\n    }\n\n    getSelectInputWrapper() : SelectInputWrapperController{\n        return this.selectInputWarpperCtrl;\n    }\n\n    registerSelectInput(selectInputCtrl : SelectInputController) : void {\n        this.selectInputController = selectInputCtrl;\n    }\n\n    getSelectInput() : SelectInputController{\n        return this.selectInputController;\n    }\n\n    getDropdownInteractor() : ISelectDropdownInteractor | null{\n        return this.getSelectInputWrapper()?.getSelectDropdownInteractor() ??  null;\n    }\n\n    registerSelectBoxIcon(SelectBoxIconCtrl :SelectBoxIconController):void{\n        this.selectBoxIconCtrl = SelectBoxIconCtrl;\n    }\n\n    getSelectBoxIcon() : SelectBoxIconController{\n        return this.selectBoxIconCtrl;\n    }\n}\n\n","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { SELECT_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ISelectInputHandler } from \"./select-input-handler\";\nimport { ISelectDataPart } from \"./select-ds\";\nimport { ISelectDropdownInteractor } from \"../../../../selectInteractor/selectDropdownInteractor\";\nimport { ISelectConfigAPI } from \"./select-configApi\";\nimport { ICustomRenderer, ISelectConfiguration, Intiator, SelectOptionElementModel } from \"../../select-configuration-types/select_configuration\";\nimport { DropdownOptionElementModel } from \"../../../../dropdown/dropdown_configuration\";\nimport { ISelectOptionHandler } from \"./select-option-handler.types\";\n\n\nexport interface ISelectInputAPI{\n    openDropdown():void;\n    closeDropdown(focus?:boolean):void;\n    closeDropdownWithoutCellFocus():void;\n    isDropdownOpened():boolean;\n    toggleDropdown():void;\n    clear():void;\n    select(option:SelectOptionElementModel,initiator ?: Intiator):void;\n    deselect(id:string  ,initiator ?: Intiator):void;\n    selectAllOption(initiator ?: Intiator):void;\n    deselectAllOption(initiator ?: Intiator):void;\n    getSelectedOptions():DropdownOptionElementModel[];\n    // getSelectedValues() : string[]\n    getSelectedIDs() : string[];\n    getFormattedValue():string;\n    getSelectedChipDoms(): Record<string, HTMLElement | undefined>\n\n\n    focus():void;\n    blur():void;\n    enable():void;\n    disable():void;\n    destroy():void;\n    validate():void;\n    getValue():string[];\n    setValue(options : SelectOptionElementModel[]):void;\n    updateProperties(properties: ISelectConfiguration): void\n    getElement() : HTMLElement;\n    reset():void;\n\n\n    getPlusIconDOM() : HTMLElement | undefined;\n    addOptions(options :DropdownOptionElementModel[],selectOption : boolean):void;\n    removeOptions(options :DropdownOptionElementModel[]):void;\n    setSelectBoxIcon(selectBoxIconRenderer ?: { new (...args: any[]): ICustomRenderer }, selectBoxIconRendererParams     ?: object):void;\n    search(value:string):void\n    updateOption(option : DropdownOptionElementModel):void\n    reOrderOptions(IdsOrder : string[]):void\n\n    showErrorMessage(message ?: string) : void;\n    hideErrorMessage() : void;\n}\n\n@Bean(SELECT_BEAN_NAME.SELECT_API)\nexport class SelectInputAPI extends EventEmitter implements ISelectInputAPI {\n\n    @AutoWired('configuration') configuration!: ISelectConfiguration;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(\"SelectDataPart\") protected SelectDataPart !: ISelectDataPart;\n    @AutoWired(\"SelectConfigAPI\") protected selectConfigAPI !: ISelectConfigAPI;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n\n    handleClickBound: EventListener | null = null;\n\n\n\n    openDropdown():void{\n        this.selectInputHandler?.getSelectInputWrapper()?.openDropdown();\n        this.addCloseDropdownEvent();\n    }\n\n    closeDropdown(focus?: boolean):void{\n       this.selectInputHandler?.getSelectInputWrapper()?.closeDropdown(focus);\n       this.removeCloseDropdownEvent();\n    }\n\n    closeDropdownWithoutCellFocus():void{\n        this.selectInputHandler?.getSelectInputWrapper()?.closeDropdown(false);\n        this.removeCloseDropdownEvent();\n    }\n\n    isDropdownOpened():boolean{\n        return this.selectInputHandler?.getSelectInputWrapper()?.isDropdownOpen();\n    }\n\n    toggleDropdown():void{\n        this.selectInputHandler?.getSelectInputWrapper()?.toggleDropdown();\n    }\n\n    clear():void{\n        this.selectInputHandler.getSelectInputWrapper().clearAllOptions('api');\n    }\n\n    select(option:SelectOptionElementModel,initiator:Intiator =  \"API\", updateUI : boolean = true):void{\n        const isSelected  =  this.SelectDataPart.isOptionAdded({id:option.id});\n        if(isSelected){\n            return;\n        }\n\n        const dropdownInteractor  :ISelectDropdownInteractor | null = this.selectInputHandler.getSelectInputWrapper().getSelectDropdownInteractor();\n        if(dropdownInteractor && !(this.configuration.dropdownRenderer)){\n            const dropdown = dropdownInteractor.getInstance();\n            const hasOption = dropdown.api.hasOption(option.id);\n            if(!hasOption) {\n                dropdown.api.addOptions([option]);\n            }\n            dropdown.api.select(option.id,initiator);\n        }\n        else{\n            if(option){\n                const params = {\n                    value : option,\n                    initiator,\n                    updateUI\n                }\n                this.selectConfigAPI.onBeforeSelect(params);\n                this.selectConfigAPI.onAfterSelect(params);\n            }\n        }\n    }\n\n    deselect(optionId:string,initiator:Intiator =  \"API\"):void{\n\n        const isSelected = this.SelectDataPart.isOptionAdded({id: optionId});\n        if(!isSelected){\n            return;\n        }\n        \n        const dropdownInteractor :ISelectDropdownInteractor | null = this.selectInputHandler.getSelectInputWrapper().getSelectDropdownInteractor();\n        if(dropdownInteractor  && !(this.configuration.dropdownRenderer)){\n            const dropdown = dropdownInteractor.getInstance();\n            dropdown.api.deselect(optionId,initiator);\n        }\n        else{\n            const optionModel = this.SelectDataPart.getOption(optionId);\n            if(optionModel){\n                const params = {\n                    value : optionModel,\n                    initiator,\n                    api : this\n                }\n                this.selectConfigAPI.onBeforeDeselect(params);\n                this.selectConfigAPI.onAfterDeselect(params);\n            }\n\n        }\n    }\n\n    selectAllOption(initiator:Intiator = \"API\"):void{\n        const allOptions = this.optionHandler.getOptions();\n        if(!allOptions || allOptions.length === 0){\n            return;\n        }\n\n        // Filter out already selected options\n        const unselectedOptions = allOptions.filter(option => {\n            return !this.SelectDataPart.isOptionAdded({id: option.id});\n        });\n\n        if(unselectedOptions.length === 0){\n            return;\n        }\n\n        const dropdownInteractor :ISelectDropdownInteractor | null = this.selectInputHandler.getSelectInputWrapper().getSelectDropdownInteractor();\n        \n        if(dropdownInteractor && !(this.configuration.dropdownRenderer)){\n            // Handle dropdown interactor path\n            // First, ensure all options are added to dropdown\n            const dropdown = dropdownInteractor.getInstance();\n            const optionsToAdd = unselectedOptions.filter(option => !dropdown.api.hasOption(option.id));\n            if(optionsToAdd.length > 0){\n                dropdown.api.addOptions(optionsToAdd);\n            }\n            \n            // Select all options - dropdown will handle batching internally\n            // But to ensure single rerender, we'll use the config API path with updateUI control\n            unselectedOptions.forEach((option, index) => {\n                const isLastOption = index === unselectedOptions.length - 1;\n                const params = {\n                    value : option,\n                    initiator,\n                    updateUI : isLastOption, // Only update UI on the last option\n                    selectAll : true,\n                    selectAllTriggered : true\n                };\n                this.selectConfigAPI.onBeforeSelect(params);\n                this.selectConfigAPI.onAfterSelect(params);\n            });\n        }\n        else{\n            // Handle config API path - select all options but only update UI once\n            unselectedOptions.forEach((option, index) => {\n                const isLastOption = index === unselectedOptions.length - 1;\n                const params = {\n                    value : option,\n                    initiator,\n                    updateUI : isLastOption, // Only update UI on the last option\n                    selectAll : true,\n                    selectAllTriggered : true\n                };\n                this.selectConfigAPI.onBeforeSelect(params);\n                this.selectConfigAPI.onAfterSelect(params);\n            });\n        }\n    }\n\n    deselectAllOption(initiator:Intiator = \"API\"):void{\n        const selectedOptions = this.SelectDataPart.getSelectedOptions();\n        if(!selectedOptions || selectedOptions.length === 0){\n            return;\n        }\n\n        const hadSelections = selectedOptions.length > 0;\n        this.selectInputHandler.getSelectInputWrapper().clearAllOptions('api');\n        if(this.optionHandler.isMultiple() && hadSelections){\n            const hooksParams = {\n                values: [],\n                initiator: initiator,\n                selectAll: false,\n                selectAllTriggered: false\n            };\n            this.optionHandler.onChange?.(hooksParams);\n        }\n    }\n\n    getSelectedOptions():DropdownOptionElementModel[]{\n        return this.SelectDataPart.getSelectedOptions()\n    }\n\n    // getSelectedValues() : string[]{\n    //     const values:string []  = this.SelectDataPart.getSelectedOptions().map(option => option.value);\n    //     return values;\n    // }\n\n    getSelectedIDs() : string[] {\n        const ids: string[] = this.SelectDataPart.getSelectedOptions()\n            .map(option => option.id) \n            .filter((id): id is string => id !== undefined); \n        return ids;\n    }\n\n    getFormattedValue():string{\n        const isMultiple = this.optionHandler.isMultiple();\n        const values:string []  = this.SelectDataPart.getSelectedOptions().map(option => option.value ?? \"null\");\n        if(isMultiple){\n            return values.join(\",\") ?? \"\";\n        }\n        else{\n            return values[0]?? \"\";\n        }\n    }\n    \n\n    getSelectedChipDoms(): Record<string, HTMLElement | undefined>{\n        if(!this.optionHandler.isOptionAsChip()){\n            return {};\n        }\n        const chipDoms: Record<string, HTMLElement | undefined> = {};\n        const selectedOptions = this.SelectDataPart.getSelectedOptions();\n        selectedOptions.forEach(option => {\n            const id = option.id;\n            chipDoms[id] = this.SelectDataPart.getChipsInstance(option.id)?.api.getElement();\n        });\n        return chipDoms;\n    }\n\n\n     //commom APIS\n\n    getValue():string[]{\n        const ids:string []  = this.SelectDataPart.getSelectedOptions().map(option => option.id ?? \"null\");\n        return ids;\n    }\n\n    setValue(options : SelectOptionElementModel[]):void{\n        this.clear();\n        options.forEach((option, index) => {\n            this.select(option, 'API' , index === (options.length - 1));\n        });\n        \n    }\n\n    focus():void{\n        this.selectInputHandler.getSelectInputWrapper().focus();\n    }\n\n    blur():void{\n        this.selectInputHandler.getSelectInputWrapper().blur();\n    }\n\n    enable():void{\n        this.selectInputHandler.getSelectInputWrapper().enableListener();\n    }\n\n    disable():void{\n        this.selectInputHandler.getSelectInputWrapper().disableListener();\n    }\n\n    destroy():void{\n        this.closeDropdown(false);\n        this.selectInputHandler.getSelectRoot().destroy();\n        this.removeCloseDropdownEvent();\n\n    }\n\n    validate():void{\n        throw new Error(\"method not implemented\");\n    }\n\n\n\n    setProperty(_key:string, _value:any){\n        throw new Error(\"method not implemented\");\n    }\n\n    getProperty(key:string):any{\n        return (this.configuration as any)[key]; \n    }\n\n    getElement() : HTMLElement {\n        return this.selectInputHandler?.getSelectRoot()?.getElement() as HTMLElement;\n    }\n\n    hide(subElements ?: string[]):void{\n        this.closeDropdown();\n        this.selectInputHandler.getSelectRoot()?.hide(subElements);\n    }\n\n    show(subElements ?: string[]):void{\n        this.selectInputHandler.getSelectRoot()?.show(subElements);\n    }\n\n    reset():void{\n        this.clear();\n    }   \n\n    updateProperties(properties: ISelectConfiguration): void {\n        // Iterate over the keys of properties and update configuration\n        // Object.entries(properties).forEach(([key, value]) => {\n        //     if (value !== undefined) {\n        //         (this.configuration as any)[key] = value; \n        //     }\n        // });\n        // this.dispatchEvent({\n        //     type: \"PROPERTY_CHANGED\",\n        //     options: properties,\n        // });\n\n\n\n        Object.entries(properties).forEach(([key, value]) => {\n            if (value !== undefined) {\n                // Update the configuration\n                (this.configuration as Record<string, any>)[key] = value;\n    \n                // Dispatch different events based on the property being updated\n                switch (key) {\n                    \n                    case \"enablePlusIcon\":\n                        this.dispatchEvent({\n                            type: \"EnablePlusIcon_Property_Changed\",\n                            options: { [key]: value },\n                        });\n                        break;\n                    \n                    case \"showDropdownIcon\":\n                        this.dispatchEvent({\n                            type: \"ShowDropdownIcon_Property_Changed\",\n                            options: { [key]: value },\n                        });\n                        break;\n\n                    case \"tooltip\":\n                            this.dispatchEvent({\n                                type: \"Tooltip_Property_Changed\",\n                                options: { [key]: value },\n                            });\n                            break;\n\n                    case \"useElipses\":\n                        this.dispatchEvent({\n                            type: \"UseEllipsis_Property_Changed\",\n                            options: { [key]: value },\n                        });\n                        break;\n                    case \"ellipsesRendererParams\":\n                        this.configuration.ellipsesRendererParams =  value;\n                        break;\n                    \n                    case \"selectBoxIconRenderer\":\n                        this.configuration.selectBoxIconRenderer = value;\n                        this.selectInputHandler?.getSelectBoxIcon()?.reRenderIcon();\n                        break;\n\n                    case \"selectBoxIconRendererParams\":\n                        this.configuration.selectBoxIconRendererParams = value;\n                        this.selectInputHandler?.getSelectBoxIcon()?.reRenderIcon();\n                        break;\n                    case \"placeholder\":\n                        this.configuration.placeholder = value;\n                        this.dispatchEvent({\n                            type : \"EVENT_PLACEHOLDER_CHANGED\"\n                        })\n                        break;\n                    case \"selectedIndex\":\n                     \n                            this.dispatchEvent({\n                                type : 'EVENT_DATA_UPDATED'\n                            })\n                        \n                        break;\n\n                    // Add additional cases for other properties as needed\n                    default:\n                        this.dispatchEvent({\n                            type: \"PROPERTY_CHANGED\",\n                            options: { [key]: value },\n                        });\n                        break;\n            }\n            }\n        });\n    }\n\n\n    addCloseDropdownEvent(){\n        \n        this.handleClickBound = this.handlerCloseDropdown.bind(this);\n        document.addEventListener('click',(event:any)=>{\n            event.stopPropagation();\n            this.handleClickBound\n        });\n    }\n\n    removeCloseDropdownEvent(){\n        if (this.handleClickBound) {\n            document.removeEventListener('click', this.handleClickBound);\n            this.handleClickBound = null; // Clear the reference\n        }\n    }\n\n\n    handlerCloseDropdown(event : any){\n        event.stopPropagation();\n        const dropdownElement  =  this.getElement() as HTMLElement;\n        if(!event.composedPath().includes(dropdownElement)){\n            this.closeDropdownWithoutCellFocus();\n        }\n    }\n\n\n    getPlusIconDOM() : HTMLElement | undefined{\n        return this.selectInputHandler.getSelectInput().getPlusIconDom() ?? undefined;\n    }\n\n\n    addOptions(options :DropdownOptionElementModel[],selectOption: boolean = true):void{\n        this.selectInputHandler.getSelectInput().addOptions(options,selectOption);\n    }\n\n    removeOptions(options :DropdownOptionElementModel[]):void{\n        this.selectInputHandler.getSelectInput().removeOptions(options);\n\n    }\n\n    setSelectBoxIcon(selectBoxIconRenderer ?:{ new (...args: any[]): ICustomRenderer } , selectBoxIconRendererParams     ?: object){\n        this.configuration.selectBoxIconRenderer = selectBoxIconRenderer;\n        this.configuration.selectBoxIconRendererParams = selectBoxIconRendererParams;\n        this.selectInputHandler?.getSelectBoxIcon()?.reRenderIcon();\n    }\n\n    getEllipsesIcon():HTMLElement{\n        return this.selectInputHandler.getSelectInput().getEllipsesIcon();\n    }\n\n    search(value:string):void{\n        this.openDropdown();\n        this.selectInputHandler.getDropdownInteractor()?.onSearch(value)\n    }\n\n    updateOption(option : DropdownOptionElementModel):void{\n        this.selectInputHandler.getSelectInput().updateOption(option);\n    }\n\n    reOrderOptions(IdsOrder : string[]):void{\n        if(!IdsOrder || IdsOrder.length <2){\n            return;\n        }\n        this.closeDropdown();\n        this.SelectDataPart.reOrderOptions(IdsOrder);\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n\n    disableOptions(optionsIds : string[]) : void {\n         this.selectInputHandler.getSelectInput().setOptionsDisabled(optionsIds, true);\n    }   \n\n    enableOptions(optionIds : string[]) : void {\n        this.selectInputHandler.getSelectInput().setOptionsDisabled(optionIds, false);\n    }\n}\n","import { SelectDropdown } from \"../dropdown/dropdown\";\nimport { IDropdownConfiguration, DropdownOptionElementModel } from \"../dropdown/dropdown_configuration\";\nimport { PopupHandler } from \"../select/src/core/model/popup-handler\";\nimport { ISelectConfigAPI } from \"../select/src/core/model/select-configApi\";\nimport { PopupComponentPositionParams, Position } from \"../utility/PopupHandler/CorePopupHandler\";\n\nexport interface ISelectDropdownInteractor{\n\n    setModel(model: ISelectConfigAPI):void;\n    destroy():void;\n    focus():void;\n    blur():void;\n    getInstance():any;\n    addOptions(options : string[] |  DropdownOptionElementModel[]) : void;\n    removeOptions(options : string[] |  DropdownOptionElementModel[]) : void;\n    onSearch(value:string):void;\n    autoFocusSelectedOption():void;\n    enableOptions(optionIDs : string[]) : void;\n    disableOptions(optionIDs : string[]) : void;\n}\n\nexport interface ICustomRenderer{\n    init(params : any) : void;\n    getElement() : HTMLElement | null;\n    destroy() : void;\n}\n\n\n\n\nexport class SelectDropdownInteractor implements ISelectDropdownInteractor{\n\n    private model !:  ISelectConfigAPI;\n    private dropdown : any ;\n    private popupDestroy :any;\n    private popupHandler =  new PopupHandler();\n\n   public setModel(model: ISelectConfigAPI):void{\n        this.model = model;\n        this.createDropdown();\n    }\n\n\n   public  getInstance(){\n        return this.dropdown;\n    }\n\n    public destroy(): void{\n        // this.dropdown.api.destroy();\n        this.popupDestroy();\n    }\n\n    public focus():void{    \n        this.dropdown.api.focus();\n    }\n\n    public blur():void{\n        this.dropdown.api.blur();\n    }\n\n    public addOptions(options : string[] |  DropdownOptionElementModel[]) : void{\n        this.dropdown.api.addOptions(options);\n    }\n\n    public removeOptions(options : string[] |  DropdownOptionElementModel[]) : void{\n        this.dropdown.api.removeOptions(options);\n    }\n\n    public autoFocusSelectedOption():void{\n        this.dropdown.api.autoFocusSelectedOption();\n    }\n\n    public enableOptions(optionIDs : string[]) : void {\n        this.dropdown.api.enableOptions(optionIDs);\n    }\n\n    public disableOptions(optionIDs : string[]) : void {\n        this.dropdown.api.disableOptions(optionIDs);\n    }\n\n    onSearch(value: string): void {\n        this.dropdown.api.onSearch(value);\n    }\n\n\n    private addPosition(){\n        const dropdownElement = this.dropdown.api.getElement();\n        const dropdownPosition = this.model.getDropdownPosition() ?? Position.bottomLeft;\n\n        const positionParams: PopupComponentPositionParams = {\n            popUpElement    : dropdownElement,\n            sourceElement   : this.model.getSelectInputWrapper(),\n            position        : dropdownPosition, \n            keepWithinBounds : true,\n            gapX : this.model.getGapX(),\n            gapY : this.model.getGapY(),   \n            relativePosition : true  \n        };\n\n        const positionCallback = this.popupHandler.positionPopupByComponent.bind(this.popupHandler, positionParams, this.model.getDropdownAppendTo());\n\n\n        const addPopup = this.popupHandler.addPopup({\n                            childElement   : dropdownElement,\n                            anchorToElement: this.model.getAppendTo(),\n                            popupParentElement: this.model.getDropdownAppendTo(),\n                            positionCallback,\n                            ariaLabel : '',\n                        });\n        this.popupDestroy = addPopup.hideFunction;\n    }\n\n    private createDropdown(){\n\n        this.dropdown = new SelectDropdown(this.createDropdownConfig());\n        this.addPosition();\n        if(this.model.isVirtualList()){\n            this.dropdown.api.updateVirtualList();\n        } \n    }\n    \n    private createDropdownConfig():IDropdownConfiguration{\n\n        return {\n            options           : this.model.getOptions(),\n            multiple          : this.model.isMultiple(),\n            selectedData     : ()=>this.model.getSelectedData(),\n            selectionLimit    : this.model.getSelectionLimit(),\n            closeOnSelect     : this.model.isCloseOnSelect(),\n\n            dropdownAppendTo  : this.model.getDropdownAppendTo(),\n            searchable        : this.model.isSearchable(),\n            searchBoxPlaceholder : this.model.getSearchBoxPlaceholder(),\n            virtualList       : this.model.isVirtualList(),\n            sort              : this.model.isSortEnabled(),\n            sortOrder         : this.model.getSortOrder(),\n            groupBy           : this.model.isGroupByEnabled(),\n            selectAllButton   : this.model.isSelectAllButtonEnabled(),\n            clearable         : this.model.isClearableButtonEnabled(),\n            isOptionAsChip    : this.model.isOptionAsChip(),\n\n            enableCreateNewOption : this.model.isCreateNewOptionEnabled(),\n            enableNoneOption      : this.model.isNoneOptionEnabled(),\n            // enableAddCollaborator : this.model.isAddCollaboratorEnabled(),\n\n            dropdownRenderer               : this.model.getDropdownRenderer(),\n            dropdownRendererParams         : this.model.getDropdownRendererParams(),\n            dropdownFooterRenderer         : this.model.getDropdownFooterRenderer(),\n            dropdownFooterRendererParams   : this.model.getDropdownFooterRendererParams(),\n            dropdownHeaderRenderer         : this.model.getDropdownHeaderRenderer(),\n            dropdownHeaderRendererParams   : this.model.getDropdownHeaderRendererParams(),\n\n            createNewOptionRenderer        : this.model.getCreateNewOptionRenderer(),\n            createNewOptionRendererParams  : this.model.getCreateNewOptionRendererParams(),\n\n            noOptionRenderer          : this.model.getNoOptionRenderer(),\n            noOptionRendererParams    : this.model.getNoOptionRendererParams(),\n\n            readonly              : this.model.isReadOnly(),\n\n            classname             : this.model.getDropdownClassname(),\n\n            autoFocusSelectedOption : this.model.isautoFocusSelectedOptionEnabled(),\n\n            tooltipMessage               : this.model.getTooltipMessage(),\n            tooltipRegex                 : this.model.getTooltipRegex(),\n            tooltipPosition              : this.model.getTooltipPosition(),\n            tooltipAppendto              : this.model.getTooltipAppendto(),\n            tooltipHideDelay             : this.model.getTooltipHideDelay(),\n            tooltip                      : this.model.shouldShowTooltip(),\n\n            validation        : this.model.getValidation(),\n\n            onBeforeSelect       : (params:any) =>this.model.onBeforeSelect(params),\n            onAfterSelect        : (params:any) =>this.model.onAfterSelect(params),\n            onBeforeDeselect     : (params:any) =>this.model.onBeforeDeselect(params),\n            onAfterDeselect      : (params:any) =>this.model.onAfterDeselect(params),\n            onChange             : (params:any) =>this.model.onChange(params),\n            onBeforeDropdownOpen : () =>this.model.onBeforeDropdownOpen(),\n            onAfterDropdownOpen  : () =>this.model.onAfterDropdownOpen(),\n            onBeforeDropdownClose: (focus?:boolean) =>this.model.onBeforeDropdownClose(focus),\n            onAfterDropdownClose : () =>this.model.onAfterDropdownClose(),\n            onCreateOption       : (newOption:any) =>this.model.onCreateOption(newOption),\n            onBeforeCreateOption : (newOption:any)                                           : any =>this.model.onBeforeCreateOption(newOption),\n            onAfterCreateOption  : (newOption:any)                                           : any=>this.model.onAfterCreateOption(newOption),\n            onKeydown            : (event:KeyboardEvent)=>this.model.onKeydown(event),\n            model                : this.model.getModel(),\n            onSelectAll          : (params) => this.model.onSelectAll(params),\n            onBeforeSelectAll    : (params) => this.model.onBeforeSelectAll(params),\n            onAfterSelectAll     : (params) => this.model.onAfterSelectAll(params)\n\n        }\n        \n    }\n\n\n\n    \n}","import { SelectInputWrapperCompType} from \"./select-input-wrapper-types\"\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { setAriaDisabled, setAriaExpanded, setAriaLabel, setAriaRole } from \"@dg/corecomponent\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\nimport { composeClasses } from \"@dg/utils\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { ISelectDataPart } from \"../model/select-ds\";\nimport { PopupHandler } from \"../model/popup-handler\";\nimport { ISelectDropdownInteractor, SelectDropdownInteractor } from \"../../../../selectInteractor/selectDropdownInteractor\";\nimport { ISelectConfigAPI } from \"../model/select-configApi\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { getSelectRootUtilityClass } from \"../select-root/select-root-classes\";\nimport { SELECT_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ISelectInputAPI } from \"../model/select-api\";\n\nconst useUtilityClasses = (ownerState : any) =>{\n    const {disabled, readonly} = ownerState;\n    const slots ={\n        root : {\n            slot : 'input-wrapper',\n            modifiers:[\n                disabled && 'disabled',\n                readonly &&'readonly',\n            ],\n        },\n\n    };\n    return composeClasses(slots, getSelectRootUtilityClass);\n}\n\nexport class SelectInputWrapperController extends AbstractController<SelectInputWrapperCompType>{\n\n    static DOM_KEY = '_DG_SELECT_INPUT_WRAPPER';\n\n    private domKey = `_DG_${Math.random().toString()}`;\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(\"SelectDataPart\") protected selectDataPart !: ISelectDataPart;\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    @AutoWired(\"SelectConfigAPI\")  selectConfigAPI !: ISelectConfigAPI;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_API)  selectAPI !: ISelectInputAPI;\n    \n    private comp!: SelectInputWrapperCompType\n    private selectDropdownInteractor !: ISelectDropdownInteractor | null;\n    private clearAllComp !: HTMLElement | null;\n    parentComp :any;\n    private resizeObserver: ResizeObserver | null = null;\n\n    setComponent(component: SelectInputWrapperCompType): void {\n        this.comp = component;\n        this.selectInputHandler.registerSelectInputWrapper(this);\n        this.applyClasses();\n        this.setTabindex()\n        this.setAriaAttributes();\n        this.registerEvents();\n        this.registerKeyboardEvents();\n        this.registerParentComp();\n        this.optionHandler.setDomData(component.getGui(), SelectInputWrapperController.DOM_KEY, this.domKey);\n    }\n\n    private setTabindex():void{\n        if(!this.optionsHandler.isDisabled()){\n            const element = this.comp.getGui();\n            element?.setAttribute('tabindex','0')\n        }else{\n            const element = this.comp?.getGui();\n            element?.removeAttribute('tabindex')\n        }\n    }\n    registerParentComp():void{\n       this.parentComp= this.comp.getParentComponent();\n    }\n\n    setClearAllComp(clearAllComp: HTMLElement |null): void {\n        this.clearAllComp = clearAllComp;\n    }\n\n    getSelectDropdownInteractor(): ISelectDropdownInteractor |null {\n      return this.selectDropdownInteractor ? this.selectDropdownInteractor : null\n    }\n\n    private applyClasses() : void {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCssClass(classes.root);\n        this.comp.getGui().classList.add('dg-field__input-wrapper');\n    }\n\n    private getOwnerState() {\n        return {\n            disabled: this.optionHandler.isDisabled(),\n            readonly: this.optionHandler.isReadOnly(),\n            multiple: this.optionHandler.isMultiple()\n        }\n\t}\n\n    private setAriaAttributes() {\n        const selectInputWrapper = this.comp.getGui();\n        setAriaRole(selectInputWrapper, 'combobox');\n        setAriaExpanded(selectInputWrapper, true);\n        setAriaLabel(selectInputWrapper, \"Select input wrapper\");\n        setAriaDisabled(selectInputWrapper, this.optionHandler.isDisabled());\n        selectInputWrapper.setAttribute('aria-haspopup', 'listbox');\n\n    }\n    private registerEvents() {\n        const ownerState =  this.getOwnerState();\n        this.addListener(this.eventHandler,'UseEllipsis_Property_Changed',this.useEllipsisPropertyUpdated.bind(this));\n        this.addListener(this.eventHandler,'PROPERTY_CHANGED',this.setTabindex.bind(this))\n\n        this.optionHandler.isUseElipses() && this.enableResizeObserver();\n\n        if(ownerState.readonly || ownerState.disabled){\n            return;\n        }\n        this.enableListener(); \n\n        this.addListener(this.comp.getGui(), 'focusout', (event : FocusEvent) => {\n            const elementWithFocus = event.relatedTarget as HTMLElement;\n\n            const focusInsideComponent = this.isElementFromParent(elementWithFocus);\n\n            const closeCallback = () => {\n                this.closeDropdown(false);\n                this.optionHandler.onBlur();\n            }\n\n            if(!focusInsideComponent) {\n                if(!this.isElementWithinCustomPopup(elementWithFocus)) {\n                    closeCallback();\n                    this.dispatchEvent({type :'SET_FOCUS_CLASS',value : false})\n                }\n            }\n        })\n\n        this.addListener(this.comp.getGui(), 'focusin', (event : FocusEvent) => {\n            const elementWithFocus = event.relatedTarget as HTMLElement;\n            if(!elementWithFocus || !this.isElementWithinCustomPopup(elementWithFocus)) {\n                this.optionHandler.onFocus();\n                this.dispatchEvent({type :'SET_FOCUS_CLASS',value : true})\n            }\n        })\n\n       \n    }\n\n    private isElementWithinCustomPopup(element: HTMLElement): boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            if (pointer.classList.contains('ZG-popup') || pointer.classList.contains('ZG-has-popup')) {\n                return true;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n    private isElementFromParent(element : HTMLElement) : boolean {\n        let pointer: HTMLElement | null = element;\n        while (pointer) {\n            const uniqueKey = this.optionsHandler.getDomData(pointer, SelectInputWrapperController.DOM_KEY);\n            if(!!uniqueKey) {\n                const eventFromThisParent = uniqueKey === this.domKey;\n                return eventFromThisParent;\n            }           \n            pointer = pointer.parentElement;\n        }\n        return false;\n    }\n    enableResizeObserver(): void {\n        if (this.optionHandler.isOptionAsChip() && this.optionHandler.isUseElipses() && this.optionHandler.isMultiple()) {\n           \n            if (!this.resizeObserver) {\n                this.resizeObserver = new ResizeObserver(() => {\n                    this.selectDataPart.deleteAllChipInstance();\n                    const selectedOptions =   this.selectDataPart.getSelectedOptions();\n                    selectedOptions && (selectedOptions.length > 0) &&this.selectInputHandler.getSelectInput().renderSelectedChip();\n                });\n            \n                this.resizeObserver.observe(this.comp.getGui());\n            }\n        }\n    }\n\n    disableResizeObserver(): void {\n        if (this.resizeObserver) {\n            // Stop observing and clear the instance\n            this.resizeObserver.disconnect();\n            this.resizeObserver = null;\n        }\n    }\n\n    useEllipsisPropertyUpdated():void{\n        if(this.optionHandler.isUseElipses()) {\n            this.enableResizeObserver();\n        }\n        else{\n            this.disableResizeObserver();\n            this.selectDataPart.deleteAllChipInstance();\n            this.selectInputHandler.getSelectInput().createSelectedChip();\n        }\n    }\n\n    \n    enableListener(): void{\n        const container = this.comp.getGui();\n        !(this.optionHandler.isPlusIconEnabled()) && this.addListener(container,`click`,this.toggleDropdown.bind(this));\n        this.addListener(this.eventHandler,\"destroyDropdown\", ()=>{this.destroyDropdown()});\n        this.addListener(this.eventHandler,'keydown', (event: KeyboardEvent)=>this.handleKeyEvent(event));\n        if(this.clearAllComp){\n            this.addListener(this.clearAllComp,'click',(event)=>{\n                event.stopPropagation();\n                this.clearAllOptions(); \n            });\n        }\n    }\n\n    disableListener(): void {\n        const container = this.comp.getGui();\n        !(this.optionHandler.isPlusIconEnabled()) && container.removeEventListener('click',this.toggleDropdown.bind(this));\n        this.eventHandler.removeEventListener('destroyDropdown', ()=>{this.destroyDropdown()});\n        this.eventHandler.removeEventListener('keydown', (event: KeyboardEvent)=>this.handleKeyEvent(event));\n        if(this.clearAllComp){\n            this.clearAllComp.removeEventListener('click',(event)=>{\n                    event.stopPropagation();\n                    this.clearAllOptions(); \n                });\n        }\n    }\n\n    clearAllOptions(initiator : 'api' | 'ui' = 'ui'):void{\n        \n        // To claer selected option in select input \n        this.dispatchEvent({\n            type : \"clearAll\",\n            initiator : initiator\n        });\n        //To clear all selected option from drop down\n       (!this.optionHandler.getDropdownRenderer())  && this.selectDropdownInteractor?.getInstance()?.api.clear();\n    }\n\n    private registerKeyboardEvents() {\n        const ownerState =  this.getOwnerState();\n        if(ownerState.readonly || ownerState.disabled){\n            return;\n        }\n         const container =  this.comp.getGui();\n         this.addListener(container, 'keydown', (event: KeyboardEvent) =>{\n            if(ownerState.readonly || ownerState.disabled){\n                return;\n            }\n            if(event.key === 'Enter' || event.key === ' '){\n               \n                event.preventDefault();\n                this.toggleDropdown();\n            }\n            this.optionHandler.onKeydown(event);\n         })\n    }\n    \n    private handleKeyEvent(_event : KeyboardEvent) : void{\n        const ownerState =  this.getOwnerState();\n        if(ownerState.readonly || ownerState.disabled){\n            return;\n        }\n        this.toggleDropdown();\n        this.selectDropdownInteractor?.focus();\n    }\n\n\n\n    openDropdown():void{\n        if(this.optionHandler.isDropdownOpenPrevented()) return;\n        if(this.selectDropdownInteractor) return ;\n        else{\n            this.optionHandler.onBeforeDropdownOpen();\n            this.selectDropdownInteractor =new SelectDropdownInteractor();\n            this.selectDropdownInteractor.setModel(this.selectConfigAPI);\n            this.selectDropdownInteractor.focus();\n            this.optionHandler.onAfterDropdownOpen();\n            this.optionHandler.isautoFocusSelectedOptionEnabled()  && this.selectDropdownInteractor.autoFocusSelectedOption();\n            this.dispatchEvent({type :'SET_FOCUS_CLASS',value : true})\n        }\n\n    }\n\n    isDropdownOpen():boolean{\n        return !!this.selectDropdownInteractor;\n    }\n\n    closeDropdown(focus : boolean = true):void{\n        const selectdropdownInteracter = this.selectDropdownInteractor;\n\n        this.selectDropdownInteractor = null;\n        if(!selectdropdownInteracter) return;\n        this.optionHandler.onBeforeDropdownClose();\n        focus && this.focus(true) ;\n        selectdropdownInteracter?.destroy();\n        focus && this.focus(true);\n        this.optionHandler.onAfterDropdownClose();\n        !focus && this.optionHandler.onBlur();\n        this.dispatchEvent({type :'SET_FOCUS_CLASS',value : false})\n\n\n    }\n\n    closeDropdownWithoutCellFocus():void{\n        this.selectDropdownInteractor?.destroy();\n        this.selectDropdownInteractor = null;\n\n    }\n\n\n\n    toggleDropdown(): void {\n        if (this.selectDropdownInteractor) {\n\n            // this.optionHandler.onBeforeDropdownClose();\n\n            this.selectAPI.closeDropdown();\n            this.dispatchEvent({\n                type : 'EVENT_SELECT_FOCUS'\n            })\n\n            // this.optionHandler.onAfterDropdownClose();\n            \n        } \n        else {\n            // this.optionHandler.onBeforeDropdownOpen();\n\n            this.selectAPI.openDropdown();\n\n            // this.optionHandler.onAfterDropdownOpen();\n        }\n    }\n\n    focusDropdown(){    \n        this.selectDropdownInteractor?.focus();\n    }\n\n\n    getProperty(): any{\n        return {\n            isDisabled : ()=>this.optionHandler.isDisabled(),\n            isReadOnly : ()=>this.optionHandler.isReadOnly(),\n            isClearable : ()=>this.optionHandler.isClearableButtonEnabled(),\n            getLabel : ()=>this.optionHandler.getLabel(),\n            isRequired : ()=>this.optionHandler.isRequired(),\n            isMultiple : ()=>this.optionHandler.isMultiple(),\n            showDropdownIcon : ()=>this.optionHandler.showDropdownIcon()\n\n        }\n    }\n\n    focus(preventScroll ?: boolean ){\n        this.comp.getGui().focus({\n            preventScroll \n        });\n    }\n\n    blur(){\n        this.comp.getGui().blur();\n        this.optionHandler.onBlur();\n    }\n\n\n    destroyDropdown(){\n        if (this.selectDropdownInteractor) {\n            this.selectDropdownInteractor.destroy();\n            this.selectDropdownInteractor = null;\n        } \n    }\n\n     destroy(): void {\n        this.comp.getGui().remove(); \n    }\n\n    open(){\n        this.toggleDropdown();\n    }\n\n    close(){\n        this.toggleDropdown();\n\n    }    \n\n    getElement():HTMLElement{\n        return this.comp.getGui();\n    }\n\n    enableOptions(optionIds : string[]) : void {\n        if(this.isDropdownOpen()) {\n            this.selectDropdownInteractor && this.selectDropdownInteractor.enableOptions(optionIds)\n        }\n    }\n\n    disableOptions(optionIds : string[]) : void {\n        if(this.isDropdownOpen()) {\n            this.selectDropdownInteractor && this.selectDropdownInteractor.disableOptions(optionIds)\n        }\n    }\n}","import {Component} from \"@dg/corecomponent/Component.js\";\nimport {PostConstruct} from \"@dg/corecomponent\"\nimport { SelectInputWrapperCompType } from \"./select-input-wrapper-types\";\nimport { SelectInputWrapperController } from \"./select-input-wrapper-controller\";\n\n \n\n\nfunction RootTemplate(props :any) {\n\tconst root = document.createElement('div');\n\n\tconst selectInput =  document.createElement('select-input');\n\troot.appendChild(selectInput);\n\t\n\t// const iconContainer = document.createElement('div');\n\t// iconContainer.className = 'dg-selectbox__icon-container';\n\tlet clearallComp = null;\n\n\tconst SelectboxIconComponent = document.createElement('select-icon');\n\n\tif(props.isClearable()){\n\t\t clearallComp = renderClearAll(SelectboxIconComponent);\n\t}\n\troot.appendChild(SelectboxIconComponent);\n\n\treturn {root,clearallComp};\n}\n\n\nfunction renderClearAll(container: HTMLElement): HTMLElement {\n    const div = document.createElement('div');\n    div.classList.add('dg-selectbox__clear-all-icon');\n\n    const svgNS = \"http://www.w3.org/2000/svg\";\n    const svg = document.createElementNS(svgNS, 'svg');\n    svg.setAttribute('fill', '#a5a1a1');\n    svg.setAttribute('width', '35px');\n    svg.setAttribute('height', '35px');\n    svg.setAttribute('viewBox', '-532.48 -532.48 2088.96 2088.96');\n    svg.setAttribute('transform', 'rotate(0)matrix(1, 0, 0, 1, 0, 0)');\n    svg.setAttribute('stroke', '#a5a1a1');\n    svg.setAttribute('stroke-width', '0.01024');\n\n    // First <g> element\n    const gBg = document.createElementNS(svgNS, 'g');\n    gBg.setAttribute('id', 'SVGRepo_bgCarrier');\n    gBg.setAttribute('stroke-width', '0');\n    svg.appendChild(gBg);\n\n    // Second <g> element\n    const gTracer = document.createElementNS(svgNS, 'g');\n    gTracer.setAttribute('id', 'SVGRepo_tracerCarrier');\n    gTracer.setAttribute('stroke-linecap', 'round');\n    gTracer.setAttribute('stroke-linejoin', 'round');\n    gTracer.setAttribute('stroke', '#CCCCCC');\n    gTracer.setAttribute('stroke-width', '22.528');\n    svg.appendChild(gTracer);\n\n    // Third <g> element with icon\n    const gIcon = document.createElementNS(svgNS, 'g');\n    gIcon.setAttribute('id', 'SVGRepo_iconCarrier');\n\n    const path = document.createElementNS(svgNS, 'path');\n    path.setAttribute('d', \"M512 896c212.079 0 384-171.921 384-384 0-212.077-171.921-384-384-384-212.077 0-384 171.923-384 384 0 212.079 171.923 384 384 384zm136.832-520.839c16.661 16.663 16.661 43.677 0 60.338l-76.497 76.497 76.497 76.501c16.661 16.661 16.661 43.678 0 60.339s-43.678 16.661-60.339 0l-76.497-76.497-76.497 76.493c-16.663 16.666-43.678 16.666-60.34 0-16.662-16.661-16.662-43.674 0-60.339l76.498-76.497-76.497-76.493c-16.662-16.663-16.662-43.678 0-60.341s43.677-16.662 60.339 0l76.497 76.495 76.497-76.496c16.661-16.662 43.678-16.662 60.339 0z\");\n    gIcon.appendChild(path);\n    svg.appendChild(gIcon);\n\n    div.appendChild(svg);\n    container.appendChild(div);\n    return div;\n}\n\n\nexport class SelectInputWrapperComponent extends Component{\n\n\tprivate appendTo: HTMLElement | null;\n\tconstructor(appendTo : HTMLElement){\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst controller  =  this.createManagedBean(new SelectInputWrapperController());\n\t\tconst props =  controller.getProperty();\n\t\tconst {root, clearallComp} = RootTemplate(props);\n\t\tthis.setTemplate(root);\n\t\tcontroller.setClearAllComp(clearallComp);\n\t\tcontroller.setComponent(this.getComponent());\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tprivate getComponent() : SelectInputWrapperCompType{\n\t\treturn {\n\t\t\tgetGui : () => this.getGui(),\n            addOrRemoveCssClass : (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tgetParentComponent : () => this.getParentComponent(),\n\t\t\t// reRenderComponent : (selectInputWrapperController :SelectInputWrapperController, parentComp:any ) => this.reRenderComponent(selectInputWrapperController, parentComp),\n\n\t\t}\n\t}\n\tprivate addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n\tprivate appendElementIntoUserDom() :void{\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t})\n\t}\n\t\n\t protected destroy(): void {\n\t\tthis.getGui().remove();    \n\t}\n\n\t// reRenderComponent(selectInputWrapperController :SelectInputWrapperController, parentComp:any ):void{\n\t// \tselectInputWrapperController.destroy()\n\t// \tconst props = selectInputWrapperController.getProperty();\n\t// \tconst {root, clearallComp} = RootTemplate(props);\n\t// \tthis.setTemplate(root);\n\t// \tselectInputWrapperController.setClearAllComp(clearallComp);\n\t// \tselectInputWrapperController.setComponent(this.getComponent());\n\t// \tparentComp.appendChild(this.getGui());\n\t// }\n\n\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport {SELECT_BEAN_NAME} from \"../../constants/beanname-constant\"\nimport {ICustomRenderer, ISelectConfiguration, SelectOptionElementModel} from \"../../select-configuration-types/select_configuration\"\nimport {ISelectOptionHandler} from \"./select-option-handler.types\"\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { ISelectDataPart } from \"./select-ds\";\nimport { ISelectInputHandler } from \"./select-input-handler\";\nimport { ISelectInputAPI } from \"./select-api\";\nimport { SelectAllEventParams } from \"../../../../dropdown/dropdown_configuration\";\n\n\nexport interface ISelectConfigAPI {\n    getConfiguration(): ISelectConfiguration;\n    getAppendTo(): HTMLElement ;\n    getSelectInputWrapper():HTMLElement\n    setAppendTo(appendTo : HTMLElement): void;\n    getDropdownAppendTo(): HTMLElement;\n    getOptions(): SelectOptionElementModel[] | undefined;\n    isMultiple(): boolean;\n    getSelectedData(): string[];\n    getSelectionLimit(): number | undefined;\n    isCloseOnSelect(): boolean;\n    getDropdownPosition(): Position | undefined;\n    isSearchable(): boolean;\n    getSearchBoxPlaceholder(): string; \n    isVirtualList(): boolean;\n    isSortEnabled(): boolean;\n    getSortOrder(): 'asc' | 'desc' | undefined;\n    isGroupByEnabled(): boolean;\n    isSelectAllButtonEnabled(): boolean;\n    isClearableButtonEnabled(): boolean;\n    isDisabled(): boolean;\n    isReadOnly(): boolean;\n    getPlaceholder(): string | undefined;\n    getValidation(): ((value: any) => boolean) | undefined;\n    isRequired(): boolean;\n    isOptionAsChip(): boolean;\n    getLabel(): string | undefined;\n    getHelperText(): string | undefined;\n    isCreateNewOptionEnabled():boolean;\n    // isAddCollaboratorEnabled(): boolean;\n    isNoneOptionEnabled():boolean;\n    getGapX():number;\n    getGapY():number;\n    getDropdownRenderer(): { new (...args: any[]): ICustomRenderer } | undefined\n    getDropdownRendererParams(): object | undefined;\n    getDropdownFooterRenderer(): { new (...args: any[]): ICustomRenderer } | undefined\n    getDropdownFooterRendererParams(): object | undefined;\n    getDropdownHeaderRenderer():  { new (...args: any[]): ICustomRenderer } | undefined\n    getDropdownHeaderRendererParams(): object | undefined\n    getCreateNewOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined;\n    getCreateNewOptionRendererParams(): object | undefined;\n    getNoOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined;\n    getNoOptionRendererParams(): object | undefined;\n    isautoFocusSelectedOptionEnabled(): boolean \n\n    shouldShowTooltip(): boolean;\n    getTooltipMessage(): string;  \n    getTooltipRegex(): RegExp | undefined;\n    getTooltipPosition(): Position;\n    getTooltipAppendto(): HTMLElement | undefined;\n    getTooltipHideDelay(): number;\n\n    \n    // Event handlers\n    onBeforeDropdownOpen(): void;\n    onAfterDropdownOpen(): void;\n    onBeforeDropdownClose(focus?:boolean): void;\n    onAfterDropdownClose(): void;\n    onBeforeSelect(params: any): boolean;\n    onAfterSelect(params: any): void;\n    onBeforeDeselect(params: any): boolean;\n    onAfterDeselect(params: any): void;\n    onChange(params:any): void;\n    onCreateOption(newOption:any):void;\n    onBeforeCreateOption(option:any): any;\n    onAfterCreateOption(option:any): any\n    onKeydown(event:KeyboardEvent):void;\n\n    getAriaLabelledby(): string;\n    getDropdownClassname(): string | string[] ;\n\n    getModel() : 'local' | 'remote';\n\n    onSelectAll(params : SelectAllEventParams) : void; \n    onBeforeSelectAll(params : SelectAllEventParams) : boolean; \n    onAfterSelectAll(params : SelectAllEventParams) : void; \n\n}\n\n@Bean(\"SelectConfigAPI\")\nexport class SelectConfigAPI extends EventEmitter  implements  ISelectConfigAPI{\n\n    @AutoWired(SELECT_BEAN_NAME.SELECT_CONFIGURATION) configuration!: ISelectConfiguration;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"SelectDataPart\") protected selectDataPart !: ISelectDataPart;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(SELECT_BEAN_NAME.SELECT_API) protected selectApi !: ISelectInputAPI;\n\n    getConfiguration(): ISelectConfiguration {\n        return this.configuration;\n    }\n\n    getAppendTo(): HTMLElement {\n        return  this.selectInputHandler.getSelectRoot().getElement()  ?? this.optionHandler.getAppendTo() as HTMLElement;\n    }\n\n    getSelectInputWrapper():HTMLElement{\n        return this.selectInputHandler.getSelectInputWrapper().getElement()\n    }\n\n    setAppendTo(appendTo : HTMLElement) {\n            this.configuration.appendTo  = appendTo;\n    }\n\n    getDropdownAppendTo(): HTMLElement {\n        return this.configuration.dropdownAppendTo ?? document.body;\n    }\n\n    getOptions(): SelectOptionElementModel[] | undefined {\n        return this.configuration.options;\n    }\n\n    isMultiple(): boolean {\n        return this.configuration.multiple ?? false;\n    }\n\n    getSelectedData() : string[] {\n        return this.selectDataPart.getSelectedOptions().map((data) => data.id);\n        // return this.configuration.selectedIndex;\n    }\n\n    getSelectionLimit(): number | undefined {\n        return this.configuration.selectionLimit;\n    }\n\n    isCloseOnSelect(): boolean {\n        return this.configuration.closeOnSelect ?? false;\n    }\n\n    getDropdownPosition(): Position | undefined {\n        return this.configuration.dropdownPosition ?? Position.bottomLeft;\n    }\n\n    isSearchable(): boolean {\n        return this.configuration.searchable ?? false;\n    }\n\n    getSearchBoxPlaceholder(): string {\n        return this.configuration.searchBoxPlaceholder ?? '';\n}\n\n    isVirtualList(): boolean {\n        return this.configuration.virtualList ?? false;\n    }\n\n    isSortEnabled(): boolean {\n        return this.configuration.sort ?? false;\n    }\n\n    getSortOrder(): 'asc' | 'desc' | undefined {\n        return this.configuration.sortOrder;\n    }\n\n    isGroupByEnabled(): boolean {\n        return this.configuration.groupBy ?? false;\n    }\n\n    isSelectAllButtonEnabled(): boolean {\n        return this.configuration.selectAllButton ?? false;\n    }\n\n    isClearableButtonEnabled(): boolean {\n        return this.configuration.clearable ?? false;\n    }\n\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n\n    isReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n    getPlaceholder(): string | undefined {\n        return this.configuration.placeholder;\n    }\n\n    getValidation(): ((value: any) => boolean) | undefined {\n        return this.configuration.validation;\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n\n    isOptionAsChip(): boolean {\n        return this.configuration.optionAsChip?? false;\n    }\n\n    getLabel(): string | undefined {\n        return this.configuration.label;\n    }\n\n    getHelperText(): string | undefined {\n        return this.configuration.helpertext;\n    }\n\n    isCreateNewOptionEnabled():boolean{\n        return this.configuration.enableCreateNewOption?? false;\n    }\n\n    // isAddCollaboratorEnabled(): boolean {\n    //     return this.configuration.enableAddCollaborator ?? false;\n    // }\n\n    isNoneOptionEnabled():boolean{\n        return this.configuration.enableNoneOption ?? false;\n    }\n\n\n\n    // Event handlers\n    onBeforeDropdownOpen(): void {\n        this.configuration.onBeforeDropdownOpen?.();\n    }\n\n    onAfterDropdownOpen(): void {\n        this.configuration.onAfterDropdownOpen?.();\n    }\n\n    onBeforeDropdownClose(focus?:boolean): void {\n        this.configuration.onBeforeDropdownClose?.();\n        this.selectApi.closeDropdown(focus);\n    }\n\n    onAfterDropdownClose(): void {\n        this.configuration.onAfterDropdownClose?.();\n    }\n\n    onBeforeSelect(params : any): boolean {\n\n        const option =  params.value\n        if(this.isSelectedOptionIncluded(option)){\n\n            const value = this.configuration.onBeforeSelect?.(params) ?? true;\n\n            if(value) {\n                if(this.optionHandler.isMultiple()){\n                    this.dispatchEvent({\n                        type : \"updateMultiSelectData\",\n                        // value : option,\n                        params : params\n        \n                    });\n                }\n                else{\n                    this.dispatchEvent({\n                        type : \"updateSingleSelectData\",\n                        // value : option,\n                        params : params\n                    });\n                }\n            }\n            return value;\n        }\n\n        return true;\n\n    }\n    onAfterSelect(params : any): void {\n        const option = params.value;\n        this.isSelectedOptionIncluded(option) &&  this.configuration.onAfterSelect?.(params);\n    }\n\n    onBeforeDeselect(params : any): boolean {\n\n        const option = params.value;\n\n        if(this.isSelectedOptionIncluded(option)){\n\n            const value = this.configuration.onBeforeDeselect?.(params) ?? true;\n\n            if(value) {\n                if(this.optionHandler.isMultiple()){\n                    this.dispatchEvent({\n                        type : \"updateMultiSelectData\",\n                        // value : option,\n                        params : params,\n                    });\n                }\n                else{\n                    this.dispatchEvent({\n                        type : \"clearSingleSelectData\",\n                        // value : option,\n                        params : params,\n                        initator : 'api'\n                    });\n                }\n            }\n\n            return value;\n            \n        }\n        return true;\n        // if(this.isSelectedOptionIncluded(option)){\n        //     this.configuration.onBeforeDeselect?.(option);\n        // }\n    }\n\n    onAfterDeselect(params : any): void {\n \n     this.configuration.onAfterDeselect?.(params);\n    //     if(this.isSelectedOptionIncluded(option)){ \n\n    //         if(this.optionHandler.isMultiple()){\n    //             this.dispatchEvent({\n    //                 type : \"updateMultiSelectData\",\n    //                 value : option\n    \n    //             });\n    //         }\n    //         else{\n    //             this.dispatchEvent({\n    //                 type : \"clearSingleSelectData\",\n    //                 value : option\n    //             });\n    //         }\n    //         this.configuration.onBeforeDeselect?.(option);\n    // }\n    }\n\n    onChange(params:any): void {\n        this.configuration.onChange?.(params);\n    }\n\n    onCreateOption(newOption: any) {\n        this.configuration.onCreateOption?.(newOption);\n    }\n\n    onBeforeCreateOption(option:any): any{\n        return this.configuration.onBeforeCreateOption?.(option) ?? true;\n    }\n    onAfterCreateOption(option:any) :any{\n        return this.configuration.onAfterCreateOption?.(option) ?? true;\n    }\n\n    onKeydown(event:KeyboardEvent):void{\n        this.configuration.onKeydown?.(event);\n    }\n\n    getAriaLabelledby():string{\n        return this.configuration.ariaLabelledby ?? \"label\";\n    }\n\n    getModel(): \"local\" | \"remote\" {\n        return this.configuration.model ?? \"local\";\n    }\n\n    private isSelectedOptionIncluded(_selectedOption:SelectOptionElementModel): boolean {\n        return true;    \n     }\n\n     getGapX():number{\n        return this.optionHandler.getGapX();\n     }\n\n     getGapY():number{\n        return this.optionHandler.getGapY();\n     }\n\n\n     getDropdownRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.optionHandler.getDropdownRenderer();\n    }\n\n    getDropdownRendererParams(): object | undefined {\n        return this.optionHandler.getDropdownRendererParams();\n    }\n\n    getDropdownFooterRenderer(): { new (...args: any[]): ICustomRenderer } | undefined  {\n        return this.optionHandler.getDropdownFooterRenderer();\n    }\n\n    getDropdownFooterRendererParams(): object | undefined {\n        return this.optionHandler.getDropdownFooterRendererParams();\n    }\n\n    getDropdownHeaderRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.optionHandler.getDropdownHeaderRenderer();\n    }\n\n    getDropdownHeaderRendererParams(): object | undefined {\n        return this.optionHandler.getDropdownHeaderRendererParams();\n    }\n\n    getCreateNewOptionRenderer(): (new (...args: any[]) => ICustomRenderer) | undefined {\n        return this.optionHandler.getCreateNewOptionRenderer();\n    }\n\n    getCreateNewOptionRendererParams(): object | undefined {\n        return this.optionHandler.getCreateNewOptionRendererParams();\n    }\n\n    getNoOptionRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n        return this.optionHandler.getNoOptionRenderer();\n    }\n\n    getNoOptionRendererParams(): object | undefined {\n        return this.optionHandler.getNoOptionRendererParams();\n    }\n\n    isautoFocusSelectedOptionEnabled(): boolean { \n        return this.configuration.autoFocusSelectedOption ?? false;\n    }\n\n    shouldShowTooltip(): boolean{\n        return this.configuration.tooltip ?? false;\n    }\n    getTooltipMessage(): string{\n        return this.configuration.tooltipMessage ?? \"\";\n    }\n    getTooltipRegex(): RegExp | undefined{\n        return this.configuration.tooltipRegex;\n    }\n    getTooltipPosition(): Position{\n        return this.configuration.tooltipPosition ?? Position.bottomRight;\n    }\n    getTooltipAppendto(): HTMLElement | undefined{\n        return this.configuration.tooltipAppendto ?? document.body;\n    }\n    getTooltipHideDelay(): number{\n        return this.configuration.tooltipHideDelay ?? 700;\n    }\n\n    getDropdownClassname(): string | string[] {\n        return this.configuration.dropdownClassName ?? '';\n    }\n\n    onSelectAll(params: SelectAllEventParams): void {\n        this.configuration.onSelectAll && this.configuration.onSelectAll(params);\n    }\n\n    onBeforeSelectAll(params: SelectAllEventParams): boolean {\n        return (this.configuration.onBeforeSelectAll && this.configuration.onBeforeSelectAll(params)) ?? true;\n    }\n\n    onAfterSelectAll(params: SelectAllEventParams): void {\n        this.configuration.onAfterSelectAll && this.configuration.onAfterSelectAll(params);\n    }\n\n}\n\n\n\n","import {  AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport type { SelectOptionHandler } from \"./select-option-handler\";\n\n\n@Bean('stateManager')\nexport class SelectStateManager extends EventEmitter {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: SelectOptionHandler;\n    isInValid() : boolean {\n        return this.optionHandler.isValid();\n    }\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { SelectUserComponentHandlerTypes } from './select-user-component-handler.types';\nimport { ILabelUserComponentHandler } from '../../../../label/label.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER          = 'prefixRenderer',\n\tSUFFIX_RENDERER          = 'suffixRenderer',\n\tHELPER_TEXT_RENDERER     = 'helpTextRenderer',\n\tBUTTON_RENDERER          = 'buttonRenderer',\n\tDROPDOWN_OPTION_RENDERER = 'dropdownOptionRenderer',\n\tSELECTED_VALUE_RENDERER  = 'selectedValueRenderer',\n\tICON_RENDERER            = 'iconRenderer',\n\tPLUSICON_RENDERER        = 'plusIconRenderer',\n\tELLIPSES_RENDERER        = 'ellipsesRenderer',\n\tERROR_RENDERER           = 'errorRenderer',\n\tLABEL_RENDERER           = 'labelRenderer'\n\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class SelectUserComponentHandler extends UserComponentHandler implements SelectUserComponentHandlerTypes, ILabelUserComponentHandler{\n\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\n\tgetIconRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ICON_RENDERER, params, PropertyName.ICON_RENDERER);\n\n\t}\n\n\n\tgetPlusIconRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.PLUSICON_RENDERER, params, PropertyName.PLUSICON_RENDERER);\n\n\t}\n\n\tgetEllipsesRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ELLIPSES_RENDERER, params, PropertyName.ELLIPSES_RENDERER);\n\n\t}\n\n\n\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\t\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.ICON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.PLUSICON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.ELLIPSES_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\t\n         \n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n                return this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.ICON_RENDERER:\n                return this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.PLUSICON_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.ELLIPSES_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n\tgetHelperTextRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetDropdownOptionRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.DROPDOWN_OPTION_RENDERER, params, PropertyName.DROPDOWN_OPTION_RENDERER)\n\t}\n\tgetSelectedValueRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SELECTED_VALUE_RENDERER, params, PropertyName.SELECTED_VALUE_RENDERER)\n\t}\n\n}\n","import {SelectContainerCompType} from \"./select-container-types\"\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { composeClasses } from \"@dg/utils\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { ISelectDataPart } from \"../model/select-ds\";\nimport { PopupHandler } from \"../model/popup-handler\";\nimport { getSelectRootUtilityClass } from \"../select-root/select-root-classes\";\n\nconst useUtilityClasses = () =>{\n    const slots ={\n        root : {\n            slot : 'container',\n            modifiers:[\n            ],\n        },\n\n    };\n    return composeClasses(slots, getSelectRootUtilityClass);\n}\n\nexport class SelectContainerController extends EventEmitter{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(\"SelectDataPart\") protected selectDataPart !: ISelectDataPart;\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    \n    private comp!: SelectContainerCompType\n\n    setComponent(component: SelectContainerCompType): void {\n        this.comp = component;\n        this.applyClasses();\n        this.selectInputHandler.registerSelectContainer(this);\n    }\n\n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCssClass(classes.root);\n        this.comp.getGui().classList.add('dg-field__container');\n    }\n\n    getProperty(): any{\n        return {\n            isDisabled : ()=>this.optionHandler.isDisabled(),\n            isReadOnly : ()=>this.optionHandler.isReadOnly(),\n            isClearable : ()=>this.optionHandler.isClearableButtonEnabled(),\n            getLabel : ()=>this.optionHandler.getLabel(),\n            isRequired : ()=>this.optionHandler.isRequired(),\n            getDescription : ()=>this.optionHandler.getDescription(),\n\n        }\n    }\n\n    getParamsProperty(){\n        return {\n            label : {\n\t\t\t\tgetLabelClasses :()=> \"dg-selectbox__label\",\n\t\t\t\tgetLabelTitleClasses :()=> \"dg-selectbox__label-title\"\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-selectbox__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-selectbox__description\"\n\n\n\t\t\t}\n        };\n    }\n\n    getElement() : HTMLElement | undefined {\n        return this.comp?.getGui();\n    }\n\n    hide(){\n        const compGui = this.comp?.getGui();\n        if (compGui) {\n          compGui.style.display = 'none';\n        }\t\n\t}\n\n\tshow(){\n        const compGui = this.comp?.getGui();\n        if (compGui) {\n          compGui.style.display = 'flex';\n        }\t\n\t}\n\n    \n}","import {Component} from \"@dg/corecomponent/Component.js\";\nimport {PostConstruct} from \"@dg/corecomponent\"\nimport { SelectContainerController } from \"./select-container-controller\";\nimport { SelectContainerCompType } from \"./select-container-types\";\n \n\n\nfunction getTemplate(_props :any) {\n\t// const label = props.getLabel();\n\t// const description = props.getDescription();\n\tconst selectWrapper = document.createElement(\"select-input-wrapper\");\n\treturn selectWrapper;\n}\n\nfunction rootTemplate(props :any){\n\tconst root =  document.createElement(\"div\");\n\t// const fragment = document.createDocumentFragment();\n\t// fragment.appendChild(getTemplate(props))\n\troot.appendChild(getTemplate(props));\n\treturn root\t\n}\n\n\nexport class SelectContainerComponent extends Component{\n\n\tprivate appendTo: HTMLElement | null;\n\tconstructor(appendTo : HTMLElement){\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst component :SelectContainerCompType ={\n\t\t\tgetGui : () =>this.getGui(),\n\t\t\taddOrRemoveCssClass : (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t}\n\n\t\tconst controller  =  this.createManagedBean(new SelectContainerController());\n\t\tconst props =  controller.getProperty();\n\t\tconst root = rootTemplate(props);\n\t\tconst paramsProperty = controller.getParamsProperty();\n\t\tthis.setTemplate(root,{\n\t\t\tlabel : paramsProperty.label,\n\t\t\tdescription :  paramsProperty.description\n\t\t});\n\t\tcontroller.setComponent(component);\n\t\tthis.appendTo && this.appendElementIntoUserDom();\n\n\t}\n\n\tprivate addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n\tprivate appendElementIntoUserDom() :void{\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t})\n\t}\n\n\n}","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n// import { composeClasses } from \"@dg/utils\";\n// import { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { SelectUserComponentHandlerTypes } from \"../model/select-user-component-handler.types\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { SelectSVGComponentType } from \"./selectbox-icon.types\";\nimport { getSelectRootUtilityClass } from \"../select-root/select-root-classes\";\nimport { composeClasses } from \"@dg/utils\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\n// import { IRatingUserComponentHandler } from \"../model/rating-user-component-handler.types\";\n\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'icon-container',\n\t\t\tmodifiers: [\n\t\t\t\t\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getSelectRootUtilityClass);\n};\n\n\n\n\nexport class SelectBoxIconController extends EventEmitter {\n    private component !: SelectSVGComponentType\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: SelectUserComponentHandlerTypes;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n\n    \n    setComponent(component : SelectSVGComponentType){\n        this.component = component;\n        this.applyClassNames();\n        this.setRendererDetails();\n        this.selectInputHandler.registerSelectBoxIcon(this);\n        this.registerEvents();\n    }\n\n    private registerEvents(){\n        this.addListener(this.eventHandler,'ShowDropdownIcon_Property_Changed',this.updateDropdownIcon.bind(this));\n    }\n\n    private applyClassNames(){\n        const selectboxIconClasses = useUtilityClasses();\n\t\tthis.component.getElement().classList.add(selectboxIconClasses.root)\n    }\n\n    setRendererDetails() : void {\n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails     = this.userComponentHandler.getIconRendererDetails(rendererWrapper, params) as IComponentDetails;\n        // this.isInValid = inValid;\n        this.component.setRendererDetails(userDetails,params);\n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionHandler.getSelectBoxIconRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionHandler.getSelectBoxIconRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionHandler.getSelectBoxIconRendererParams(),\n            showDropdownIcon  : this.optionHandler.showDropdownIcon(),\n\t\t};\n    }\n\n    reRenderIcon():void{\n        this.setRendererDetails();\n    }\n\n    updateDropdownIcon(){\n        // console.log(\"updateDropdownIcon called\");\n        !(this.optionHandler.showDropdownIcon()) && this.destroyChildElement();\n        this.reRenderIcon();\n    }\n\n     destroyChildElement(){\n        this.component.getElement().textContent = \"\";\n     }\n\n     getElement():HTMLElement{\n        return this.component.getElement();\n     }\n}","\n\n\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { SelectSVGComponentType } from \"./selectbox-icon.types\";\nimport { SelectBoxIconController } from \"./selectbox-icon-controller\";\n\n\nconst SelectBoxIconComponentTemplate = ()=>{\n    const span = document.createElement(\"div\");\n    return span\n}\n\nexport class SelectboxIconComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    @PostConstruct()\n    init() {\n        const comp : SelectSVGComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails,params :any)=>this.setRendererDetails(rendererDetails,params),\n\t\t\tdestroy                     : () => this.destroy()\n        }\n\n        const controller = this.createBean(new SelectBoxIconController());\n        this.setTemplate(SelectBoxIconComponentTemplate())\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails,params:any): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tparams.showDropdownIcon && this.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer(): void {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\t\n\t\tconst span = document.createElement(\"span\");\n\t\tspan.classList.add(\"dg-selectbox__dropdown-icon\");\n\t\n\t\tconst svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\tsvg.setAttribute(\"width\", \"7px\");\n\t\tsvg.setAttribute(\"height\", \"7px\");\n\t\tsvg.setAttribute(\"viewBox\", \"0 0 8 8\");\n\t\n\t\tconst g = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tg.setAttribute(\"data-name\", \"Layer 2\");\n\t\n\t\tconst path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n\t\tpath.setAttribute(\"d\", \"M7.94.35L4.15 4.94a.22.22 0 0 1-.3 0L.06.35A.21.21 0 0 1 .22 0h7.56a.21.21 0 0 1 .16.35z\");\n\t\tpath.setAttribute(\"data-name\", \"Layer 8\");\n\t\n\t\tg.appendChild(path);\n\t\tsvg.appendChild(g);\n\t\tspan.appendChild(svg);\n\t\tparentElement.appendChild(span);\n\t}\n\t\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\t\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\t}\n\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport {IUserParams} from \"../utility/user-params.types\"\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { SelectOptionHandler } from \"./src/core/model/select-option-handler\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport{ISelectConfiguration} from \"./src/select-configuration-types/select_configuration\";\nimport { SelectInputComponent } from \"./src/core/select-input/select-input-view\";\nimport { SelectDataPart } from \"../select/src/core/model/select-ds\";\nimport { ControllerHandler } from \"./src/core/model/select-input-handler\";\nimport { SelectInputAPI } from \"./src/core/model/select-api\";\nimport { PopupHandler } from \"./src/core/model/popup-handler\";\nimport { SelectInputController } from \"./src/core/select-input/select-input-controller\";\nimport { Label } from \"../label/label-view\";\nimport { SelectInputWrapperComponent } from \"./src/core/select-input-wrapper/select-input-wrapper-view\";\nimport { SelectConfigAPI } from \"./src/core/model/select-configApi\";\nimport { DescriptionComponent } from \"../description/description-view\";\nimport { SelectStateManager } from \"./src/core/model/select-state-manager\";\nimport { SelectUserComponentHandler } from \"./src/core/model/select-user-component-handler\";\nimport { SelectContainerComponent } from \"./src/core/select-container/select-container-view\";\nimport { SelectboxIconComponent } from \"./src/core/selectbox-icon/selectbox-icon-view\";\nimport { PlusIconComponent } from \"./src/core/plus-icon/plus-icon-view\";\nimport { ErrorComponent } from \"../error/error-view\";\n\n\nlet nextInstanceId = 1;\n\nexport class SelectCoreComponent {\n    initializeSelect(configuration: ISelectConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n        const instanceID = String(nextInstanceId++);\n\n        const beanClasses = this.CreateBeanClasses();\n\n        const context = new Context();\n\n        const userConfigurations = this.createUserConfiguration(\n            configuration,\n            params,\n            instanceID\n        );\n\n        // Model classes\n        context.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n        this.registerCoreComponent(context);\n        // Default user component registry\n        this.registerDefaultUserComponent(context);\n        createUI(context);\n\n        (window as any).context = context;\n    }\n\n    private CreateBeanClasses(): Set<any> {\n        let beanList = [\n            SelectStateManager,\n            SelectUserComponentHandler,\n            SelectInputAPI,\n            SelectOptionHandler,\n            SelectDataPart,\n            ControllerHandler,\n            PopupHandler,\n            SelectDataPart,\n            SelectInputController,\n            ComponentsRegistry,\n            UserComponentRegistry,\n            ComponentMetadataProvider,\n            EventHandler,\n            SelectConfigAPI,\n        ];\n        return new Set(beanList);\n    }\n\n    private createUserConfiguration(configuration: any, params: IUserParams, instanceID: string): {\n        configuration: any;\n        frameWorkOverrides: IFrameworkOverrides | null;\n        globalEventListener: Function | null;\n        frameworkComponentWrapper: any | null;\n        instanceID: string;\n    } {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n        if (!frameWorkOverrides) {\n            frameWorkOverrides = new VanillaFrameWorkOverrider();\n        }\n        return {\n            configuration,\n            frameWorkOverrides,\n            instanceID,\n            frameworkComponentWrapper: params.frameworkComponentWrapper,\n            globalEventListener: params.globalEventListener ?? null,\n        };\n    }\n\n    private registerDefaultUserComponent(context: Context): void {\n        const userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n        const defaultComponent = {\n            // [PropertyName.REMOVE_SELECT_RENDERER]: SelectIconRenderer,\n            // [PropertyName.LABEL_SELECT_RENDERER]: SelectIconRenderer\n        };\n\n        traverseObject(defaultComponent, (name: string, component: any) => {\n            userComponentRegistry.registerDefaultComponent(name, component);\n        });\n    }\n\n    private registerCoreComponent(context: Context): void {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n    let components: ComponentMeta[] = [\n        {\n            componentName: 'select-input',\n            componentClass: SelectInputComponent,\n        },\n        {\n\t\t\tcomponentName: 'select-label',\n\t\t\tcomponentClass: Label\n\t\t},\n        {\n            componentName: 'select-container',\n            componentClass: SelectContainerComponent,\n        },\n        {\n            componentName: 'select-input-wrapper',\n            componentClass: SelectInputWrapperComponent,\n        },\n        {\n\t\t\tcomponentName: 'select-helper-text',\n\t\t\tcomponentClass: DescriptionComponent,\n\t\t},\n        {\n\t\t\tcomponentName: 'select-icon',\n\t\t\tcomponentClass: SelectboxIconComponent,\n\t\t},\n        {\n\t\t\tcomponentName: 'plus-icon',\n\t\t\tcomponentClass: PlusIconComponent,\n\t\t},\n        {\n            componentName : \"select-error\",\n            componentClass : ErrorComponent\n        }\n        \n        \n    ];\n\n    return components;\n}\n\n","import {SelectRootCompType} from \"./select-root-types\"\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { ISelectInputHandler } from \"../model/select-input-handler\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { getSelectRootUtilityClass } from \"./select-root-classes\";\nimport { composeClasses } from \"@dg/utils\";\nimport { ISelectOptionHandler } from \"../model/select-option-handler.types\";\nimport { ISelectDataPart } from \"../model/select-ds\";\nimport { PopupHandler } from \"../model/popup-handler\";\n\nconst useUtilityClasses = () =>{\n    const slots ={\n        root : {\n            slot : 'root',\n            modifiers:[\n            ],\n        },\n\n    };\n    return composeClasses(slots, getSelectRootUtilityClass);\n}\n\nexport class SelectRootController extends EventEmitter{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: ISelectOptionHandler;\n    @AutoWired(\"controllerHandler\") protected selectInputHandler !: ISelectInputHandler;\n    @AutoWired(\"SelectDataPart\") protected selectDataPart !: ISelectDataPart;\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    \n    private comp!: SelectRootCompType\n\n    setComponent(component: SelectRootCompType): void {\n        this.comp = component;\n        this.applyClasses();\n        this.selectInputHandler.registerSelectRoot(this);\n\n        this.addListener(this.eventHandler, \"EVENT_VALUE_UPDATE\", this.addErrorState.bind(this));\n        this.addListener(this.eventHandler,'SET_FOCUS_CLASS',this.applyFocusClass.bind(this))\n        this.addListener(this.eventHandler, \"PROPERTY_CHANGED\", () => {\n            this.addErrorState();\n            this.applyClasses();\n        })\n    }\n\n    private addErrorState() : void {\n        const isValid = this.optionHandler.isValid();\n\n        this.comp.getGui().classList.toggle('dg-input__status--error', isValid);\n    }\n\n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCssClass(classes.root);\n        this.addErrorState();\n        this.comp.getGui().classList.add('dg-field__root');\n        this.optionHandler.isDisabled() && this.comp.getGui().classList.add('dg-input__status--disabled')\n        this.optionHandler.isMultiple() ? this.comp.getGui().classList.add('dg-multiselect__root') :this.comp.getGui().classList.add('dg-singleselect__root');\n        this.optionHandler.getClassName() && this.comp.getGui().classList.add(this.optionHandler.getClassName());\n    }\n\n     applyFocusClass(params : any):void{\n       if(params.value){\n        this.comp.getGui().classList.add('dg-input__status--focus');\n\n       }else{\n        this.comp.getGui().classList.remove('dg-input__status--focus');\n        \n       }\n\n    }\n\n    getProperty(): any{\n        return {\n            isDisabled : ()=>this.optionHandler.isDisabled(),\n            isReadOnly : ()=>this.optionHandler.isReadOnly(),\n            isClearable : ()=>this.optionHandler.isClearableButtonEnabled(),\n            getLabel : ()=>this.optionHandler.getLabel(),\n            isRequired : ()=>this.optionHandler.isRequired(),\n            getDescription : ()=>this.optionHandler.getDescription(),\n            canGenerateEmptyDom : ()=>this.optionHandler.canGenerateEmptyDom(),\n            showErrorState : () => this.optionHandler.showErrorState()\n\n        }\n    }\n\n    getParamsProperty(){\n        return {\n            label : {\n\t\t\t\tgetLabelClasses :()=> \"dg-selectbox__label\",\n\t\t\t\tgetLabelTitleClasses :()=> \"dg-selectbox__label-title\"\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-selectbox__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-selectbox__description\"\n\t\t\t}\n        };\n    }\n\n    getElement() : HTMLElement | undefined {\n        return this.comp?.getGui();\n    }\n\n    hide(subElements?: string[]): void {\n        const element = this.getElement();\n        if (!element) return;\n    \n        if (!subElements?.length) {\n            element.style.display = 'none';\n            return;\n        }\n    \n        const actions: Record<string, () => void> = {\n            label: this.hideLabel.bind(this),\n            description: this.hideDescription.bind(this),\n            prefix: this.hidePrefix.bind(this),\n            suffix: this.hideSuffix.bind(this),\n        };\n    \n        subElements.forEach(sub => actions[sub]?.());\n    }\n    \n    show(subElements?: string[]): void {\n        const element = this.getElement();\n        if (!element) return;\n    \n        if (!subElements?.length) {\n            element.style.display = 'flex';\n            return;\n        }\n    \n        const actions: Record<string, () => void> = {\n            label: this.showLabel.bind(this),\n            description: this.showDescription.bind(this),\n            prefix: this.showPrefix.bind(this),\n            suffix: this.showSuffix.bind(this),\n        };\n    \n        subElements.forEach(sub => actions[sub]?.());\n    }\n\n    hideLabel(){\n        const label = this.getElement()?.querySelector('.dg-field__label') as HTMLElement;\n        label && (label.style.display='none')\n    }\n    hideDescription(){\n        const description = this.getElement()?.querySelector('.dg-field__description') as HTMLElement;\n        description && (description.style.display = 'none');\n    }\n    hideSuffix(){\n        const suffixElement = this.getElement()?.querySelector('.dg-suffix-elem') as HTMLElement;\n        suffixElement && (suffixElement.style.display ='none')\n    }\n    hidePrefix(){\n        const prefixElement = this.getElement()?.querySelector('.dg-prefix-elem')  as HTMLElement;\n        prefixElement && (prefixElement.style.display = 'none');\n    }\n    showLabel(){\n        const label = this.getElement()?.querySelector('.dg-field__label') as HTMLElement;\n        label && (label.style.display='block')\n    }\n    showDescription(){\n        const description = this.getElement()?.querySelector('.dg-field__description') as HTMLElement;\n        description && (description.style.display = 'block')\n    }\n    showSuffix(){\n        const suffixElement = this.getElement()?.querySelector('.dg-suffix-elem') as HTMLElement;\n        suffixElement && (suffixElement.style.display ='block')\n    }\n    showPrefix(){\n        const prefixElement = this.getElement()?.querySelector('.dg-prefix-elem')  as HTMLElement;\n        prefixElement && (prefixElement.style.display = 'block');\n    }\n\n    destroy(){\n        this.optionHandler.isOptionAsChip() && this.selectDataPart.deleteAllChipInstance();\n        this.comp.destroy();\n    }\n\n    getSelectContainerElement():HTMLElement{\n        return this.comp.getSelectContainerElement()\n    }\n\n    \n}","import {Component} from \"@dg/corecomponent/Component.js\";\nimport {PostConstruct, queryAssignedNodes} from \"@dg/corecomponent\"\nimport { SelectRootController } from \"./select-root-controller\";\nimport { SelectRootCompType } from \"./select-root-types\";\n \n\nfunction rootTemplate(props :any){\n\n\tconst label = props.getLabel();\n\tconst description = props.getDescription();\n\tconst generateEmptyDom = props.canGenerateEmptyDom();\n\tconst error = props.showErrorState();\n\n\tconst fragment =  document.createElement(\"div\");\n\tif (label || generateEmptyDom) {\n\t\tconst labelEl = document.createElement('select-label');\n\t\tlabelEl.setAttribute('ref', 'label');\n\t\tfragment.appendChild(labelEl);\n\t}\n\n\tconst container = document.createElement('select-container');\n\tcontainer.setAttribute('ref','select-container')\n\tfragment.appendChild(container);\n\n\n\tif (description || generateEmptyDom) {\n\t\tconst helperText = document.createElement('select-helper-text');\n\t\thelperText.setAttribute('ref', 'description');\n\t\tfragment.appendChild(helperText);\n\t}\n\n\tif(generateEmptyDom || error ) {\n\t\tconst errorElement = document.createElement('select-error');\n\t\terrorElement.setAttribute('ref', 'error');\n\t\tfragment.appendChild(errorElement);\n\t}\n\n\n\n\treturn fragment;\n}\n\n\nexport class SelectRootComponent extends Component{\n\n\t@queryAssignedNodes('select-container') private selectContainer !: HTMLElement\n\n\tprivate appendTo: HTMLElement | null | undefined;\n\tconstructor(appendTo : HTMLElement | undefined){\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit() : void {\n\t\tconst component :SelectRootCompType ={\n\t\t\tgetGui             : () =>this.getGui(),\n\t\t\taddOrRemoveCssClass: (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tdestroy            : ()=> this.destroy(),\n\t\t\tgetSelectContainerElement : ()=> this.getSelectContainerElement()\n\t\t}\n\n\t\tconst controller  =  this.createManagedBean(new SelectRootController());\n\t\tconst props =  controller.getProperty();\n\t\tconst root = rootTemplate(props);\n\t\tconst paramsProperty = controller.getParamsProperty();\n\t\tthis.setTemplate(root,{\n\t\t\tlabel      : paramsProperty.label,\n\t\t\tdescription: paramsProperty.description,\n\t\t\terror      : paramsProperty.description\n\t\t});\n\t\tcontroller.setComponent(component);\n\t\tthis.appendTo && this.appendElementIntoUserDom();\n\n\t}\n\n\tgetSelectContainerElement():HTMLElement{\n\t\treturn this.selectContainer\n\t}\n\n\tprivate addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n\tprivate appendElementIntoUserDom() :void{\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t})\n\t}\n\n\tdestroy():void{\n\t\tthis.getGui().remove();  \n\t}\n}","import { SelectCoreComponent } from './select-core-component';\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport {ISelectConfiguration} from \"./src/select-configuration-types/select_configuration\"\nimport {IUserParams} from \"../utility/user-params.types\";\nimport {SELECT_BEAN_NAME} from \"./src/constants/beanname-constant\";\nimport { ISelectInputAPI } from './src/core/model/select-api';\nimport { SelectRootComponent } from './src/core/select-root/select-root-view';\nexport class Select {\n  public api: ISelectInputAPI | undefined;\n\n  constructor(configuration: ISelectConfiguration, params?: IUserParams) {\n   \n    const createUI = (context: Context) =>{\n      this.api = context.getBean(SELECT_BEAN_NAME.SELECT_API) as ISelectInputAPI;\n      context.createBean(new SelectRootComponent(configuration.appendTo));\n    };\n    new SelectCoreComponent().initializeSelect(configuration, params, createUI);\n  }\n\n}\n(window as any).SelectComponent = Select;\n","import {  sizeChangerViewType } from \"./size-changer-view-types\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getPaginationUtilityClass } from \"../pagination-root/pagination-root-classes\";\nimport { Select } from \"../../../../select/select\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\nimport { IPaginationDataHandler } from \"../../DataHandler/IPaginationDataHandler\";\nimport { ISelectConfiguration } from \"../../../../select/src/select-configuration-types/select_configuration\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { IPaginationPageSet } from \"../pageSet/pageset-view\";\nfunction transformArray(arr: number[], key: string): { id: string; value: string; label?: string }[] {\n    return arr.map((num: number) => {\n        const valueStr = `${num} ${key}`;\n        return { id: valueStr, value: valueStr, label: valueStr };\n    });\n}\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'pagesize-changer',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getPaginationUtilityClass)\n}\n\nexport const recordConstant = 'rows';\nclass SizeChangerController extends AbstractController<sizeChangerViewType>{\n\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_DATA_HANDLER) protected dataHandler !:  IPaginationDataHandler;\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_UI_UPDATE_HANDLER)  protected uiHandler !: IPaginationPageSet;\n    setComponent(comp : sizeChangerViewType ) {\n        this.component    = comp;\n        this.applyClassNames()\n        this.setAriaAttributes()\n        this.applyClassNames();\n        this.registerEventListener();\n        this.setInitialSizeChanger();\n    }\n    init(): void {\n    }\n    private setInitialSizeChanger() {\n        const pageSizeArray = this.dataHandler.getPageSizeArray();\n        const options = transformArray(pageSizeArray, 'Page');\n        const currentSize = this.dataHandler.getPageSize();\n        const selectedOption = options.find((o) => Number(o.value.split(' ')[0]) === currentSize) ?? options[0];\n        const selectConfiguration: ISelectConfiguration = {\n            appendTo: this.component?.getElement() ?? document.body,\n            dropdownAppendTo: document.body,\n            options,\n            closeOnSelect: true,\n            selectedOptions: [selectedOption],\n            dropdownPosition: Position.right,\n            onAfterSelect: (params: { value?: { value?: string; id?: string } | string }) => {\n                const option = params?.value;\n                const valueStr = typeof option === 'object' && option?.value\n                    ? option.value\n                    : typeof option === 'string'\n                        ? option\n                        : '';\n                const pageSizeStr = valueStr.split(' ')[0];\n                const pageSize = Number(pageSizeStr);\n                if (pageSize > 0) {\n                    this.dataHandler.setPageSize(pageSize);\n                    this.uiHandler?.setButtonComponent?.();\n                }\n            }\n        };\n        new Select(selectConfiguration);\n    }\n    \n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    getProperty(){\n       return{\n       }\n    }\n\n    setAriaAttributes():void{\n    }\n\n    getParamsProperty() {\n        return {\n\t\t};\n    }\n\n    goToPreviousPage():void{\n    }\n    goToNextPage():void{\n    }\n\n    goToLastPage():void{\n    }\n\n    goToFirstPage():void{\n\n    }\n\n    registerEventListener(): void {\n    }\n\n    rerender():void{\n        this.applyClassNames();\n\n    }\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n}\n\n\nexport {\n    SizeChangerController\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { sizeChangerViewType } from \"./size-changer-view-types\";\nimport { SizeChangerController } from \"./size-changer-controller\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\n\nconst sizeChangerTemplate = () =>{\n\tconst sizeChangerHolder =  document.createElement('div');\n\treturn sizeChangerHolder as HTMLElement;\n}\nclass PaginationPagesizeChanger extends Component{\n\t\n    @PostConstruct()\n\tinit(): void {\n\t\tconst component : sizeChangerViewType = {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCssClass   : (className: string) => this.addOrRemoveCssClass(className,true),\n        }\n\n\t\tconst controller = this.createManagedBean(new SizeChangerController);\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): sizeChangerViewType | any {\n\t\treturn {\n\t\t}\n\t}\n\n\taddOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate renderTemplate(_controller: SizeChangerController) {\n\t\tconst template = sizeChangerTemplate();\n        this.setTemplate(template);\n    }\n\n\trerender(controller:SizeChangerController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\n\nexport {\n    PaginationPagesizeChanger\n}","import { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getPaginationUtilityClass } from \"../pagination-root/pagination-root-classes\";\nimport { quickJumperViewType } from \"./quick-jumper-view-types\";\nimport { IPaginationDataHandler } from \"../../DataHandler/IPaginationDataHandler\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { PAGINATION_BEAN_NAME } from \"../../constants/beaname-constants\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'paginationQuickJumper',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getPaginationUtilityClass)\n}\n\n\nclass QuickJumperController extends AbstractController<quickJumperViewType>{\n\n    parentComponent!: any;\n    private jumpInput: HTMLInputElement | null = null;\n    @AutoWired(PAGINATION_BEAN_NAME.PAGINATION_DATA_HANDLER) protected dataHandler !: IPaginationDataHandler;\n    @AutoWired('stateManager') protected stateManager!: { addEventListener?: (event: string, handler: () => void) => void };\n\n    setComponent(comp: quickJumperViewType) {\n        this.component = comp;\n        this.applyClassNames();\n        this.setAriaAttributes();\n        this.registerEventListener();\n        this.initialRenderer();\n        this.stateManager?.addEventListener?.('paginationStateChanged', () => this.updateQuickJumperState());\n    }\n   init(){\n        \n    }\n\n    private initialRenderer() {\n        const container = this.component?.getElement();\n        if (!container) return;\n        const maxPage = this.dataHandler.getTotalPages();\n        const label = document.createElement('span');\n        label.textContent = 'Go to';\n        label.className = 'pagination-quick-jumper-label';\n        const input = document.createElement('input');\n        input.type = 'number';\n        input.min = '1';\n        input.max = String(Math.max(1, maxPage));\n        input.placeholder = String(this.dataHandler.getPage());\n        input.className = 'pagination-quick-jumper-input';\n        input.setAttribute('aria-label', 'Page number');\n        this.jumpInput = input;\n        const button = document.createElement('button');\n        button.type = 'button';\n        button.textContent = 'Go';\n        button.className = 'pagination-quick-jumper-button';\n        button.setAttribute('aria-label', 'Go to page');\n        const goToPage = () => {\n            const value = parseInt(input.value, 10);\n            if (!isNaN(value) && this.dataHandler.isValidPage(value)) {\n                this.dataHandler.goToPage(value);\n                input.value = '';\n                input.placeholder = String(this.dataHandler.getPage());\n                input.max = String(Math.max(1, this.dataHandler.getTotalPages()));\n            }\n        };\n        button.addEventListener('click', goToPage);\n        input.addEventListener('keydown', (e) => {\n            if (e.key === 'Enter') {\n                e.preventDefault();\n                goToPage();\n            }\n        });\n        container.appendChild(label);\n        container.appendChild(input);\n        container.appendChild(button);\n    }\n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    getProperty(){\n       return{\n       }\n    }\n\n    setAriaAttributes():void{\n    }\n\n    getParamsProperty() {\n        return {\n\t\t};\n    }\n\n    goToPreviousPage():void{\n    }\n    goToNextPage():void{\n    }\n\n    goToLastPage():void{\n    }\n\n    goToFirstPage():void{\n\n    }\n\n    private updateQuickJumperState() {\n        if (this.jumpInput) {\n            const totalPages = this.dataHandler.getTotalPages();\n            this.jumpInput.max = String(Math.max(1, totalPages));\n            if (!this.jumpInput.value) {\n                this.jumpInput.placeholder = String(this.dataHandler.getPage());\n            }\n        }\n    }\n\n    registerEventListener(): void {\n        // Events attached in initialRenderer\n    }\n\n    rerender():void{\n\n        // this.component.rerender(this,this.parentComponent);\n        this.applyClassNames();\n\n    }\n\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n\n\n\n\n}\n\n\nexport {\n    QuickJumperController\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { quickJumperViewType } from \"./quick-jumper-view-types\";\nimport { QuickJumperController } from \"./quick-jumper-controller\";\n\n\nconst quickJumperTemplate = () =>{\n\tconst quickJumper =  document.createElement('div');\n\treturn quickJumper as HTMLElement;\n}\nclass PaginationQuickJumper extends Component{\n    @PostConstruct()\n\tinit(): void {\n\n\t\t\n\t\tconst component : quickJumperViewType = {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCssClass   : (className: string) => this.addOrRemoveCssClass(className,true),\n        }\n\t\tconst controller = this.createManagedBean(new QuickJumperController);\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): quickJumperViewType | any {\n\t\treturn {\n\t\t\t\n\t\t}\n\n\t}\n\taddOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\n\n\n\tprivate renderTemplate(_controller: QuickJumperController) {\n\t\tconst template = quickJumperTemplate();\n        this.setTemplate(template);\n      \n        // this.setTemplate()\n    }\n\n\trerender(controller:QuickJumperController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\n\nexport {\n    PaginationQuickJumper\n\n}","import { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getPaginationUtilityClass } from \"../pagination-root/pagination-root-classes\";\nimport { SubElementViewType } from \"./sub-element-view-types\";\n\n\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'subElement',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getPaginationUtilityClass)\n}\n\n\nclass SubElementController extends AbstractController<SubElementViewType>{\n\n\n     parentComponent!: any;\n\n    setComponent(comp : SubElementViewType ) {\n        this.component    = comp;        \n        this.applyClassNames()\n        this.setAriaAttributes()\n         this.applyClassNames();\n         this.registerEventListener();\n    }\n   init(){\n    }\n\n    \n    private applyClassNames(){\n        const classes = useUtilityClasses();\n        this.component?.addOrRemoveCssClass(classes.container);\n    }\n\n    getProperty(){\n       return{\n       }\n    }\n\n    setAriaAttributes():void{\n    }\n\n    getParamsProperty() {\n        return {\n\t\t};\n    }\n\n    goToPreviousPage():void{\n    }\n    goToNextPage():void{\n    }\n\n    goToLastPage():void{\n    }\n\n    goToFirstPage():void{\n\n    }\n\n    registerEventListener(): void {\n    }\n\n    rerender():void{\n        this.applyClassNames();\n\n    }\n\n\n    protected destroy(): void {\n        super.destroy();\n    }\n\n\n\n\n\n}\n\n\nexport {\n    SubElementController\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { SubElementViewType } from \"./sub-element-view-types\";\nimport { SubElementController } from \"./sub-element-controller\";\n\n\n\nconst subElementTemplate = () =>{\n\tconst LiElement =  document.createElement('li');\n\treturn  LiElement as HTMLElement;\n}\nclass PaginationSubElement extends Component{\n    @PostConstruct()\n\tinit(): void {\n\n\t\t\n\t\tconst component : SubElementViewType = {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCssClass   : (className: string) => this.addOrRemoveCssClass(className,true),\n        }\n\t\tconst controller = this.createManagedBean(new SubElementController);\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate getComponent(): SubElementViewType | any {\n\t\treturn {\n\t\t\t\n\t\t}\n\n\t}\n\taddOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\n\n\n\tprivate renderTemplate(_controller: SubElementController) {\n\t\tconst template = subElementTemplate();\n        this.setTemplate(template);\n\n    }\n\n\trerender(controller:SubElementController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComponent(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\n\nexport {\n    PaginationSubElement\n\n}","import { Button } from \"../../../../button/src/button\";\nimport { IButtonConfiguration } from \"../../../../button/src/button-configuration.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nclass ButtonRenderer implements ICustomRenderer{\n    private params : any;\n    private button !: Button|null;\n    \n    init(params : any) {\n        this.params = params;\n        const configuration = this.createConfiguration();\n        this.button = new Button(configuration);\n    }\n\n    getElement(): HTMLElement {\n        return this.button?.api?.getElement() as HTMLElement;\n    }\n\n    private createConfiguration() : IButtonConfiguration {\n        return {\n            text    : this.params.label,\n            callback: this.params.callback,\n            icon    : this.params.icon,\n            showIcon: this.params.showIcon,\n            showText: this.params.showText,\n            disabled: this.params.disabled,\n            readonly : this.params.readonly,\n            ariaLabel : this.params.ariaLabel,\n            classes : this.params.classes,\n            tabindex : this.params.tabindex\n        }\n    }\n\n    destroy() : void {\n        this.button?.api?.destroy();\n        this.button = null;\n        this.params = null;\n    }\n}\n\nexport{\n    ButtonRenderer\n}","import { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { IsPureModule } from \"rollup\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { PaginationOptionHandler } from \"./core/model/pagination-option-handler\";\nimport { PaginationStateManager } from \"./core/model/pagination-state-manager\";\nimport { PaginationAPI } from \"./core/model/pagination-api\";\nimport { PaginationControllerHandler } from \"./core/model/pagination-controller\";\nimport { PaginationUserComponentHandler } from \"./core/model/pagination-user-component\";\nimport { PaginationButtonComponent } from \"./core/pagination-button/pagination-button-view\";\nimport { IPaginationConfigurations } from \"./pagination-configuration.types\";\nimport { PaginationDataHandler } from \"./DataHandler/PaginationDataHandler\";\nimport { PaginationPageSetComponent } from \"./core/pageSet/pageset-view\";\nimport { PaginationShowTotal } from \"./core/showTotal/show-total-changer-view\";\nimport { PaginationPagesizeChanger } from \"./core/sizeChanger/size-changer-view\";\nimport { PaginationQuickJumper } from \"./core/quickJumper/quick-jumper-changer-view\";\nimport { PaginationSubElement } from \"./core/sub-elements/sub-element-view\";\nimport { Button } from \"../../button/src/button\";\nimport { ButtonRenderer } from \"./core/userHandler/ButtonRenderer\";\n\nexport const  PropertyName ={\n\tBUTTON_RENDERER : 'buttonRenderer',\n}\ninterface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IsPureModule[];\n}\n\nlet nextInstanceId = 1;\nclass  PaginationCoreComponent {\n    constructor(){\n\n    }\n    initializePagination( configuration: IPaginationConfigurations, params: IUserParams = {}, createUI: CallableFunction, ): void {\n\t\tconst instanceID = configuration?.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n\t\tthis.registerCoreComponent(context);\n\t\tthis.registerDefaultUserComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\n    }\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tconst beanList= [\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tEventHandler,\n\t\t\tPaginationOptionHandler,\n\t\t\tPaginationStateManager,\n\t\t\tPaginationAPI,\n\t\t\tPaginationControllerHandler,\n\t\t\tPaginationUserComponentHandler,\n\t\t\tPaginationDataHandler,\n\t\t]\n\t\treturn new Set(beanList);\n\t}\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID : string; } {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n            [PropertyName.BUTTON_RENDERER] : ButtonRenderer\n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n}\nfunction createComponentList(): ComponentMeta[] {\n\tlet components :  ComponentMeta[] = [\n\t\t\n\t\t{\n\t\t\tcomponentName: 'show-total',\n\t\t\tcomponentClass: PaginationShowTotal\n\t\t},\n\t\t{\n\t\t\tcomponentName :  'page-set',\n            componentClass : PaginationPageSetComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :  \"sub-element\",\n\t\t\tcomponentClass :  PaginationSubElement\n\t\t},\n\t\t{\n\t\t\tcomponentName :  'pagesize-changer',\n            componentClass : PaginationPagesizeChanger\n\t\t},\n\t\t{\n\t\t\tcomponentName :  \"quick-jumper\",\n            componentClass : PaginationQuickJumper\n\t\t},\n\t\t{\n\t\t\tcomponentName :  \"button-element\",\n            componentClass : Button\n\t\t},\n\t\t{\n\t\t\tcomponentName :  'previous-button',\n\t\t\tcomponentClass : PaginationButtonComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :  'next-button',\n\t\t\tcomponentClass : PaginationButtonComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :  'first-button',\n\t\t\tcomponentClass : PaginationButtonComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :  'next-button',\n\t\t\tcomponentClass : PaginationButtonComponent\n\t\t},\n\n\t]\n\treturn components;\n}\n\nexport {\n    IUserParams,\n    PaginationCoreComponent\n}","import { composeClasses } from \"@dg/utils\";\nimport { AutoWired, BEAN_NAME, setAriaDescribedBy, setAriaDisabled, setAriaLabel, setAriaLabelledBy, setAriaReadOnly } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { OwnerStateType, getPaginationUtilityClass } from \"./pagination-root-classes\";\nimport { PaginationOptionsHandlerTypes } from \"../model/pagination-options-handler.types\";\nimport { PaginationInputCompType } from \"./pagination-root-types\";\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : '',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getPaginationUtilityClass );\n};\n\nclass PaginationRootController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: PaginationOptionsHandlerTypes;\n    private component !: PaginationInputCompType;\n    setComp(comp : PaginationInputCompType ) {\n        this.component    = comp;\n        this.applyClasses();\n        this.setValue();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n    }\n\n    private applyClasses() : void {\n        const ownerState    = this.getOwnerState();\n        const classes       = useUtilityClasses(ownerState);\n        const rootClasses   = ['DG-paginationRoot', 'dg-pagination', classes.root].filter(Boolean).join(' ');\n        this.component.addOrRemoveCSSClass(rootClasses);\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadOnly()\n\t\t}\n\t}\n\n    private registerEventHandler() {\n        const ownerState = this.getOwnerState();\n\n        if(ownerState.readonly || ownerState.disabled) {\n            return \n        }\n        \n    }\n\n    private setAccessibility() : void {\n        this.setAriaAttributes();\n    }\n\n    private setAriaAttributes() : void {\n        const element   = this.component.getElement();\n        setAriaDisabled(element, this.optionHandler.isDisabled());\n        setAriaReadOnly(element, this.optionHandler.isReadOnly());\n        setAriaLabel(element, this.optionHandler.getAriaLabel());\n        setAriaLabelledBy(element, this.optionHandler.getAriaLabelledby());\n        setAriaDescribedBy(element, this.optionHandler.getAriaDescribedby());\n    }\n    private setValue() : void {\n        this.setAccessibility();\n    }\n\n    destroy(): void {\n        super.destroy();\n    }\n}\n\nexport { \n    PaginationRootController\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { PaginationInputCompType } from \"./pagination-root-types\";\nimport { AutoWired, BEAN_NAME, PostConstruct } from \"@dg/corecomponent\";\nimport { PaginationRootController } from \"./pagination-root-controller\";\nimport { PaginationOptionsHandlerTypes } from \"../model/pagination-options-handler.types\";\nimport { rootTemplate, } from \"../utiility\";\n\n\n\n\nclass PaginationRootComponent extends Component {\n    private componentHolder : HTMLElement |  null;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: PaginationOptionsHandlerTypes;\n\n    constructor(appendTo : HTMLElement) {\n        super();\n        this.componentHolder =  appendTo;\n    }\n\n    @PostConstruct()\n    init() {\n        const comp : PaginationInputCompType = {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n        const controller = this.createManagedBean(new PaginationRootController());\n        const templateOptions = {\n            showTotal: this.optionHandler.getShowShowTotal(),\n            hasPageSizeChanger: this.optionHandler.hasPageSizeChanger(),\n            hasQuickJumper: this.optionHandler.hasQuickJumper()\n        };\n        this.setTemplate(rootTemplate(templateOptions)); \n        controller.setComp(comp);\n        this.appendElementIntoUserDom();\n    }\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.componentHolder && this.componentHolder.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.componentHolder && this.componentHolder.removeChild(eGui);\n\t\t\tthis.componentHolder = null;\n\t\t});\n\t}\n\n}\n\n\nexport {\n    PaginationRootComponent\n}","export const RATING_BEAN_NAME = {\n\tRATING_API               : 'ratingapi',\n\tRATING_MODEl             : \"ratingModel\",\n\tRATING_CONFIGURATION     : 'configuration',\n\tCSSCLASSNAMEGENERATOR    : 'CSSClassNameGenartor',\n\tRATING_ADJUSTER_HANDLER  : 'ratingAdjusterHandler',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tRATING_EVENT_HANDLER     : 'ratingEventHandler',\n\tRATING_CONTROLLER_HANDLER: 'ratingControllerHandler',\n};","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport {RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { RatingRootControllerType } from \"../rating-root/rating-root.types\";\n\n\n@Bean(RATING_BEAN_NAME.RATING_CONTROLLER_HANDLER)\nexport class RatingControllerHandler extends EventEmitter {\n\tprivate ratingCtrl!: RatingRootControllerType;\n\tregisterNumber(ratingCtrl: RatingRootControllerType): void {\n\t\tthis.ratingCtrl = ratingCtrl;\n\t}\n\n\tgetRatingCtrl(): RatingRootControllerType {\n\t\treturn this.ratingCtrl;\n\t}\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport {EventEmitter}from '@dg/corecomponent/EventEmitter.js';\nimport { RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IRatingConfiguration } from \"../../rating-configuration.types\";\nimport { RatingControllerHandler } from \"./rating-controller\";\nimport { RatingModelType } from \"./rating-model.types\";\nimport { IRatingOptionHandler } from \"./rating-option-handler.types\";\n\n\n@Bean(RATING_BEAN_NAME.RATING_API)\nexport class RatingAPI extends EventEmitter {\n    @AutoWired('configuration') configuration !: IRatingConfiguration;\n    @AutoWired(RATING_BEAN_NAME.RATING_CONTROLLER_HANDLER) controllerHandler !: RatingControllerHandler;\n    @AutoWired(RATING_BEAN_NAME.RATING_MODEl) model !: RatingModelType;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: IRatingOptionHandler;\n\n    \n\n\n    getName() { return RATING_BEAN_NAME.RATING_API};\n\n    updateProperty(options : IRatingConfiguration) {\n        const properties = Object.keys(this.configuration);\n\n        properties.forEach((_key) => {\n            // this.configuration[key] = options[key] ?? properties[key];\n        })\n        \n        this.dispatchEvent({\n            type : \"PROPERTY_CHANGED\",\n            options\n        })\n    }\n\n    getElement() : HTMLElement {\n        return this.controllerHandler.getRatingCtrl().getElement() as HTMLElement;\n    }\n\n    getValue():number{\n        return this.model.getValue();\n    }\n\n    setValue(value:number):void{\n        return this.model.setValue(value);\n    }\n\n\n    focus():void{\n        this.controllerHandler.getRatingCtrl().focus();\n    }\n\n    blur():void{\n        this.controllerHandler.getRatingCtrl().blur();\n    }\n\n    getFormattedValue() : any {\n        return this.getValue();\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}","import { values } from \"@dg/corecomponent\";\nimport { IModule } from \"../../../core/modules.types\";\n// import { isValidModuleVersion } from \"../../../core/VersionValidation\";\n// import { dependencyVersion, moduleName } from \"../version.js\";\ntype globalModuleMap = { [name: string]: IModule };\ntype instanceModulesMap = { [instanceID: string]: { [name: string]: IModule } };\n\nexport class ModuleRegistry {\n\n    private static globalModulesMap: globalModuleMap      = {};\n    private static instanceModulesMap: instanceModulesMap = {};\n\n    public static register(module: IModule): void {\n        ModuleRegistry.__register(module, undefined);\n    }\n\n    public static registerModules(modules: IModule[]): void {\n        ModuleRegistry.__registerModules(modules, undefined);\n    }\n\n    public static __registerModules(modules: IModule[], instanceID: string | undefined): void {\n        if (!modules) {\n            return;\n        }\n        modules.forEach(module => ModuleRegistry.__register(module, instanceID));\n    }\n\n    public static __unRegisterInstanceModules(instanceID: string): void {\n        delete ModuleRegistry.instanceModulesMap[instanceID];\n    }\n\n    public static __getRegisteredModules(instanceID: string): IModule[] {\n        return [...values(ModuleRegistry.globalModulesMap), ...values(ModuleRegistry.instanceModulesMap[instanceID] || {})];\n    }\n\n    public static __isRegistered(moduleName: string, instanceID: string): boolean {\n        return !!ModuleRegistry.globalModulesMap[moduleName] || !!ModuleRegistry.instanceModulesMap[instanceID]?.[moduleName];\n    }\n\n    public static __getInstanceRegisteredModules(instanceID: string): IModule[] {\n        return values(ModuleRegistry.instanceModulesMap[instanceID] ?? {}) || [];\n    }\n\n    public static __assertRegistered(moduleName: string, reason: string, instanceID: string): boolean {\n        if (this.__isRegistered(moduleName, instanceID)) {\n            return true;\n        }\n\n        console.error(reason);\n\n        return false;\n    }\n\n    public static __register(module: IModule, instanceID: string | undefined): void {\n        // ModuleRegistry.runVersionChecks(module);\n\n        if (instanceID !== undefined) {\n            if (ModuleRegistry.instanceModulesMap[instanceID] === undefined) {\n                ModuleRegistry.instanceModulesMap[instanceID] = {};\n            }\n            ModuleRegistry.instanceModulesMap[instanceID][module.moduleName] = module;\n        } else {\n            ModuleRegistry.globalModulesMap[module.moduleName] = module;\n        }\n    }\n\n    // private static runVersionChecks(module: IModule) : void {\n    //     // if (!module.version) {\n    //     //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is incompatible. Please update all modules to the same version.`);\n    //     // } else if (!ModuleRegistry.isValidModuleVersion(module.version, dependencyVersion[module.moduleName])) {\n    //     //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is version ${module.version} but the other modules are version ${dependencyVersion[module.moduleName]}. Please update all modules to the same version.`);\n    //     // }\n    // }\n\n    // private static isValidModuleVersion(version : string, dependencyVersion : string) : boolean {\n    //     return isValidModuleVersion(version, dependencyVersion);\n    // }\n}\n\n","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\n\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IRatingOptionHandler } from \"./rating-option-handler.types\";\nimport { IRatingAPI } from \"./rating-api.types\";\nimport { RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IRatingConfiguration, IRenderer } from \"../../rating-configuration.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class RatingOptionHandler extends EventEmitter implements  IRatingOptionHandler{\n\t\n\t\n\t@AutoWired(RATING_BEAN_NAME.RATING_API) api!: IRatingAPI;\n\n\t@AutoWired(RATING_BEAN_NAME.RATING_CONFIGURATION) configuration!: IRatingConfiguration;\n\n\tgetValue():number{\n\t\treturn this.configuration.value ?? 0;\n\t}\n\n\tgetMaxValue():number{\n\t\treturn this.configuration.maxValue ?? 5;\n\t}\n\n\tisDisabled():boolean{\n\t\treturn this.configuration.disabled?? false;\n\t}\n\n\tgetLabel():string|undefined{\n\t\treturn this.configuration.label\n\t}\n\tisRequired():boolean {\n\t\treturn this.configuration.required ?? false;\n\t}\n\n\tgetAriaLabelledby():string|undefined{\n\t\treturn \"\"\n\t}\n\n\tgetIconRenderer():ICustomRenderer |undefined{\n\t\treturn this.configuration.iconRenderer;\n\t}\n\tgetIconRendererParams():any{\n\t\treturn this.configuration.iconRendererParams;\n\t}\n\n\tisReadOnly():boolean{\n        return this.configuration.readonly?? false;\n    }\n\t\n\tonChange(value:number): void {\n\t\tthis.configuration.onChange && this.configuration.onChange(value);\n\t}\n\tonBeforeChange(value: number): void {\n\t\tthis.configuration.onBeforeChange && this.configuration.onBeforeChange(value);\n\t}\n\tonHover(value: number): void {\n\t\tthis.configuration.onHover && this.configuration.onHover(value);\n\t}\n\tonLeave(value: number): void {\n\t\tthis.configuration.onLeave && this.configuration.onLeave(value);\n\t}\n\tonFocus(event: FocusEvent): void {\n\t\tthis.configuration.onFocus && this.configuration.onFocus(event);\n\t}\n\tonBlur(event: FocusEvent): void {\n\t\tthis.configuration.onBlur && this.configuration.onBlur(event);\n\t}\n\tonKeydown(event: KeyboardEvent): void {\n\t\tthis.configuration.onKeydown && this.configuration.onKeydown(event);\n\t}\n\tonClick(event: MouseEvent): void {\n\t\tthis.configuration.onClick && this.configuration.onClick(event);\n\t}\n\n\tshouldIgnoreEmptyDOM(): boolean {\n\t\treturn this.configuration.ignoreEmptyDOM ?? false;\n\t}\n\n\tgetDescription(): string | undefined {\n\t\treturn this.configuration.description ?? undefined;\n\n\t}\n\n\tgetDescriptionRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.descriptionRenderer;\n    }\n\n    getDescriptionRendererParams(): object | undefined {\n        return this.configuration.descriptionRendererParams;\n    }\n\n    getValidationMessageRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n\tgetAriaDescribedby(): string {\n\t\treturn '';\n\t}\n\n\tshowErrorState(): boolean {\n\t\treturn this.configuration.showErrorState ?? false;\n\t}\n\n\tisValid(): boolean {\n\t\treturn this.configuration.status === 'error';\n\t}\n\n\tupdateStatus(status : 'error' | \"none\") : void {\n\t\tthis.configuration.status = status;\n\t\tthis.dispatchEvent({\n\t\t\ttype: \"EVENT_VALUE_UPDATE\",\n\t\t\tforce : true\n\t\t})\n\t}\n\n\tupdateValidationMessage(message : string) : void {\n\t\tthis.configuration.validationMessage = message;\n\t}\n\n\n    getValidationMessage(): string {\n        return this.configuration.validationMessage ?? '';\n    }\n\n\tgetLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\nexport function getRatingRootUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('rating', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n\nexport function getRadioUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('radio', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RatingContainerComponentType, RatingContainerControllerType } from \"./rating-container.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\n\nconst useUtilityClassesContainer = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'container',\n\t\t\tmodifiers: [\n\t\t\t\t\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getRadioUtilityClass);\n};\n\n\n\n\nexport class RatingContainerController extends EventEmitter implements RatingContainerControllerType {\n    private component !: RatingContainerComponentType\n    setComponent(component:RatingContainerComponentType){\n        this.component = component;\n        this.applyClassNames();\n    }\n\n    private applyClassNames(){\n        const radioClasses = useUtilityClassesContainer();\n\t\tthis.component.getElement().classList.add(radioClasses.root)\n\t\tthis.component.getElement().classList.add(\"dg-field__container\")\n\t\t// this.component.getElement().classList.add(\"dg-field__input-wrapper\")\n\n       \n\n    }\n\n\n    getProperty(){\n        return{\n            maxValue : this.optionsHandler.getMaxValue(),\n            value : this.optionsHandler.getValue()\n        }\n    }\n\n\n\n\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { RatingContainerComponentType } from \"./rating-container.types\";\nimport { RatingContainerController } from \"./rating-container-contoller\";\n\nconst RatingContainerTemplate = (property : any)=>{\n    const container = document.createElement(\"div\");\n\n    const {maxValue, value} = property;\n\n    for (let index = 1; index <= maxValue; index++) {\n        const div = document.createElement(\"rating-input-wrapper\"); \n        if(index <= value){\n            div.setAttribute(\"value\", value);\n        }\n        container.appendChild(div);\n    }\n\n    \n    return container\n}\n\nexport class RatingContainerComponent extends Component {\n\n    @PostConstruct()\n    init() {\n        const comp : RatingContainerComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new RatingContainerController());\n        const property = controller.getProperty()\n        this.setTemplate(RatingContainerTemplate(property))\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n}\n","export const RATING_EVENTS = {\n    KEYDOWN         : 'keydown',\n    FOCUS           : 'focus',\n    BLUR            : 'blur',\n    MOUSEDOWN       : 'mousedown',\n    CLICK           : 'click',\n    ON_CHANGE       : 'onchange',\n    HOVER           : 'hover',\n    ON_BEFORE_CHANGE: 'onbeforchange',\n    ON_AFTER_CHANGE : 'onafterchange',\n    ON_FOCUS        : 'onfocus',\n    ON_BLUR         : 'onblur',\n    ON_MOUSE_LEAVE  : 'onmouseleave',\n    ON_MOUSE_ENTER  : 'onmouseenter',\n    REFRESH         : 'refresh',\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RatingInputWrapperComponentType } from \"./rating-input-wrapper.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { RatingModelType } from \"../model/rating-model.types\";\nimport { RATING_EVENTS } from \"../../constants/event-name\";\nimport { RatingEventHandlerType } from \"../model/rating-event-handler.types\";\nimport { IRatingOptionHandler } from \"../model/rating-option-handler.types\";\n\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input-wrapper',\n\t\t\tmodifiers: [\n\t\t\t\t\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getRadioUtilityClass);\n};\n\n\n\n\nexport class RatingInputWrapperController extends EventEmitter {\n    private component !: RatingInputWrapperComponentType;\n    private element!: HTMLElement;\n    private value!:number;\n    @AutoWired(RATING_BEAN_NAME.RATING_MODEl) model !: RatingModelType;\n\t@AutoWired(RATING_BEAN_NAME.RATING_EVENT_HANDLER) ratingEventHandler !   : RatingEventHandlerType;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) optionHandler !   : IRatingOptionHandler;\n\n    \n    setComponent(component : RatingInputWrapperComponentType){\n        this.component = component;\n        this.element = this.component.getGui();\n        this.value = this.model.getCounterValue();\n        this.applyClassNames();\n        this.addEvents();\n    }\n\n\n    private applyClassNames(){\n        const radioClasses = useUtilityClasses();\n\t\tthis.element.classList.add(radioClasses.root);\n\n        this.model.isChecked() && this.element.classList.add(\"dg-rating__input-checked\");\n        this.model.isHoverable() && this.element.classList.add(\"dg-rating__input-hover\");\n        this.model.setCounter();\n\n    }\n\n    private refresh() : void {\n        this.removeClassNames();\n        this.removeHoverClassNames();\n        this.applyClassNames();\n    }\n\n    private removeClassNames(){\n        this.element.classList.remove(\"dg-rating__input-checked\");\n    }\n\n    private removeHoverClassNames(){\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.element.classList.remove(\"dg-rating__input-hover\");\n    }\n\n    private addEvents(){\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.addListener(this.element,\"mousedown\",this.handleClick.bind(this));\n        this.addListener(this.element,\"mouseenter\",this.handleMove.bind(this));\n        // this.addListener(this.element,\"mouseleave\",this.handleMove.bind(this));\n        this.addListener(this.eventHandler, RATING_EVENTS.REFRESH, this.refresh.bind(this)); \n        this.addListener(this.eventHandler, 'ONMOUSELEAVE', this.removeHoverClassNames.bind(this)); \n        this.element.addEventListener(\"mouseleave\",()=>{\n            const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n            this.dispatchEvent({\n                type: 'ONMOUSELEAVE',\n            });\n            this.model.resetCounter();\n            this.model.setHoverValue(0);\n\n        })  \n\n    }\n\n    \n\n    private handleClick(event : MouseEvent){\n        if(this.isRightClickByEvent(event)) {\n            return;\n        }\n        const readonly  = this.optionHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.model.setValue(this.value)\n        this.ratingEventHandler.onClick(event);\n        this.model.resetCounter();\n        this.dispatchEvent({\n\t\t\ttype: RATING_EVENTS.REFRESH,\n\t\t});\n\n    }\n\n    private isRightClickByEvent(event : MouseEvent) : boolean {\n\t\tif(event.button === 2) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n    private handleMove(){\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.model.setHoverValue(this.value);\n        this.model.resetCounter();\n        this.dispatchEvent({\n\t\t\ttype: RATING_EVENTS.REFRESH,\n\t\t});\n\n    }\n\n\n\n    getProperty(){\n\n    }\n}","\n\n\nimport { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { RatingInputWrapperComponentType } from \"./rating-input-wrapper.types\";\nimport { RatingInputWrapperController } from \"./rating-input-wrapper-controller\";\n\n\nconst RatingInputWrapperComponentTemplate = (_property : any)=>{\n    const labelContainer = document.createElement(\"label\");\n    const radioInput = document.createElement(\"rating-input\");\n    const ratingSVG = document.createElement(\"rating-svg\");\n    labelContainer.appendChild(radioInput);\n    labelContainer.appendChild(ratingSVG);\n    return labelContainer\n}\n\nexport class RatingInputWrapperComponent extends Component {\n\n    @PostConstruct()\n    init() {\n        const comp : RatingInputWrapperComponentType = {\n            getGui : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new RatingInputWrapperController());\n        const property = controller.getProperty()\n        this.setTemplate(RatingInputWrapperComponentTemplate(property))\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n}\n","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RatingInputComponentType } from \"./rating-input.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\n\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input',\n\t\t\tmodifiers: [\n\t\t\t\t\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getRadioUtilityClass);\n};\n\n\n\n\nexport class RatingInputController extends EventEmitter {\n    private component !: RatingInputComponentType\n    \n    setComponent(component : RatingInputComponentType){\n        this.component = component;\n        this.applyClassNames();\n    }\n\n    private applyClassNames(){\n        const radioClasses = useUtilityClasses();\n\t\tthis.component.getElement().classList.add(radioClasses.root)\n       \n\n    }\n\n    getProperty(){\n\n    }\n}","\n\n\nimport { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { RatingInputComponentType } from \"./rating-input.types\";\nimport { RatingInputController } from \"./rating-input-controller\";\n\n\nconst RatingInputComponentTemplate = (_property : any)=>{\n    const ratingInput = document.createElement(\"input\");\n    ratingInput.type = \"radio\";\n    return ratingInput\n}\n\nexport class RatingInputComponent extends Component {\n\n    @PostConstruct()\n    init() {\n        const comp : RatingInputComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new RatingInputController());\n        const property = controller.getProperty()\n        this.setTemplate(RatingInputComponentTemplate(property))\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n}\n","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RatingSVGComponentType } from \"./rating-svg.types\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { IRatingUserComponentHandler } from \"../model/rating-user-component-handler.types\";\n\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input--custom',\n\t\t\tmodifiers: [\n\t\t\t\t\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getRadioUtilityClass);\n};\n\n\n\n\nexport class RatingSVGController extends EventEmitter {\n    private component !: RatingSVGComponentType\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: IRatingUserComponentHandler;\n\n    \n    setComponent(component : RatingSVGComponentType){\n        this.component = component;\n        this.applyClassNames();\n        this.setRendererDetails();\n    }\n\n    private applyClassNames(){\n        const radioClasses = useUtilityClasses();\n\t\tthis.component.getElement().classList.add(radioClasses.root)\n\n\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createIconRendererWrapper();\n        const params          = this.createRendererParams();\n        const  userDetails     = this.userComponentHandler.getIconRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n\n        // this.isInValid = inValid;\n\n        this.component.setRendererDetails(userDetails);\n\n        \n    }\n    private createIconRendererWrapper() {\n        return {\n\t\t\tgetRenderer          : () => this.optionsHandler.getIconRenderer(),\n\t\t\tgetUserRendererParams: () => this.optionsHandler.getIconRendererParams(),\n\t\t};\n    }\n    private createRendererParams() {\n        return {\n\t\t\tvalue: this.optionsHandler.getIconRendererParams(),\n\t\t};\n    }\n    getProperty(){\n\n    }\n}","\n\n\nimport { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { RatingSVGComponentType } from \"./rating-svg.types\";\nimport { RatingSVGController } from \"./rating-svg-controller\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\n\nconst RatingSVGComponentTemplate = (_property : any)=>{\n    const ratingSVG = document.createElement(\"span\");\n    return ratingSVG\n}\n\nexport class RatingSVGComponent extends Component {\n    private renderer       : any;\n\tprivate rendererElement: any;\n\n    @PostConstruct()\n    init() {\n        const comp : RatingSVGComponentType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails)=>this.setRendererDetails(rendererDetails)\n        }\n\n        const controller = this.createBean(new RatingSVGController());\n        const property = controller.getProperty()\n        this.setTemplate(RatingSVGComponentTemplate(property))\n        controller.setComponent(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n\t\tclearElement(parentElement);\n\t\n\t\tconst svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\tsvg.setAttribute(\"width\", \"16\");\n\t\tsvg.setAttribute(\"height\", \"16\");\n\t\tsvg.setAttribute(\"viewBox\", \"0 -1 16 16\");\n\t\tsvg.setAttribute(\"fill\", \"none\");\n\t\tsvg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n\t\tsvg.style.cssText = \"--ratingChecked: #FCB515; --ratingUnChecked: #E3E3E3;\";\n\t\n\t\tconst g = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tg.setAttribute(\"id\", \"ratingIcon\");\n\t\n\t\tconst path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n\t\tpath.setAttribute(\"fill-rule\", \"evenodd\");\n\t\tpath.setAttribute(\"class\", \"star\");\n\t\tpath.setAttribute(\"d\", \"M6.21077 0.910679C6.61656 -0.303561 8.38344 -0.303559 8.78923 0.910681L9.63043 3.42774C9.8119 3.97077 10.3324 4.33842 10.9197 4.33842H13.6418C14.955 4.33842 15.501 5.97217 14.4386 6.72261L12.2363 8.27824C11.7612 8.61385 11.5624 9.20872 11.7439 9.75175L12.5851 12.2688C12.9909 13.483 11.5615 14.4928 10.4991 13.7423L8.29679 12.1867C7.82168 11.8511 7.17832 11.8511 6.70321 12.1867L4.50093 13.7423C3.43855 14.4928 2.00912 13.483 2.41491 12.2688L3.25611 9.75175C3.43758 9.20872 3.23878 8.61385 2.76366 8.27824L0.561388 6.72261C-0.500999 5.97217 0.0449977 4.33842 1.35818 4.33842H4.08034C4.66761 4.33842 5.1881 3.97076 5.36957 3.42774L6.21077 0.910679Z\");\n\t\n\t\tg.appendChild(path);\n\t\tsvg.appendChild(g);\n\t\tparentElement.appendChild(svg);\n\t}\n\t\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n}\n","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport {IRatingUserComponentHandler } from './rating-user-component-handler.types';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { ILabelUserComponentHandler } from '../../../../label/label.types';\n\nexport const enum PropertyName  {\n\tDESCRIPTION_RENDERER = 'descriptionRenderer',\n\tICON_RENDERER = 'iconRenderer',\n\tERROR_RENDERER = 'errorRenderer',\n\tLABEL_RENDERER = 'labelRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class RatingUserComponentHandler extends UserComponentHandler implements IRatingUserComponentHandler , ILabelUserComponentHandler{\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.DESCRIPTION_RENDERER, params, PropertyName.DESCRIPTION_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetIconRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ICON_RENDERER, params, PropertyName.ICON_RENDERER);\n\n\t}\n\n\n\n\t\n\tprotected getComponentDetail( item: any, propertyName: string, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: string; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: string, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: string, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.ICON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DESCRIPTION_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: string, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : string, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : string, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.ICON_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","import { Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RatingModelType } from \"./rating-model.types\";\nimport { RATING_EVENTS } from \"../../constants/event-name\";\n\n@Bean(RATING_BEAN_NAME.RATING_MODEl)\nclass RatingModel extends EventEmitter implements RatingModelType {\n  private value!: number; // Holds the current rating value\n  private maxValue!: number; // Maximum allowed rating (e.g., 5 stars)\n  private counter!: number;\n  private hoverValue!: number;\n\n  @PostConstruct()\n  init() {\n    this.value = this.hoverValue = this.optionsHandler.getValue();\n    this.maxValue = this.optionsHandler.getMaxValue();\n    this.counter = 1;\n  }\n\n  // Get the current rating value\n  getValue(): number {\n    return this.value;\n  }\n\n  // Set a new rating value (with validation and change detection)\n  setValue(newValue: number): void {\n    if (newValue >= 0 && newValue <= this.maxValue) {\n      if (this.value !== newValue) { // Check if the value has changed\n\n        this.dispatchEvent({\n          type: RATING_EVENTS.ON_BEFORE_CHANGE, // Dispatch the ONCHANGE event\n        });\n\n        this.value = newValue;\n\n        this.dispatchEvent({\n          type: RATING_EVENTS.ON_CHANGE, // Dispatch the ONCHANGE event\n        });\n      }else{\n        this.dispatchEvent({\n          type: RATING_EVENTS.ON_BEFORE_CHANGE, // Dispatch the ONCHANGE event\n        });\n\n        this.value = 0;\n\n        this.dispatchEvent({\n          type: RATING_EVENTS.ON_CHANGE, // Dispatch the ONCHANGE event\n        });\n\n      }\n      this.dispatchEvent({\n        type: RATING_EVENTS.REFRESH, // Existing refresh event\n      });\n    } else {\n      return; // Do nothing if the value is out of range\n    }\n  }\n\n  // Update the rating value by a delta (increment or decrement)\n  updateValue(delta: number): void {\n    const updatedValue = this.value + delta;\n    this.setValue(updatedValue); // Reuse validation logic from setValue\n  }\n\n  setCounter(value?: number): void {\n    if (value) {\n      this.counter = value;\n    } else {\n      this.counter = this.counter + 1;\n    }\n  }\n\n  resetCounter(): void {\n    this.counter = 1;\n  }\n\n  isChecked(): boolean {\n    return this.counter <= this.value;\n  }\n\n  getCounterValue(): number {\n    return this.counter;\n  }\n\n  isHoverable(): boolean {\n    return this.counter <= this.hoverValue;\n  }\n\n  setHoverValue(value: number): void {\n    this.hoverValue = value;\n  }\n\n  // New API to check if a number is within the range of value and maxValue\n  isInRange(num: number): boolean {\n    return  num <= this.maxValue;\n  }\n}\n\nexport { RatingModel };\n","import { AutoWired, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RatingEventHandlerType } from \"./rating-event-handler.types\";\nimport { RATING_EVENTS } from \"../../constants/event-name\";\nimport { RatingModelType } from \"./rating-model.types\";\n\n\n\n\n@Bean(RATING_BEAN_NAME.RATING_EVENT_HANDLER)\nexport class RaitngEventHandler extends EventEmitter implements RatingEventHandlerType{\n    @AutoWired(RATING_BEAN_NAME.RATING_MODEl) ratingModel !   : RatingModelType;\n\n    @PostConstruct()\n    init(){\n        this.addListener(this.eventHandler,RATING_EVENTS.ON_CHANGE, this.onChange.bind(this)); \n        this.addListener(this.eventHandler,RATING_EVENTS.ON_BEFORE_CHANGE, this.onBeforeChange.bind(this));  \n    }\n\n    onFocus(event: FocusEvent): void {\n        this.optionsHandler.onFocus(event);\n    }\n    onBlur(event: FocusEvent): void {\n        this.optionsHandler.onBlur(event);\n    }\n    onKeydown(event: KeyboardEvent): void {\n        this.optionsHandler.onKeydown(event);\n    }\n\n    onClick(event: MouseEvent): void {\n        this.optionsHandler.onClick(event);\n    }\n\n    onMouseLeave(event: MouseEvent): void {\n        this.optionsHandler.onLeave(event); \n    }\n\n    onMouseEnter(event: MouseEvent): void {\n        this.optionsHandler.onHover(event);  \n    }\n\n    onMouseOver(event: MouseEvent): void {\n        this.optionsHandler.onHover(event);\n    }\n\n    onChange(){\n        const value = this.ratingModel.getValue();\n        this.optionsHandler.onChange(value);\n    }\n\n    onBeforeChange() : void {\n        const value = this.ratingModel.getValue();  // get the current value before change\n        this.optionsHandler.onBeforeChange(value);\n    }\n\n\n} ","import {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IRatingOptionHandler } from \"./rating-option-handler.types\";\n\n@Bean('stateManager')\nexport class RatingStateManager extends EventEmitter {\n    isInValid() : boolean {\n        return (this.optionsHandler as IRatingOptionHandler).isValid();\n    }\n}","\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { ComponentMetadataProvider } from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport { UserComponentRegistry } from '@dg/corecomponent/UserComponentRegistry.js';\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { RatingAPI } from \"./core/model/rating-api\";\nimport { IRatingConfiguration } from \"./rating-configuration.types\";\nimport { IModule } from '../../core/modules.types';\nimport { ModuleRegistry } from \"./modules/ModuleRegistry\";\nimport { Label } from \"../../label/label-view\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { RatingControllerHandler } from \"./core/model/rating-controller\";\nimport { RatingOptionHandler } from \"./core/model/rating-option-handler\";\nimport {RatingContainerComponent} from \"./core/rating-container/rating-container-view\"\nimport { RatingInputWrapperComponent } from \"./core/rating-input-wrapper/rating-input-wrapper-view\";\nimport { RatingInputComponent } from \"./core/rating-input/rating-input-view\";\nimport { RatingSVGComponent } from \"./core/rating-svg/rating-svg-view\";\nimport { RatingUserComponentHandler } from \"./core/model/rating-user-component-handler\";\nimport { RatingModel } from \"./core/model/rating-model\";\nimport { RaitngEventHandler } from \"./core/model/rating-event-handler\";\nimport { RatingStateManager } from \"./core/model/rating-state-manager\";\nimport { ErrorComponent } from \"../../error/error-view\";\n\nexport interface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IModule[];\n}\n\n\nlet nextInstanceId = 1;\n\n\nexport class RatingCoreComponent {\n\tinitializeRating( configuration: IRatingConfiguration, params: IUserParams = {}, createUI: CallableFunction, ): void {\n\t\t\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n\t\tconst registeredModules = this.getRegisteredModules(params, instanceID);\n\n\t\tconst beanClasses = this.CreateBeanClasses(registeredModules, configuration);\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n        // Model classes\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n\t\tthis.registerCoreComponent(context);\n        // Default user compoent registry\n\t\tthis.registerDefaultUserComponent(context);\n        // Optional Dependency Module\n\t\tthis.registerModuleUserComponents(context, registeredModules);\n        // \n\t\tthis.registerStackComponents(context, registeredModules);\n\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate CreateBeanClasses(registeredModules : IModule[], _configuration : IRatingConfiguration): Set<any> {\n\t\tlet beanList = [\n\t\t\t//default framework\n\t\t\tComponentsRegistry, // component registry\n\t\t\tUserComponentRegistry, // user component registry\n\t\t\tEventHandler, // pub sub model\n\t\t\tRatingOptionHandler, //configuation\n\t\t\tComponentMetadataProvider, // framework component metadata provider\n\t\t\tRatingUserComponentHandler, // framework custom rendering\n\n\t\t\t//Rating component model layer\n\t\t\tRatingAPI, //api part\n\t\t\tRatingModel,\n\t\t\t// RatingEventHandler, // callback for custom layout\n\t\t\tRatingControllerHandler,\n\t\t\tRaitngEventHandler,\n\t\t\tRatingStateManager\n\t\t];\n\n \t\tconst moduleBeans = this.extractModuleEntity(registeredModules, (module : IModule) => module.beans ? module.beans : []);\n        beanList.push(...moduleBeans);\n\n\t\t\n\n\t\treturn new Set(beanList);\n\t}\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID : string; } {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\tprivate registerModuleUserComponents(context: Context, registeredModules: IModule[]): void {\n        const moduleUserComps: { componentName: string, componentClass: any; }[] = this.extractModuleEntity(registeredModules, (module : IModule) => module.userComponents ? module.userComponents : []);\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY);\n        moduleUserComps.forEach(compMeta => {\n            userComponentRegistry.registerDefaultComponent(compMeta.componentName, compMeta.componentClass);\n        });\n    }\n\n\tprivate registerStackComponents(context: Context, registeredModules: IModule[]): void {\n        const Components = this.createComponentsList(registeredModules);\n\t\tconst componentRegistry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY);\n        componentRegistry.setupComponents(Components);\n    }\n\n\tprivate extractModuleEntity(moduleEntities: any[], extractor: (module: any) => any) {\n        return [].concat(...moduleEntities.map(extractor));\n    }\n\n\tprivate createComponentsList(registeredModules: IModule[]): any[] {\n\t\tlet components: ComponentMeta[] = []\n\n        const moduleComps = this.extractModuleEntity(registeredModules, (module : IModule) => module.components ? module.components : []);\n\n        components = components.concat(moduleComps);\n\n        return components;\n\t}\n\n\tprivate getRegisteredModules( params: IUserParams | undefined, instanceID: string, ): IModule[] {\n\t\tconst passedViaConstructor: IModule[] | undefined | null = params ? params.modules : null;\n\t\tconst registered = ModuleRegistry.__getRegisteredModules(instanceID);\n\n\t\tconst allModules: IModule[] = [];\n\t\tconst mapNames: { [name: string]: boolean } = {};\n\n\t\tconst addModule = (mod: IModule, instanceID: string | undefined) => {\n\t\t\tconst addIndividualModule = (currentModule: IModule) => {\n\t\t\t\tif (!mapNames[currentModule.moduleName]) {\n\t\t\t\t\tmapNames[currentModule.moduleName] = true;\n\t\t\t\t\tallModules.push(currentModule);\n\t\t\t\t\tModuleRegistry.__register(currentModule, instanceID);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\taddIndividualModule(mod);\n\t\t\tif (mod.dependantModules) {\n\t\t\t\tmod.dependantModules.forEach((m) => addModule(m, instanceID));\n\t\t\t}\n\t\t};\n\n\t\tif (passedViaConstructor) {\n\t\t\tpassedViaConstructor.forEach((m) => addModule(m, instanceID));\n\t\t}\n\n\t\tif (registered) {\n\t\t\tregistered.forEach((module) =>\n\t\t\t\taddModule( module, undefined),\n\t\t\t);\n\t\t}\n\n\t\treturn allModules;\n\t}\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'rating-label',\n\t\t\tcomponentClass: Label\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'rating-description',\n\t\t\tcomponentClass: DescriptionComponent\n\t\t},\n\n\t\t{\n\t\t\tcomponentName : \"rating-container\",\n\t\t\tcomponentClass : RatingContainerComponent\n\t\t},\n\n\t\t{\n\t\t\tcomponentName : \"rating-input-wrapper\",\n\t\t\tcomponentClass : RatingInputWrapperComponent\n\t\t},\n\n\t\t{\n\t\t\tcomponentName : \"rating-input\",\n\t\t\tcomponentClass : RatingInputComponent\n\t\t},\n\n\t\t{\n\t\t\tcomponentName: \"rating-svg\",\n\t\t\tcomponentClass : RatingSVGComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : 'rating-error',\n\t\t\tcomponentClass: ErrorComponent\n\t\t}\n\t\t\n\n\n    ];\n\n\treturn components;\n}\n\n","export interface IKeyboardEventManager {\n  registerElement(element: HTMLElement, callback: (event: KeyboardEvent, numberValue: string | null) => void): void;\n  unregisterElement(element: HTMLElement): void;\n  getNumberIfPressed(event: KeyboardEvent): string | null;\n}\n\nexport class KeyboardEventManager implements IKeyboardEventManager {\n  private registeredElements: Map<HTMLElement, (event: KeyboardEvent) => void>;\n\n  constructor() {\n    this.registeredElements = new Map();\n  }\n\n  /**\n   * Registers an element and adds a keydown event listener.\n   * @param element - The target HTML element to register.\n   * @param callback - The function to call when a keydown event occurs.\n   */\n  registerElement(element: HTMLElement, callback: (event: KeyboardEvent, numberValue: string | null) => void): void {\n    if (!this.registeredElements.has(element)) {\n      const handler = (event: KeyboardEvent) => {\n        const numberValue = this.getNumberIfPressed(event);\n        callback(event, numberValue); // Pass both the event and the numeric value\n      };\n      element.addEventListener(\"keydown\", handler);\n      this.registeredElements.set(element, handler);\n      // console.log(`Element registered: ${element.id}`);\n    } else {\n      // console.warn(`Element already registered: ${element.id}`);\n    }\n  }\n\n  /**\n   * Unregisters an element and removes its keydown event listener.\n   * @param element - The target HTML element to unregister.\n   */\n  unregisterElement(element: HTMLElement): void {\n    const handler = this.registeredElements.get(element);\n    if (handler) {\n      element.removeEventListener(\"keydown\", handler);\n      this.registeredElements.delete(element);\n      // console.log(`Element unregistered: ${element.id}`);\n    } else {\n      // console.warn(`Element not registered: ${element.id}`);\n    }\n  }\n\n  /**\n   * Handles the buffer logic with a delay and returns the accumulated number.\n   * @param event - The KeyboardEvent to check.\n   * @returns The accumulated number if numeric keys are pressed within the delay, otherwise null.\n   */\n   getNumberIfPressed(event: KeyboardEvent): string | null {\n    return /^[0-9]$/.test(event.key) ? event.key :null;\n   }\n}\n\n// Example usage:\n// const keyboardManager = new KeyboardEventManager();\n// const inputField = document.getElementById(\"myInput\") as HTMLInputElement;\n\n// keyboardManager.registerElement(inputField, (event, numberValue) => {\n//   if (numberValue !== null) {\n//     console.log(`Accumulated number: ${numberValue}`);\n//   } else {\n//     console.log(`Non-numeric key pressed: ${event.key}`);\n//   }\n// });\n","\nimport { composeClasses } from \"@dg/utils\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { RatingRootComponentType, RatingRootControllerType } from \"./rating-root.types\";\nimport { getRadioUtilityClass } from \"../rating-utils/rating-classes\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { RATING_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { RatingControllerHandler } from \"../model/rating-controller\";\nimport { RatingEventHandlerType } from \"../model/rating-event-handler.types\";\nimport {IKeyboardEventManager, KeyboardEventManager} from \"../rating-utils/keyboard-event-util\"\nimport { RatingModelType } from \"../model/rating-model.types\";\nimport { RATING_EVENTS } from \"../../constants/event-name\";\nimport type { RatingStateManager } from \"../model/rating-state-manager\";\n\n\nconst useUtilityClassesForRadio = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'root',\n\t\t\tmodifiers: [\n\t\t\t\t\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getRadioUtilityClass);\n};\n\n\n\n\nexport class RatingRootController extends AbstractController<RatingRootComponentType> implements RatingRootControllerType{\n   \n\t@AutoWired(RATING_BEAN_NAME.RATING_CONTROLLER_HANDLER) controllerHandler !   : RatingControllerHandler;\n\t@AutoWired(RATING_BEAN_NAME.RATING_EVENT_HANDLER) ratingEventHandler !   : RatingEventHandlerType;\n\t@AutoWired(RATING_BEAN_NAME.RATING_MODEl) ratingModel !   : RatingModelType;\n    private element !: HTMLElement \n    private keyboardManager !:IKeyboardEventManager;\n    @AutoWired('stateManager') private stateManager !: RatingStateManager;\n\n\n\n    init(): void {\n        this.element = this.component?.getElement() as HTMLElement;\n        this.applyClassNames();\n        this.setTabindex();\n        this.keyboardManager = new KeyboardEventManager();\n        this.addListeners();\n        this.controllerHandler.registerNumber(this);\n        this.setAriaAttributes();\n\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n        this.addErrorClassName();\n    }\n\n     private addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.component!.getElement().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n\n\n    \n\n    private applyClassNames(){\n        const radioClasses = useUtilityClassesForRadio();\n\t\tthis.element.classList.add(radioClasses.root)\n        this.element.classList.add(\"dg-rating__root\")\n        this.element.classList.add(\"dg-field__root\")\n    }\n    \n    private setTabindex(): void{\n        this.element.setAttribute('tabindex', '0');\n    }\n\n    getElement(): HTMLElement {\n       return this.element;\n    }\n\n    private setAriaAttributes(): void{\n        if (!this.element) return;  // Ensure element is defined\n        this.element.setAttribute('role', 'radiogroup');\n    }\n    \n\n\n    addListeners() : void{\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        if (!this.element) return;  // Ensure element is defined\n    \n        // Add mouseover event listener\n        this.element.addEventListener('mouseover', this.handleMouseOver.bind(this));\n    \n        // Add mouseleave event listener\n        this.element.addEventListener('mouseleave', this.handleMouseLeave.bind(this));\n\n        // Add keydown event listener\n        this.keyboardManager.registerElement(this.element,this.handleKeyDown.bind(this));\n\n        // Add focus event listener\n        this.element.addEventListener('focus', this.handleFocus.bind(this));\n\n        // Add blur event listener\n        this.element.addEventListener('blur', this.handleBlur.bind(this));\n\n\n        this.addListener(this.eventHandler, RATING_EVENTS.FOCUS, this.focus.bind(this)); \n\n\n    }\n\n    \n    private handleMouseOver(event:MouseEvent): void {\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.ratingEventHandler.onMouseOver(event);\n       \n    }\n    \n    private handleMouseLeave(event :MouseEvent): void {\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.ratingEventHandler.onMouseLeave(event);\n\n    }\n\n    private handleKeyDown(event : KeyboardEvent):void{\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n    const numberValue = this.keyboardManager.getNumberIfPressed(event);\n    if (numberValue !== null) {\n       const isInRange =  this.ratingModel.isInRange(Number(numberValue))\n       isInRange && this.ratingModel.resetCounter();\n       isInRange && this.ratingModel.setHoverValue(0);\n       isInRange && this.ratingModel.setValue(Number(numberValue));\n    }\n        this.ratingEventHandler.onKeydown(event);\n    }\n\n\n   \n\n    private handleFocus(event : FocusEvent): void {\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.ratingEventHandler.onFocus(event);\n\n    }\n\n    private handleBlur(event : FocusEvent): void {\n        const readonly  = this.optionsHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n        this.ratingEventHandler.onBlur(event);\n\n    }\n\n        \n    getProperty(){\n        return{\n            getTemplate   : ()=>{ return null},\n            label         : this.optionsHandler.getLabel(),\n            ignoreEmptyDOM: this.optionsHandler.shouldIgnoreEmptyDOM(),\n            description   : this.optionsHandler.getDescription(),\n            error         : this.optionsHandler.showErrorState()\n        }\n        \n\n    }\n\n    focus(): void {\n       this.element.focus();\n    }\n    blur(): void {\n        this.element.blur();\n    }\n    hide(): void {\n    if (this.element ) {\n        this.element.style.display = \"none\"; \n    }\n    }\n    show(): void {\n        if (this.element ) {\n            this.element.style.display = \"block\"; \n        }\n    }\n\n    getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-rating__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-rating__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses: ()=>  \"dg-rating__validation-message\",\n\t\t\t\tgetDescriptionClasses      : ()=> \"dg-rating__description\"\n\t\t\t}\n\t\t};\n    }\n\n\n}","import { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { composeClasses } from '@dg/utils';\nimport { RatingRootController } from './rating-root-controller';\nimport { getRatingRootUtilityClass } from '../rating-utils/rating-classes';\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'container',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getRatingRootUtilityClass)\n}\n\n\nconst BasicTemplate= (params:any) =>{\n\tconst wrapper = document.createElement('div');\n\n\tconst fragmentElemet = document.createDocumentFragment();\n\n\tif(params.ignoreEmptyDOM || params.label){\n\t\tconst labelElement = document.createElement('rating-label');\n\t\tlabelElement.setAttribute('ref', 'label');\n\t\tfragmentElemet.appendChild(labelElement);\n\n\t}\n\n\tconst container = document.createElement('rating-container');\n\tfragmentElemet.appendChild(container);\n\n\n\tif(params.ignoreEmptyDOM || params.description){\n\t\tconst descriptionElement = document.createElement('rating-description');\n\t\tdescriptionElement.setAttribute('ref', 'description');\n\t\tfragmentElemet.appendChild(descriptionElement);\n\n\t}\n\n\tif(params.ignoreEmptyDOM || params.error){\n\t\tconst errorElement = document.createElement('rating-error');\n\t\terrorElement.setAttribute('ref', 'error');\n\t\tfragmentElemet.appendChild(errorElement);\n\n\t}\n\n\twrapper.append(fragmentElemet);\n\treturn wrapper;\n\t\n\n}\n\n\nfunction RootTemplate(props : any): HTMLElement {\n\tconst { getTemplate } = props;\n\tconst classes        = useUtilityClasses();\n\tconst customTemplate = getTemplate(classes);\n\tconst template       = customTemplate ? customTemplate : BasicTemplate(props);\n\treturn template as HTMLElement;\n}\n\nexport class RatingRootComponent extends Component {\n\tprivate appendTo: HTMLElement |  null | undefined;\n\tconstructor(appendTo: HTMLElement |  undefined |  null) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: any = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className)\n\t\t};\n\n        // change createMangedBean to createWire\n\t\tconst controller = this.createManagedBean(new RatingRootController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst properties = controller.getParamsProperty();\n\t\tconst template = RootTemplate(props);\n\n\t\t// const properties = controller.getParamsProperty();\n\t\t\n\t\tthis.setTemplate(template, {\n\t\t\tlabel      : properties.label,\n\t\t\terror      : properties.description,\n\t\t\tdescription: properties.description\n\t\t});\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t});\n\t}\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","\nimport { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../modules/CSSRegistry\";\nimport { ICustomReggexType } from \"./model/text-options-handler.types\";\n\n\nconst inputWrapper ='inputWrapper'\n\nfunction getTextUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n    const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n    return generateUtilityClass('text', slots.slot, slots.modifiers,globalNameSpace as string[]);\n  }\n\n\nconst rootTemplate = (props: any , emptyDom :  boolean) => {\n    const rootDiv = document.createElement(\"div\");\n    const div = document.createElement(\"div\");\n\n    div.classList.add('dg-text__container');\n    div.classList.add('dg-field__container');\n    if (emptyDom || props.label) {\n        const textLabel = document.createElement(\"text-label\");\n        textLabel.setAttribute(\"ref\", 'label');\n        rootDiv.appendChild(textLabel);\n\n    }\n    if(emptyDom || props.prefix){\n        const pR =  document.createElement('prefix');\n        div.appendChild(pR);\n        if(!props.prefix){\n\t\t\tdiv.classList.add('dg-field__prefix--hidden');\n\t\t}\n    }\n    const textInput = document.createElement(\"text-input\");\n    textInput.setAttribute('ref',inputWrapper);\n    div.appendChild(textInput);\n    if(emptyDom || props.suffix){\n        const sR =  document.createElement('suffix');\n        div.appendChild(sR);\n        if(!props.suffix){\n\t\t\tdiv.classList.add('dg-field__suffix--hidden');\n\t\t}\n    }\n    rootDiv.appendChild(div);\n    if (emptyDom || props.helper) {\n        const textHelper = document.createElement(\"text-helper\");\n        textHelper.setAttribute(\"ref\", 'description');\n        rootDiv.appendChild(textHelper);\n    }\n\n    if(emptyDom || props.error) {\n        const errorElement = document.createElement(\"error\");\n        errorElement.setAttribute(\"ref\", 'error');\n        rootDiv.appendChild(errorElement);\n    }\n    return rootDiv;\n}\n\ninterface OwnerStateType {\n    selected: boolean;\n    disabled : boolean;\n    readonly : boolean;\n}\n\nfunction setFocusAtFirst(inputElement: HTMLInputElement | undefined) {\n    if (inputElement) {\n        inputElement.focus();\n        inputElement.setSelectionRange(0, 0); \n    }\n}\n\nfunction setFocusAtLast(inputElement: HTMLInputElement | undefined) {\n    if (inputElement && inputElement.value.length > 0) {\n        const length = inputElement.value.length;\n        inputElement.focus();\n        inputElement.setSelectionRange(length, length); \n    }\n}\n\nfunction selectAllText(inputElement: HTMLInputElement | undefined) {\n    if (inputElement && inputElement.tagName === 'INPUT') {\n        inputElement.focus();\n        inputElement.select();\n    }\n}\nfunction getReggexPattern(pattern: RegExp | keyof ICustomReggexType | null): RegExp | undefined {\n    let patterns: RegExp | undefined;\n\n    if (pattern instanceof RegExp) {\n        try {\n            new RegExp(pattern);\n            patterns = pattern;\n        } catch (e) {\n            patterns = undefined;\n        }\n    } else if (typeof pattern === 'string') {\n        switch (pattern) {\n            case 'letter':\n                patterns = /^[a-zA-Z]+$/;\n                break;\n            case 'number':\n                patterns = /^\\d+$/;\n                break;\n            case 'alphanumeric':\n                patterns = /^[a-zA-Z0-9]+$/;\n                break;\n            case 'alphawithspace':\n                patterns = /^[a-zA-Z\\s]+$/;\n                break;\n            case 'alphanumericwithspace':\n                patterns = /^[a-zA-Z0-9\\s]+$/;\n                break;\n        }\n    }\n\n    return patterns;\n}\nfunction getFormattedText(element :  HTMLInputElement , format ?:  string)  :  string{\n    let text = element.value;\n    switch (format) {\n        case 'capitalize':\n            text = text.replace(/\\b\\w/g, char => char.toUpperCase());\n            break;\n        case 'lower':\n            text = text.toLowerCase();\n            break;\n        case 'upper':\n            text = text.toUpperCase();\n            break;\n        case 'sentence':\n            text = text.split(/([.!?]\\s)/) \n                  .map(sentence => sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase())\n                  .join('');;\n            break;\n        case 'none':\n        default:\n            break;\n    }\n   return text;\n}\nfunction getFormattedValue(value :  string , format ?:  string)  :  string{\n    let text = value;\n    if(format !='none'){\n        text =  text.toLowerCase();\n    }\n    switch (format) {\n        case 'capitalize':\n            text = text.replace(/\\b\\w/g, char => char.toUpperCase());\n            break;\n        case 'lower':\n            text = text.toLowerCase();\n            break;\n        case 'upper':\n            text = text.toUpperCase();\n            break;\n        case 'sentence':\n            text = text.split(/([.!?]\\s)/) \n                  .map(sentence => sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase())\n                  .join('');;\n            break;\n        case 'none':\n            text = text\n        default:\n            break;\n    }\n   return text;\n}\nfunction callHook(onbefore : CallableFunction ,api :CallableFunction,onAfter :  CallableFunction,args : number[] | string[]){ \n    const canExecute = onbefore(...args);\n    if(canExecute !== false){\n        api();\n        onAfter(...args);\n    }        \n}\nconst RenderInputWrapper ='renderInputWrapper'\nconst RenderRootTemplate = (props: any, emptyDom :  boolean) => {\n    const rootDiv = document.createElement(\"div\");\n    const div = document.createElement(\"div\");\n\n    div.classList.add('dg-text__container');\n    div.classList.add('dg-field__container');\n    if (emptyDom || props.label) {\n        const textLabel = document.createElement(\"text-label\");\n        textLabel.setAttribute(\"ref\", 'label');\n        rootDiv.appendChild(textLabel);\n    }\n    (props?.rtl) && (div.setAttribute('dir','rtl'));\n    if(emptyDom || props.prefix){\n        const pR =  document.createElement('prefix');\n        div.appendChild(pR);\n        if(!props.prefix){\n\t\t\tdiv.classList.add('dg-field__prefix--hidden');\n\t\t}\n    }\n    const textInput = document.createElement(\"render-text-input\");\n    textInput.setAttribute('ref',RenderInputWrapper);\n    div.appendChild(textInput);\n    if(emptyDom || props.suffix){\n        const sR =  document.createElement('suffix');\n        div.appendChild(sR);\n        if(!props.suffix){\n\t\t\tdiv.classList.add('dg-field__suffix--hidden');\n\t\t}\n    }\n    rootDiv.appendChild(div);\n    if (emptyDom || props.helper) {\n        const textHelper = document.createElement(\"text-helper\");\n        textHelper.setAttribute(\"ref\", 'description');\n        rootDiv.appendChild(textHelper);\n    }\n    return rootDiv;\n}\n\n\nexport { \n    rootTemplate,\n    getTextUtilityClass,\n    OwnerStateType,\n    setFocusAtFirst,\n    setFocusAtLast,\n    selectAllText,\n    callHook,\n    getFormattedText,\n    inputWrapper,\n    getReggexPattern,\n    getFormattedValue,\n    RenderRootTemplate,\n    RenderInputWrapper\n}","import { composeClasses, generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\ninterface OwnerStateType {\n    disabled : boolean;\n}\n\nfunction getTextUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n    const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n    return generateUtilityClass('text', slots.slot, slots.modifiers,globalNameSpace as string[]);\n}\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'root',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getTextUtilityClass );\n};\n\nexport {\n    useUtilityClasses,\n    OwnerStateType,\n    getTextUtilityClass\n}","const TEXT_BEAN_NAME = {\n\tTEXT_API: 'TextAPI',\n\tTEXT_CONFIGURATION: 'configuration',\n\tCSSCLASSNAMEGENERATOR: 'CSSClassNameGenartor',\n\tTEXT_ADJUSTER_HANDLER: 'TextAdjusterHandler',\n\tFORMATTER: 'formatter',\n\tKEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n\tTEXT_EVENT_HANDLER: 'TextEventHandler',\n\tTEXT_CONTROLLER_HANDLER: 'TextControllerHandler',\n}\nexport {\n    TEXT_BEAN_NAME\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\n\nimport { TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { TextRootController } from \"../text-root/text-root-controller\";\nimport { RenderingTextRootController } from \"../rendering-text-root/rendering-text-root-controller\";\n\n\n@Bean(TEXT_BEAN_NAME.TEXT_CONTROLLER_HANDLER)\nclass TextControllerHandler extends EventEmitter {\n\tprivate textCtrl!: TextRootController  | RenderingTextRootController;\n\tregisterTextCtrl(textCtrl: TextRootController | RenderingTextRootController): void {\n\t\tthis.textCtrl = textCtrl;\n\t}\n\n\tgetTextCtrl(): TextRootController | RenderingTextRootController {\n\t\treturn this.textCtrl;\n\t}\n}\n\nexport {\n    TextControllerHandler\n}","const PHONE_NUMBER_FORMATS = {\n    1: '+xx xxxxx xxxxx',\n    2: '+xx-xxxxx-xxxxx',\n    3: '+xx xxx xxx xxxx',\n    4: '+xx-xxx-xxx-xxxx',\n    5: 'xxxxx xxxxx',\n    6: 'xxxxx-xxxxx',\n    7: 'xxx xxx xxxx',\n    8: 'xxx-xxx-xxxx',\n    9: 'xxx xxx-xxxx',\n    10: '(xxx) xxx-xxxx',\n    11: 'xxxxxxxxxx'\n};\n\nconst DELIMITERS = {\n    PLUS: '+',\n    SPACE: ' ',\n    HYPHEN: '-',\n    OPEN_BRACKET: '(',\n    CLOSE_BRACKET: ')',\n    EMPTY: ''\n};\n\n\nfunction validateAndFormatPhoneNumber(value : string, formatKey : any) {\n    value = value.toString().trim();\n    let format = formatKey;\n    if (typeof formatKey === 'number') {\n        format = (PHONE_NUMBER_FORMATS as any)[formatKey];\n    }\n\n    if (!format) {\n        throw new Error(`Invalid format key: ${formatKey}`);\n    }\n\n    const digits = value.replace(/\\D/g, '');\n\n    const formatDigits = format.replace(/[^x]/g, '');\n\n    if (digits.length > formatDigits.length) {\n        return null;\n    }\n\n    let formattedValue = '';\n    let digitIndex = 0;\n\n    if(formatDigits.length != digits.length) {\n        return value;\n    }\n\n    for (const char of format) {\n        if (char === 'x' && digitIndex < digits.length) {\n            formattedValue += digits[digitIndex++];\n        } else if (char !== 'x') {\n            formattedValue += char;\n        }\n    }\n\n    return formattedValue;\n}\nfunction reverseFormat(formattedValue: string, format: string): string {\n    const actualValue: string[] = [];\n    let formatIndex = 0;\n\n    for (const char of formattedValue) {\n        while (format[formatIndex] && format[formatIndex] !== 'x') {\n            formatIndex++;\n        }\n        if (format[formatIndex] === 'x') {\n            actualValue.push(char); \n            formatIndex++;\n        }\n    }\n\n    return actualValue.join('');\n}\n\nfunction removeSpecialCharsFromNumber(input : any) {\n    const inputString = String(input);\n    return inputString.replace(/[^\\d]/g, \"\");\n  }\n\n\nexport {\n    PHONE_NUMBER_FORMATS,\n    DELIMITERS,\n    validateAndFormatPhoneNumber,\n    reverseFormat,\n    removeSpecialCharsFromNumber\n}\n\n\n","import { AutoWired, BEAN_NAME,  setAriaDisabled,  setAriaLabel } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { TextComponentType } from \"./text-root-types\";\nimport { TextOptionsHandlerTypes } from \"../model/text-options-handler.types\";\nimport { useUtilityClasses } from \"./text-root-classes\";\nimport { getFormattedValue, getReggexPattern, OwnerStateType } from \"../utility\";\nimport { TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { TextControllerHandler } from \"../model/text-controller\";\nimport { ITextConfiguration } from \"../../text-configuration.types\";\nimport { removeSpecialCharsFromNumber, validateAndFormatPhoneNumber } from \"../customformatter\";\nimport type { TextStateManager } from \"../model/text-state-manager\";\n\nclass TextRootController extends AbstractController<TextComponentType> {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionHandler !: TextOptionsHandlerTypes;\n\t@AutoWired(TEXT_BEAN_NAME.TEXT_CONTROLLER_HANDLER) controllerHandler !: TextControllerHandler;\n    @AutoWired('stateManager') private stateManager !: TextStateManager;\n\n\n    init(): void {\n        this.registerEvent();\n        this.controllerHandler.registerTextCtrl(this);\n        this.applyClasses();\n        this.setAccessibility();\n        this.addErrorClassName();\n        this.updateRTL();\n\n    }\n\n    private updateRTL() : void {\n        const element = this.component?.getElement();\n\n        if(element) {\n            element.setAttribute('dir', this.optionHandler.isRTL() ? 'rtl' : 'ltr');\n        }\n    }\n    registerEvent(){\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n    }\n\n    private addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.component!.getElement().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n\n    private valueUpdater() : void { \n       const rootElement = this.getRootElement(); \n       rootElement && (rootElement.value = '');\n       const newValue =  this.optionHandler.getValue();\n       const regex =  this.optionHandler.getPattern();\n       const format =  this.optionHandler.getFormat();\n       const customFormat =  this.optionHandler.getCustomPattern();\n       if(((typeof regex == 'string') && (regex == 'number'))&& customFormat) {\n            const formattedValue = validateAndFormatPhoneNumber(newValue,customFormat)\n           if(rootElement &&formattedValue ){\n                this.setRootValue(rootElement, formattedValue);\n           }\n       }\n       else{\n        rootElement && this.setRootValue(rootElement, newValue);\n       }\n       if(format === 'none'){\n        rootElement && this.setRootValue(rootElement, this.optionHandler.getDefaultValue());\n    }\n    }\n\n    setRootValue(element : HTMLInputElement, value : string | number) : void {\n      if(element){\n        element.value = value.toString()\n      }\n    }\n    getElement() : HTMLElement  | undefined{\n        return this.component?.getElement();\n    }\n\n    getRootElement() {\n        return this.component?.getInputElement();\n    }\n\n    getValue() : string | number {\n        const regex =  this.optionHandler.getPattern();\n        const customFormat =  this.optionHandler.getCustomPattern();\n        if(((typeof regex == 'string') && (regex == 'number'))&& customFormat) {\n            const value  = this.getFormattedValue() ?? '';\n            return removeSpecialCharsFromNumber(value);\n        }\n        else{\n            return this.getFormattedValue() ?? '';\n        }\n    }\n    \n    private applyClasses() {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.component?.addOrRemoveCssClassName(classes.root);\n        this.component?.getElement().classList.add('dg-field__root');\n        this.addUserClass();\n    }\n\n    private addUserClass(){\n        const className = this.optionHandler?.getClassName();\n        if(className){\n            if(Array.isArray(className)){\n                className.forEach(c => this.component?.getElement()?.classList.add(c));\n            }else{\n                this.component?.getElement()?.classList.add(className);\n            }\n        }\n    }\n\n    private setAccessibility() : void { \n        const inputElement         = this.component?.getInputElement()\n        const ariaLabel       = this.optionHandler.getAriaLabel();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n\n    private getOwnerState() : OwnerStateType {\n        const selected = this.optionHandler.isSelected();\n        const disabled = this.optionHandler.isDisabled();\n        const readonly = this.optionHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readonly\n        }\n    }\n\n    setValue(value :  string |  number) : void{\n        this.optionHandler.updateTextValue(value);\n        this.valueUpdater()\n    }\n    updateMinValue() {\n        const rootElement = this.getRootElement();\n        if(rootElement){\n            rootElement.setAttribute('aria-min',`${this.optionHandler.getMinCount()}`);\n        }\n    }\n    updateMaxValue() {\n        const rootElement = this.getRootElement();\n        const maxCount     = this.optionHandler.getMaxCount();\n        if (maxCount && rootElement) {\n            rootElement.setAttribute('aria-max',`${maxCount}`);\n        }\n    }\n\n    updatePlaceholder(options ?: any) {\n        const rootElement = this.getRootElement();\n        if(rootElement){\n             if(options?.placeholder === null){\n                rootElement.placeholder = ''\n            }\n            else{\n                rootElement.placeholder = this.optionHandler.getPlaceHolder();\n            }\n        }\n        // (rootElement) && (rootElement.placeholder = this.optionHandler.getPlaceHolder());\n    }\n    updateAriaLabel() {\n        const ariaLabel       = this.optionHandler.getAriaLabel();\n        const inputElement         = this.getRootElement();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n    updateDisabled() {\n        const isDisabled =  this.optionHandler.isDisabled();\n       this.disable(isDisabled)\n    }\n    updateReadOnly() {\n        const isReadOnly =  this.optionHandler.isReadOnly();\n        const element = this.getRootElement();\n        if (element) {\n            element.readOnly = isReadOnly;\n        }\n    }\n    updateValue() {\n        const value =  this.optionHandler.getValue() ?? this.optionHandler.getDefaultValue();\n        const element = this.getRootElement();\n        if(element) {\n            const format =  this.optionHandler.getFormat();\n            const formattedText =  getFormattedValue(value,format);\n            element.value = formattedText;\n            if(format === 'none'){\n                element.value = this.optionHandler.getDefaultValue();\n            }\n        };\n        this.optionHandler.updateTextValue(value);\n        this.valueUpdater()\n    }\n\n    updateRequired(){\n        const isRequired        = this.optionHandler.isRequired();\n        const rootElement       = this.getRootElement() as HTMLInputElement;\n        if (rootElement) {\n            rootElement.setAttribute('aria-required', `${isRequired}`)\n            this.dispatchEvent({ type: 'PROPERTY_CHANGED' , force : true});\n        }\n    }\n    refresh(options ?: object) {\n        this.updateMinValue();\n        this.updateMaxValue();\n        this.updatePlaceholder(options);\n        this.updateAriaLabel();\n        this.updateDisabled();\n        this.updateRequired();\n        this.updateAriaLabel();\n        this.updateValue();\n        this.updateLabel();\n        this.updateDescription(options);\n        this.updatePrefix();\n        this.updateSuffix();\n        this.updateRTL();\n        this.addPrefixAndSuffixClassNames();\n    }\n\n    updatePrefix(){\n        const textContainer =  this.getElement()?.querySelector('.dg-text__container')\n        const prefixElement = textContainer?.querySelector('.dg-prefix-elem');\n        const prefixValue =  this.optionHandler.getPrefixValue();\n        if (prefixElement &&(typeof prefixValue === 'string')) {\n            prefixElement.textContent = prefixValue;\n          } \n    }\n\n    updateSuffix() {\n\n        const textContainer =  this.getElement()?.querySelector('.dg-text__container')\n        const suffixElement = textContainer?.querySelector('.dg-suffix-elem');\n        const suffixValue =  this.optionHandler.getSuffixValue();\n        if (suffixElement &&(typeof suffixValue === 'string')) {\n            suffixElement.textContent = suffixValue;\n          } \n\n    }\n    updateLabel() {\n        const label =  this.getElement()?.querySelector('label');\n        const spanElement =  label?.querySelector('span');\n        if(label && spanElement) {\n            const labelText =  this.optionHandler.getLabel();\n            spanElement.textContent =  labelText\n        }\n    }\n\n    updateDescription(options ?: any){\n        const description =  this.getElement()?.querySelector('.dg-field__description');\n        if(description) {\n            const descriptionText =  this.optionHandler.getDescription();\n            // description.textContent =  descriptionText\n            if(options?.description === null){\n                description.textContent = ''\n            }\n            else{\n                description.textContent =  descriptionText\n            }\n        }\n    }\n    updateProperty(options : ITextConfiguration, _force ?: boolean){\n        this.optionHandler.updateProperty(options);\n        this.dispatchEvent({\n            type : 'EVENT_TEXT_PROPERTIES_UPDATED'\n        })\n        this.applyClasses();\n        this.refresh(options);\n    }\n    disable(value: boolean): void {\n        const element = this.component?.getInputElement();\n        const inputWrapper = element?.parentElement;\n        const rootElement = this.component?.getElement();\n        if (!element || !inputWrapper) return;\n    \n        rootElement!.classList.toggle('dg-input__status--disabled', value);\n        element.classList.toggle('dg-text__input--disabled', value);\n        inputWrapper.classList.toggle('dg-text__input-wrapper--disabled', value);\n        element.disabled = value;\n    \n        this.optionHandler.setDisabled(value);\n        setAriaDisabled(element, value);\n    }\n    \n    getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-text__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-text__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-text__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-text__description\"\n\t\t\t}\n\t\t};\n    }\n    resetValue(){\n        const initialValue = this.optionHandler.getDefaultValue();\n        const element = this.getRootElement();\n        if (element) element.value = initialValue.length > 1 ? initialValue : '';\n        this.setValue(initialValue.length > 1 ? initialValue : '');\n    }\n\n\n   \n\n    hide(subElements?: string[]): void {\n        const element = this.getElement();\n        if (!element) return;\n    \n        if (!subElements?.length) {\n            element.style.display = 'none';\n            return;\n        }\n    \n        const actions: Record<string, () => void> = {\n            label: this.hideLabel.bind(this),\n            description: this.hideDescription.bind(this),\n            prefix: this.hidePrefix.bind(this),\n            suffix: this.hideSuffix.bind(this),\n        };\n    \n        subElements.forEach(sub => actions[sub]?.());\n    }\n    \n    show(subElements?: string[]): void {\n        const element = this.getElement();\n        if (!element) return;\n    \n        if (!subElements?.length) {\n            element.style.display = 'block';\n            return;\n        }\n    \n        const actions: Record<string, () => void> = {\n            label: this.showLabel.bind(this),\n            description: this.showDescription.bind(this),\n            prefix: this.showPrefix.bind(this),\n            suffix: this.showSuffix.bind(this),\n        };\n    \n        subElements.forEach(sub => actions[sub]?.());\n    }\n    \n    hideLabel(){\n        const label = this.getElement()?.querySelector('.dg-field__label') as HTMLElement;\n        label && (label.style.display='none')\n    }\n    hideDescription(){\n        const description = this.getElement()?.querySelector('.dg-field__description') as HTMLElement;\n        description && (description.style.display = 'none');\n    }\n    hideSuffix(){\n        const suffixElement = this.getElement()?.querySelector('.dg-suffix-elem') as HTMLElement;\n        suffixElement && (suffixElement.style.display ='none')\n    }\n    hidePrefix(){\n        const prefixElement = this.getElement()?.querySelector('.dg-prefix-elem')  as HTMLElement;\n        prefixElement && (prefixElement.style.display = 'none');\n    }\n    showLabel(){\n        const label = this.getElement()?.querySelector('.dg-field__label') as HTMLElement;\n        label && (label.style.display='block')\n    }\n    showDescription(){\n        const description = this.getElement()?.querySelector('.dg-field__description') as HTMLElement;\n        description && (description.style.display = 'block')\n    }\n    showSuffix(){\n        const suffixElement = this.getElement()?.querySelector('.dg-suffix-elem') as HTMLElement;\n        suffixElement && (suffixElement.style.display ='block')\n    }\n    showPrefix(){\n        const prefixElement = this.getElement()?.querySelector('.dg-prefix-elem')  as HTMLElement;\n        prefixElement && (prefixElement.style.display = 'block');\n    }\n\n    clear() :  void {\n        this.setValue('')\n    }\n    isValid() :  boolean{\n        const regex = this.optionHandler.getPattern();\n        const inputElement = this.getRootElement();\n        let validState = true;\n        if (inputElement) {\n            const { value = '' } = inputElement;\n            const inputLength = value.length;\n            const minCount = this.optionHandler.getMinCount();\n            const maxCount = this.optionHandler.getMaxCount();\n            const pattern = getReggexPattern(regex as RegExp);\n\n            if (pattern && !pattern.test(value)) {\n                validState = false;\n            }\n            if (inputLength < minCount || (maxCount && inputLength > maxCount)) {\n                validState = false;\n            }\n        }\n        return validState;\n\n    }\n\n    getFormattedValue() : string {\n        return this.getRootElement()?.value ?? '';\n    }\n\n    private addPrefixAndSuffixClassNames(){\n\t\tconst prefix = this.optionHandler.getPrefixValue() || this.optionHandler.getPrefixRenderer();\n\t\tconst suffix = this.optionHandler.getSuffixValue() || this.optionHandler.getSuffixRenderer();\n\n\t\tif(prefix){\n\t\t\tthis.component?.getElement().classList.add(\"dg-field__prefix--active\");\n\t\t}\n\t\tif(suffix){\n\t\t\tthis.component?.getElement().classList.add(\"dg-field__suffix--active\");\n\t\t}\n\t}\n}\n\nexport {\n    TextRootController\n}","\nimport { AutoWired, BEAN_NAME, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { TextComponentType } from \"./text-root-types\";\nimport { inputWrapper, rootTemplate } from \"../utility\";\nimport { TextRootController } from \"./text-root-controller\";\nimport { TextOptionsHandlerTypes } from \"../model/text-options-handler.types\";\n\n\nclass TextRootComponent  extends Component{\n    private componentHolder : HTMLElement |  null;\n    @queryAssignedNodes(inputWrapper) private inputTags :any;\n  \n\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: TextOptionsHandlerTypes;\n    constructor(appendTo ?: HTMLElement) {\n\n        super();\n       this.componentHolder = appendTo ?? null;\n    }\n\n    @PostConstruct()\n    init() : void {\n\n        const component : TextComponentType = {\n            addOrRemoveCssClassName : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement : () => this.getGui(),\n            getInputElement :() => {  return  this.inputTags.inputElement}\n\n        }\n        const controller = this.createManagedBean(new TextRootController());\n\n        const props ={\n            label : this.optionHandler?.getLabel().length  >0,\n            helper: this.optionHandler?.getDescription().length > 0,\n            rtl   : this.optionHandler.isRTL(),\n            prefix: this.optionHandler.isPrefixRenderer(),\n            suffix: this.optionHandler.isSuffixRenderer(),\n            error : this.optionHandler.isShowErrorState()\n        }\n\t\tconst properties = controller.getParamsProperty();\n        const emptyDom =  this.shouldGenerateEmptyDom();\n        const template = rootTemplate(props,emptyDom)\n        this.setTemplate(template, {\n\t\t\tlabel : properties.label,\n\t\t\tdescription : properties.description,\n            error : properties.description\n\t\t});\n        controller.setComponent(component);\n\n        this.appendElementIntoUserDom();\n    }\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n    private shouldGenerateEmptyDom(){\n\t\tconst generateEmptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\treturn generateEmptyDom\n\t}\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.componentHolder && this.componentHolder.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.componentHolder && this.componentHolder.removeChild(eGui);\n\t\t\tthis.componentHolder = null;\n\t\t});\n\t}\n\n}\n\nexport {\n    TextRootComponent\n}","import { ICustomReggexType } from \"./core/model/text-options-handler.types\";\n\n\ninterface ISize {\n    size ?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\nconst textLineFormatter ={\n    none   : \"none\" ,\n    capitalize : \"capitalize\" ,\n    lower : \"lower\" ,\n    upper : \"upper\" ,\n    sentence : \"sentence\"\n}\nexport interface IRenderer {\n\tgetElement()       : HTMLElement;\n\tinit(params:object): void;\n\tdestroy()          : void;\n}\n\nexport interface IOnChangeEventParams {\n    oldValue: string;\n    newValue: string;\n    eventOrigin ?: 'api' | 'ui';\n}\n\ninterface ITextConfiguration {\n\n    appendTo ?:  HTMLElement,\n    instanceID ?: string,    \n    clearButton ?   : boolean |  string | HTMLElement,\n    bordered ?        : 'none' | 'outline' | 'standard' | 'filled',\n    format ?: string,\n    label ?: string,\n    ariaDescribedby  ?: string;\n    ariaLabelledBy ?: string, \n\n    // className ?: , // need to discuss\n\n\n\n    \n    // commmon API's \n    value             ?: string , // need to discuss\n    defaultValue      ?: string,\n    readonly          ?: boolean,\n    disabled          ?: boolean,\n    size              ?: ISize,\n    validator         ?: CallableFunction,\n    validationMessage ?: string,\n    required          ?: boolean,\n    name              ?: string,  // need to discuss\n    allowNull         ?: boolean, // need to discuss\n    placeholder       ?: string,\n    title             ?: string,\n\n    ariaLabel            ?: string,\n    description          ?: string,\n    prefix               ?: boolean |  string | HTMLElement,\n    prefixRenderer       ?: { new(): IRenderer } | undefined ,\n    prefixRendererParams ?: object,\n    suffix               ?: boolean |  string | HTMLElement,\n    suffixRenderer       ?: { new(): IRenderer } | undefined ,\n    suffixRendererParams ?: object,\n\n    // descriptionRenderer ?: { new(): IRenderer }; // need to discuss\n    descriptionRenderer ?: {}; // need to discuss\n    descriptionRendererParams       ?: object,\n    validationMessageRenderer    ?: { new(): IRenderer }; // need to discuss\n    validationMessageRendererParams ?: object,\n    className                       ?: string[] | string,   // need to discuss\n\n\n    rtl ?:  boolean,\n\n    \n    // Text Component Based API //\n    showCount         ?: boolean,\n    min               ?: number,\n    max               ?: number,\n    pattern           ?: RegExp | ICustomReggexType | null ,\n    clampValueOnBlur  ?: boolean,\n    keepWithInRange   ?: boolean,\n    characterCase     ?:  string,\n    addonBefore       ?: string |  number,\n    addonAfter        ?: string |  number,\n\n    //Events API\n    onChange            ?: ((oldValue: string, newValue: string, eventOrigin?: 'api' | 'ui') => void) | ((params: IOnChangeEventParams) => void),\n    onInput             ?: CallableFunction,\n    onFocus             ?: CallableFunction,\n    onBlur              ?: CallableFunction,\n    onBeforeValidation  ?: CallableFunction,\n    onAfterValidation   ?: CallableFunction,\n    onError             ?: CallableFunction, \n    \n    onKeyDown     ?: CallableFunction,\n    ignoreEmptyDOM ?: boolean,\n\n    customPattern ?: string\n    \n    showErrorState ?: boolean;\n    status ?: 'error' | \"none\";\n\n    labelRenderer ?: { new(): IRenderer } | undefined;\n    labelRendererParams ?: object;\n\n\n}\ntype ITextConfigurationKeys = keyof ITextConfiguration;\nfunction pickKeysFromInterface(keys: ITextConfigurationKeys[]): ITextConfigurationKeys[] {\n    return keys;\n}\n\nconst configArray = [\n    'appendTo',\n    'instanceID',\n    'clearButton',\n    'bordered',\n    'format',\n    'label',\n    'invalidHelperTextRendererParams',\n    'invalidHelperTextRenderer',\n    'ariaDescribedby',\n    'ariaLabelledBy',\n    'value',\n    'readonly',\n    'disabled',\n    'size',\n    'validator',\n    'validationMessage',\n    'required',\n    'name',\n    'allowNull',\n    'placeholder',\n    'title',\n    'ariaLabel',\n    'description',\n    'prefix',\n    'prefixRenderer',\n    'prefixRendererParams',\n    'suffix',\n    'suffixRenderer',\n    'suffixRendererParams',\n    'descriptionRenderer',\n    'descriptionRendererParams',\n    'validationMessageRenderer',\n    'validationMessageRendererParams',\n    'className',\n    'rtl',\n    'showCount',\n    'min',\n    'max',\n    'pattern',\n    'clampValueOnBlur',\n    'keepWithInRange',\n    'characterCase',\n    'addonBefore',\n    'addonAfter',\n    'onChange',\n    'onInput',\n    'onFocus',\n    'onBlur',\n    'onBeforeValidation',\n    'onAfterValidation',\n    'onError',\n    'onKeyDown',\n    'customPattern',\n    'defaultValue',\n    'labelRenderer',\n    'labelRendererParams'\n];\n\n\n\nexport {\n    ITextConfiguration,\n    textLineFormatter,\n    pickKeysFromInterface,\n    configArray\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ICustomReggexType, IErrorMeta, IInputMeta, TextOptionsHandlerTypes } from \"./text-options-handler.types\";\nimport { configArray, IRenderer, ITextConfiguration, IOnChangeEventParams } from \"../../text-configuration.types\";\nimport { TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { ITextAPI } from \"./text-api.types\";\nimport { getFormattedValue } from \"../utility\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nclass TextOptionHandler extends EventEmitter implements TextOptionsHandlerTypes{\n \n  \n    @AutoWired(TEXT_BEAN_NAME.TEXT_CONFIGURATION) configuration !: ITextConfiguration;\n\t@AutoWired(TEXT_BEAN_NAME.TEXT_API) api!: ITextAPI;\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n    isSelected(): boolean {\n       return false\n    }\n    isReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n    getLabel(): string {\n        return this.configuration.label ?? \"\";\n    }\n\n    getAriaLabelledby(){\n        return this.configuration.ariaLabelledBy ?? \"\";\n    }\n\n    getAriaLabel(): string {\n        return this.configuration.ariaLabel ?? \"\";\n    }\n    onFocus(event: FocusEvent): void  {\n        this.configuration.onFocus?.(event);\n    }\n    onBlur(event: FocusEvent): void {\n        this.configuration.onBlur?.(event);\n    }\n    \n    getAppendTo(): HTMLElement  | null{\n        return this.configuration.appendTo ?? null\n    }\n    getVariant() {\n       return this.configuration.bordered ?? 'none'\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n    getMinCount() :  number{\n        return  this.configuration.min?? 0\n    }\n    getMaxCount() :  number | null {\n        return this.configuration.max ??  null;\n    }\n\n    getDefaultValue(): string {\n        return this.configuration.value ?? \"\"\n    }\n    getPlaceHolder(): string {\n        return this.configuration.placeholder ?? \"\";\n    }\n\n    onInput(eventMeta : IInputMeta): void {\n        this.configuration.onInput?.(eventMeta);\n    }\n\n    onError(errorMeta: IErrorMeta): void {\n        this.configuration.onError?.(errorMeta)\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        this.configuration.onKeyDown?.(event)\n    }\n\n\n    onChange(oldValue :  string , newValue :  string, eventOrigin ?: 'api' | 'ui') {\n        if (this.configuration.onChange) {\n            const params: IOnChangeEventParams = {\n                oldValue,\n                newValue,\n                eventOrigin\n            };\n            if (this.configuration.onChange.length === 1) {\n                (this.configuration.onChange as (params: IOnChangeEventParams) => void)(params);\n            } else {\n                (this.configuration.onChange as (oldValue: string, newValue: string, eventOrigin?: 'api' | 'ui') => void)(params.oldValue, params.newValue, params.eventOrigin);\n            }\n        }\n    }\n    \n    getDescription() :string {\n        return this.configuration.description ?? \"\";\n    }\n    getDescriptionRenderer() {\n        return this.configuration.descriptionRenderer ?? '';\n    }\n    getDescriptionRendererParams() {\n        return this.configuration.descriptionRendererParams ?? '';\n    }\n    getValidationMessage(): string {\n        return this.configuration.validationMessage ?? '';\n    }\n    getAriaDescribedby(): string {\n        return this.configuration.ariaDescribedby ?? '';\n    }\n    showTotal(): boolean {\n        return this.configuration.showCount ?? false;\n    }\n    getFormat(): string {\n        return this.configuration.format ?? 'none';\n    }\n\n    setMaxCount(maxCount: number): void {\n        this.configuration.max= maxCount;\n    }\n   \n    isRTL(): boolean {\n        return this.configuration.rtl ?? false;\n    }\n\n    updateTextValue(value: string | number): void {\n        if(this.configuration?.format !== 'none' && (this.configuration.defaultValue?.length != value.toString().length)){\n            this.configuration.defaultValue = value.toString();\n        }\n        this.configuration.value = this.configuration?.format ? getFormattedValue(value.toString(), this.configuration.format): value.toString();\n        this.dispatchEvent({\n            type : 'EVENT_VALUE_UPDATE'\n        })\n    }\n\n    getValue(): string {\n        return this.configuration.value ?? \"\";\n    }\n    setDisabled(value: boolean): void {\n        this.configuration.disabled = value;\n    }\n    getPrefixValue(): string | number | HTMLElement | null {\n        const prefix = this.configuration.prefix;\n    \n        switch (typeof prefix) {\n            case 'boolean':\n                return prefix ? 'PR' : '';\n            case 'string':\n                return prefix;\n            default:\n                if (prefix instanceof HTMLElement) {\n                    return prefix;\n                } else {\n                    return '';\n                }\n        }\n    }\n    getSuffixValue(): string | number | HTMLElement | null{\n        const suffix = this.configuration.suffix;\n    \n        switch (typeof suffix) {\n            case 'boolean':\n                return suffix ? 'SR' : '';\n    \n            case 'string':\n                return suffix;\n    \n            default:\n                if (suffix instanceof HTMLElement) {\n                    return suffix;\n                } else {\n                    return '';\n                }\n        }\n    }\n\n     getPrefixRenderer(): { new(): IRenderer } | undefined {\n            return this.configuration.prefixRenderer;\n    }\n\n    getPrefixRendererParams(): object | undefined {\n        return this.configuration.prefixRendererParams;\n    }\n\n    getSuffixRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.suffixRenderer;\n    }\n\n    getSuffixRendererParams(): object | undefined {\n        return this.configuration.suffixRendererParams;\n    }\n    \n    isPrefixRenderer(): boolean {\n        return Boolean(this.configuration.prefix)\n    }\n    isSuffixRenderer(): boolean {\n        return Boolean(this.configuration.suffix)\n    }\n    updateProperty(options: ITextConfiguration) {\n        const userProperty = Object.keys(options);\n        for(let i = 0; i < userProperty.length; i++){\n            const userKey = userProperty[i]\n            const isValidProperty = configArray.includes(userKey);\n            if(isValidProperty ||  userKey == 'format'){\n                if(userKey === 'value' && (this.configuration as any)[userKey] !== (options as any)[userKey]) {\n                    this.onChange(this.getValue(), (options as any)[userKey] as string, 'api');\n                }\n                (this.configuration as any)[userKey] = userKey === 'value' ? (options as any)[userKey] : (options as any)[userKey];\n            }  else {\n                console.warn(`Invalid property ${userKey} in options. Ignoring.`);\n            }\n        }\n    }\n\n    getPattern(): RegExp | ICustomReggexType | null {\n        return this.configuration.pattern ?? null;\n    }\n\n    getCustomPattern(): string | null {\n        return this.configuration?.customPattern ?? null;\n    }\n\n    getClassName(): string | string[] | null {\n        return this.configuration?.className ?? null;\n    }\n\n    shouldGenerateEmptyDom(): boolean {\n        return this.configuration?.ignoreEmptyDOM !== undefined\n            ? !this.configuration.ignoreEmptyDOM\n            : false;\n    }\n\n    getKeepWithInRange(): boolean {\n        return this.configuration?.keepWithInRange ??  true;\n    }\n\n    getClampValueOnBlur(): boolean {\n        return this.configuration?.clampValueOnBlur ?? false;\n    }\n\n    showErrorState() : string {\n        return 'Error Message';\n    }\n\n    getValidationMessageRenderer(){\n        return this.configuration.validationMessageRenderer;\n    }\n\tgetUserRendererParams (){\n        return 'Memo Express'\n    }\n\n    isInValid(){\n        const value = this.getValue();\n        const minCount =  this.getMinCount();\n        const maxCount =  this.getMaxCount();\n        const length = value.toString().length;\n        return maxCount ? length < minCount || length > maxCount :  false;\n\n    }\n\n    isShowErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n\n}\n\nexport {\n    TextOptionHandler\n}\n\n\n\n\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TextOptionsHandlerTypes } from \"./text-options-handler.types\";\nimport { getReggexPattern } from \"../utility\";\n\n@Bean('stateManager')\n class TextStateManager extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: TextOptionsHandlerTypes;\n\n    isInValid() : boolean {\n        const isValid  = this.optionHandler.isValid();\n        const value    = this.optionHandler.getValue() ?? this.optionHandler.getDefaultValue();\n        const minCount = this.optionHandler.getMinCount();\n        const maxCount = this.optionHandler.getMaxCount();\n        const length   = value.length;\n        const regex = this.optionHandler.getPattern();\n\n        // const required = this.optionHandler.isRequired();\n        // if (required && !this.isValuePresent(value)) {\n        //     return true;\n        // }\n        const pattern = getReggexPattern(regex as RegExp);\n\n        if (pattern && !pattern.test(value)) {\n            return false;\n        }\n        return isValid || (maxCount ? length < minCount || length > maxCount :  false);\n    }\n\n    isValuePresent(value : string) {\n        return value !== null && value !== undefined && value !== '';\n    }\n}\nexport {\n    TextStateManager\n}","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { TextUserComponentHandlerTypes } from \"./text-user-component-handler.types\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport {  IComponentDetails, UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { ILabelUserComponentHandler } from \"../../../../label/label.types\";\n\n\nexport const enum PropertyName {\n\tHELPER_TEXT_RENDERER = 'helpTextRenderer',\n\tERROR_RENDERER       = \"errorRenderer\",\n\tPREFIX_RENDERER      = \"prefixRenderer\",\n\tSUFFIX_RENDERER      = 'suffixRenderer',\n\tLABEL_RENDERER       = 'labelRenderer'\n\n}\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class TextUserComponentHandler extends UserComponentHandler implements TextUserComponentHandlerTypes, ILabelUserComponentHandler{\n\t\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\n\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n\tgetSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetail( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\t\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta{\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.SUFFIX_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, _params : any) : any {\n        switch(propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.SUFFIX_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getUserRendererParams();\n            default:\n                return {};\n        }\n\n    }\n\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME, setAriaDescribedBy, setAriaDisabled, setAriaInvalid, setAriaLabel, setAriaLabelledBy, setAriaReadOnly, setAriaRequired } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { TextOptionsHandlerTypes } from \"../model/text-options-handler.types\";\nimport { TextInputCompType } from \"./text-input.types\";\nimport { OwnerStateType,  } from \"../text-root/text-root-classes\";\nimport { getFormattedValue, getReggexPattern, getTextUtilityClass } from \"../utility\";\nimport { validateAndFormatPhoneNumber } from \"../customformatter\";\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'input-wrapper',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getTextUtilityClass );\n};\n\nclass TextInputController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: TextOptionsHandlerTypes;\n    private component !: TextInputCompType;\n    private oldValue : string | null = null;\n    setComp(comp : TextInputCompType ) {\n        this.component    = comp;\n        this.applyClasses();\n        this.setValue();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n        this.registerAdjusterEventHandler();\n    }\n\n    private applyClasses() : void {\n        const ownerState    = this.getOwnerState();\n        const classes       = useUtilityClasses(ownerState);\n        this.component.addOrRemoveCSSClass(classes.root);\n        this.component.getElement().classList.add('dg-field__input-wrapper');\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadOnly()\n\t\t}\n\t}\n\n    private registerEventHandler() {\n        const inputElement = this.component.getInputElement();\n        this.addListener(inputElement, 'blur', this.onBlur.bind(this));\n        this.addListener(inputElement, 'focus', this.onFocus.bind(this));\n        this.addListener(inputElement, 'keydown', this.onKeydown.bind(this))\n        this.addListener(inputElement, \"input\", this.onInput.bind(this));\n        this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.setRequired.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_TEXT_PROPERTIES_UPDATED', this.setAccessibility.bind(this));\n    }\n\n    private setAccessibility() : void {\n        this.setAriaAttributes();\n        this.assignValueBoundaries();\n    }\n\n    private assignValueBoundaries() :  void {\n        const wrapperElement    = this.component.getElement();\n        const inputElement      = this.component.getInputElement();\n        const minCount          = this.optionsHandler.getMinCount();\n        const maxCount          = this.optionsHandler.getMaxCount();\n        const placeHolder       = this.optionsHandler.getPlaceHolder();\n        const value             = this.optionHandler.getValue() ?? this.optionsHandler.getDefaultValue();\n        const isDisabled        = this.optionsHandler.isDisabled();\n        const isReadOnly        = this.optionsHandler.isReadOnly();\n        inputElement.setAttribute('aria-min',`${minCount}`);\n        const format            = this.optionHandler.getFormat();\n        const customFormat      = this.optionHandler.getCustomPattern();\n        const regex             = this.optionHandler.getPattern();\n\n        if(((typeof regex == 'string') && (regex == 'number'))&& customFormat) {\n            const formattedValue =  validateAndFormatPhoneNumber(value,customFormat);\n            formattedValue ? inputElement.value = formattedValue :  null;\n        }\n        else{\n            const formattedText =  getFormattedValue(value,format);\n            inputElement.value =  formattedText;\n        }\n\n        inputElement.disabled     = isDisabled;\n        inputElement.readOnly     = isReadOnly;\n        this.setRequired();\n\n        placeHolder && (inputElement.placeholder  = placeHolder);\n        this.optionHandler.setMaxCount(maxCount ?? 999);\n        inputElement.setAttribute('aria-max',`${maxCount}`);\n        wrapperElement.classList.toggle('dg-input__status--disabled', isDisabled);\n        wrapperElement.classList.toggle('dg-input__status--read-only', isReadOnly);\n    }\n\n\n\n    private setAriaAttributes() : void {\n        const element   = this.component.getInputElement();\n        const inputLength = element.value.length;\n        const minCount = this.optionHandler.getMinCount();\n        this.setRequired();\n\n        setAriaDisabled(element, this.optionHandler.isDisabled());\n        setAriaReadOnly(element, this.optionHandler.isReadOnly());\n        setAriaLabel(element, this.optionHandler.getAriaLabel());\n        setAriaLabelledBy(element, this.optionHandler.getAriaLabelledby());\n        setAriaDescribedBy(element, this.optionHandler.getAriaDescribedby());\n        setAriaInvalid(element, inputLength < minCount ? 'true' : 'false');\n    }\n    private setRequired(){\n        const element   = this.component.getInputElement();\n        setAriaRequired(element, this.optionHandler.isRequired());\n    }\n\n    private setValue() : void {\n        this.setAccessibility();\n    }\n\n    private registerAdjusterEventHandler() {\n    }\n\n    updateProperty(){\n        const ownerState = this.getOwnerState();\n        this.applyClasses();\n        this.setAccessibility();\n        this.optionsHandler.updateProperty(ownerState);\n    }\n\n   private onInput(event: InputEvent): void {\n        const inputElement    = this.component.getInputElement();\n        const isRequired      = this.optionsHandler.isRequired();\n        const currentLength   = inputElement.value.length;\n        const maxCount        = this.optionsHandler.getMaxCount();\n        const minCount        = this.optionsHandler.getMinCount();\n        const keepWithinRange = this.optionsHandler.getKeepWithInRange();\n        const regex           = this.optionHandler.getPattern();\n        const value           = inputElement.value;\n        const pattern         = getReggexPattern(regex as RegExp);\n        const ownerState      = this.getOwnerState();\n        const customFormat    = this.optionHandler.getCustomPattern();\n       \n        \n        if (ownerState.readonly || ownerState.disabled) return;\n        \n        if (value.length > 0 && pattern && !pattern.test(value)) {\n            this.optionHandler.onError({type :  'validation',event : event})\n            event.preventDefault();\n            inputElement.value = value.slice(0, -1);\n        }\n        \n        if (keepWithinRange && currentLength > maxCount) {\n            this.optionHandler.onError({type :  'max',event : event})\n            inputElement.value = value.slice(0, maxCount);\n        }\n        \n        if (inputElement.value.length && isRequired) {\n            inputElement.setCustomValidity('');\n            inputElement.reportValidity();\n        }\n        \n        if (typeof regex === 'string' && regex === 'number' && customFormat) {\n            const formattedValue = validateAndFormatPhoneNumber(value, customFormat);\n            if (formattedValue){ \n                inputElement.value = formattedValue\n            }\n        }\n         else {\n            const format = this.optionHandler.getFormat();\n            const formattedText = getFormattedValue(inputElement.value, format);\n            inputElement.value = formattedText;\n        }\n        \n        const wrapperElement = this.component.getElement();\n        wrapperElement.classList.toggle(\n        'dg-input__status--error',\n        inputElement.value.length > maxCount || inputElement.value.length < minCount\n        );\n        \n        this.optionsHandler.onInput({ event, value: inputElement.value });\n\n        this.optionHandler.updateTextValue(inputElement.value)\n    }\n\n    private onBlur(event: FocusEvent): void {\n        const inputElement     = this.component.getInputElement();\n        const minCount         = this.optionsHandler.getMinCount();\n        const maxCount         = this.optionsHandler.getMaxCount();\n        const clampValueOnBlur = this.optionsHandler.getClampValueOnBlur();\n        const inputLength      = inputElement.value.length;\n        const isRequired       = this.optionsHandler.isRequired();\n        const ownerState       = this.getOwnerState();\n        \n        if (ownerState.readonly || ownerState.disabled) {\n            return;\n        }\n        \n        if (!inputElement.value && isRequired) {\n            inputElement.reportValidity();\n        }\n        \n        if (inputLength < minCount) {\n            this.optionHandler.onError({type :  'min',event : event})\n            setAriaInvalid(inputElement, 'true');\n        } else {\n            setAriaInvalid(inputElement, 'false');\n        }\n        \n        if (clampValueOnBlur && inputLength > maxCount) {\n            const value = inputElement.value.slice(0, maxCount)\n            inputElement.value = value;\n            this.optionHandler.updateTextValue(value);\n            this.optionHandler.onError({type :  'max',event : event})\n        }\n\n\n        this.optionsHandler.onBlur(event);\n        (this.oldValue !== inputElement.value) &&  this.optionHandler.onChange(this.oldValue as string, inputElement.value, 'ui');\n        this.oldValue = null;\n        const rootElement = this.optionsHandler.api.getElement();\n        rootElement.classList.remove('dg-input__status--focus');\n    }\n\n\n    private onFocus(event: FocusEvent): void {\n        const ownerState = this.getOwnerState();\n        if(ownerState.readonly || ownerState.disabled) {\n            return \n        }\n        this.oldValue = this.optionHandler.getValue();\n        this.optionsHandler.onFocus(event);\n        const rootElement = this.optionsHandler.api.getElement();\n        rootElement.classList.add('dg-input__status--focus');\n    }\n\n    private onKeydown(event: KeyboardEvent): void {\n        const inputElement    = this.component.getInputElement();\n        const maxCount        = this.optionsHandler.getMaxCount();\n        const keepWithinRange = this.optionsHandler.getKeepWithInRange();\n        const inputLength     = inputElement.value.length;\n        const allowedKeys     = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight'];\n        const ownerState      = this.getOwnerState();\n        \n        if (ownerState.readonly || ownerState.disabled) return;\n\t\t\n\t\t// Allow browser/system shortcuts (e.g., Cmd/Ctrl + A/C/V/X/Z/Y)\n\t\t// but stop propagation so outer containers (e.g., grid) don't also act on them.\n\t\tif (event.metaKey || event.ctrlKey) {\n\t\t\tevent.stopPropagation();\n\t\t}\n        \n        if (keepWithinRange && inputLength >= maxCount && !allowedKeys.includes(event.key)) {\n            event.preventDefault();\n\n            if (inputLength >= maxCount && !allowedKeys.includes(event.key)) {\n                if(keepWithinRange){\n                    this.optionHandler.onError({type :  'max',event : event})\n                    event.preventDefault();\n                }\n                setAriaInvalid(inputElement, 'true');\n            } else {\n                setAriaInvalid(inputElement, 'false');\n            }\n        }\n\n         if(event.key === 'Enter') {\n                inputElement && inputElement.blur();\n            }\n\n        this.optionHandler.onKeydown(event);\n    }\n    destroy(): void {\n        super.destroy();\n    }\n}\nexport {\n    TextInputController\n}","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { TextInputController } from \"./text-input-controller\";\nimport { TextInputCompType } from \"./text-input.types\";\n\nconst TextInputTemplate = () => {\n    let div   = document.createElement(\"div\");\n    let input = document.createElement('input');\n    input.setAttribute('ref',inputElement);\n    input.classList.add(\"dg-text__input\");\n    input.classList.add(\"dg-field__input\");\n    div.appendChild(input);\n    return  div as HTMLElement;\n}\n\nconst inputElement = 'inputElement';\n\nclass TextInputComponent extends Component {\n    @queryAssignedNodes(inputElement) private inputElement !: HTMLInputElement;\n\n    constructor() {\n        super();\n        }\n\n    @PostConstruct()\n    init() {\n        const comp : TextInputCompType = {\n            getElement            : () => this.getGui() as HTMLElement,\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className),\n            getInputElement       : () => this.inputElement,\n\n        }\n        const controller = this.createManagedBean(new TextInputController);\n        this.renderTemplate(controller);\n        controller.setComp(comp);\n    }\n    private getComponent(): TextInputCompType | any {\n        return {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className),\n            getInputElement       : () => this.inputElement,\n        };\n\t}\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private renderTemplate(_controller: TextInputController) {\n\t\tconst template = TextInputTemplate();\n        this.setTemplate(template);\n    }\n    rerender(controller:TextInputController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComp(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\nexport {\n    TextInputComponent\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport {EventEmitter}from '@dg/corecomponent/EventEmitter.js';\nimport { TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { ITextConfiguration } from \"../../text-configuration.types\";\nimport { TextControllerHandler } from \"./text-controller\";\nimport { ITextAPI } from \"./text-api.types\";\nimport { TextOptionsHandlerTypes } from \"./text-options-handler.types\";\nimport { selectAllText, setFocusAtFirst, setFocusAtLast } from \"../utility\";\nimport type { TextStateManager } from \"./text-state-manager\";\n\n\n\n@Bean(TEXT_BEAN_NAME.TEXT_API)\nexport class TextAPI extends EventEmitter implements ITextAPI{\n   \n    @AutoWired('configuration') configuration !: ITextConfiguration;\n    @AutoWired(TEXT_BEAN_NAME.TEXT_CONTROLLER_HANDLER) controllerHandler !: TextControllerHandler;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: TextOptionsHandlerTypes;\n    @AutoWired('stateManager') private stateManager !: TextStateManager;\n\n\n    getName() { return TEXT_BEAN_NAME.TEXT_API};\n\n    updateProperties(options : ITextConfiguration) {\n        this.controllerHandler.getTextCtrl().updateProperty(options);\n    }\n\n    getElement() : HTMLElement | undefined{\n        return this.controllerHandler.getTextCtrl().getElement();\n    }\n\n    getValue(){\n        return this.controllerHandler.getTextCtrl().getValue();\n\n    }\n    getMaxCount(): number | null {\n        return this.optionHandler.getMaxCount();\n    }\n    getMinCount(): number {\n        return this.optionHandler.getMinCount();\n    }\n    getRootElement(){\n        return  this.controllerHandler.getTextCtrl().getRootElement();\n    }\n    setFocusAtFirst(): void {\n        setFocusAtFirst(this.getRootElement());\n    }\n    setFocusAtLast(): void {\n        setFocusAtLast(this.getRootElement());\n    }\n    selectAllText(): void {\n        selectAllText(this.getRootElement());\n    }\n\n    onFocus(): void {\n       this.getElement()?.focus();\n    }\n    onBlur(): void {\n        this.getElement()?.blur();\n    }\n\n    focus(): void {\n        this.getRootElement()?.focus();\n    }\n    blur(): void {\n        this.getRootElement()?.blur();\n    }\n\n    destroy(): void {\n        const rootElement = this.getRootElement();\n        if(rootElement){\n            const newElement = rootElement.cloneNode(true);\n            rootElement.parentNode?.replaceChild(newElement, rootElement);\n        }\n        this.getElement()?.remove();\n    }\n    setValue(value: string | number): void {\n        const oldValue = this.optionHandler.getValue();\n        if(oldValue !== value) {\n            this.controllerHandler.getTextCtrl().setValue(value);\n            this.optionHandler.onChange(oldValue , value as string, 'api');\n        }\n    }\n    disable(value: boolean): void {\n        this.controllerHandler.getTextCtrl().disable(value ?? true);\n    }\n    resetValue(): void {\n        this.controllerHandler.getTextCtrl().resetValue()\n    }\n    hide(subElements ?: string[]): void {\n        this.controllerHandler.getTextCtrl().hide(subElements);\n    }\n    show(subElements ?: string[]): void {\n        this.controllerHandler.getTextCtrl().show(subElements);\n    }\n    clear(): void {\n        this.controllerHandler.getTextCtrl().clear();\n    }\n\n\n    isValid(): boolean {\n       return !this.stateManager.isInValid();\n    }\n    getFormattedValue() : string {\n        return this.controllerHandler.getTextCtrl().getFormattedValue();\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { TextOptionsHandlerTypes } from \"../model/text-options-handler.types\";\n\nimport { OwnerStateType,  } from \"../text-root/text-root-classes\";\nimport { getFormattedValue, getTextUtilityClass } from \"../utility\";\nimport { RenderingTextInputCompType } from \"./rendering-text-input.types\";\nimport { validateAndFormatPhoneNumber } from \"../customformatter\";\n\nconst useUtilityClasses = (ownerState : OwnerStateType) => {\n\tconst slots = {\n\t\troot : {\n            slot     : 'input-wrapper',\n            modifiers: [\n                ownerState.disabled && 'disabled',\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots,getTextUtilityClass );\n};\n\nclass RenderingTextInputController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: TextOptionsHandlerTypes;\n    private component !: RenderingTextInputCompType;\n    setComp(comp : RenderingTextInputCompType ) {\n        this.component    = comp;\n        this.applyClasses();\n        this.setValue();\n        this.registerEventHandler();\n        this.registerAdjusterEventHandler();\n    }\n\n    private applyClasses() : void {\n        const ownerState    = this.getOwnerState();\n        const classes       = useUtilityClasses(ownerState);\n        this.component.addOrRemoveCSSClass(classes.root);\n        this.component.getElement().classList.add('dg-field__input-wrapper');\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadOnly()\n\t\t}\n\t}\n\n    private registerEventHandler() {\n        const ownerState = this.getOwnerState();\n        if(ownerState.readonly || ownerState.disabled) {\n            return \n        }\n    }\n\n    private setAccessibility() : void {\n        this.assignValueBoundaries();\n    }\n\n    private assignValueBoundaries(): void {\n        const spanElement   = this.component.getInputElement();\n        const maxCount      = this.optionsHandler.getMaxCount();\n        const placeHolder   = this.optionsHandler.getPlaceHolder();\n        const value         = this.optionsHandler.getDefaultValue();\n        const customFormat  = this.optionHandler.getCustomPattern();\n        const regex         = this.optionHandler.getPattern();\n        const format        = this.optionHandler.getFormat();\n        const formattedText = getFormattedValue(value, format);\n        let initialValue;\n        if(((typeof regex == 'string') && (regex == 'number'))&& customFormat) {\n            const formattedValue =  validateAndFormatPhoneNumber(value,customFormat);\n            if(formattedValue) { \n                spanElement.textContent = formattedValue ;\n                initialValue  =  formattedValue;\n            }\n        }else{\n            spanElement.textContent = formattedText; \n            initialValue = formattedText;\n        }\n\n        if (placeHolder && initialValue =='undefined') {\n            spanElement.setAttribute('data-placeholder', placeHolder);\n        } else {\n            spanElement.removeAttribute('data-placeholder');\n        }\n\n        if (maxCount && formattedText.length > maxCount && !customFormat) {\n            spanElement.textContent = formattedText.slice(0, maxCount);\n        }\n    }\n    \n\n    private setValue() : void {\n        this.setAccessibility();\n    }\n\n    private registerAdjusterEventHandler() {\n    }\n\n    updateProperty(){\n        const ownerState = this.getOwnerState();\n        this.applyClasses();\n        this.setAccessibility();\n        this.optionsHandler.updateProperty(ownerState);\n    }\n    \n    destroy(): void {\n        super.destroy();\n    }\n}\nexport {\n    RenderingTextInputController\n}","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { RenderingTextInputCompType } from \"./rendering-text-input.types\";\nimport { RenderingTextInputController } from \"./rendering-text-input-controller\";\n\n\nconst TextInputTemplate = () => {\n    let div   = document.createElement(\"div\");\n    let span = document.createElement('span');\n    span.setAttribute('ref',spanElement);\n\n    span.classList.add(\"dg-text__input\");\n    span.classList.add(\"dg-field__input\");\n    div.appendChild(span);\n    return  div as HTMLElement;\n}\n\nconst spanElement = 'spanElement';\n\nclass RenderingTextInputComponent extends Component {\n    @queryAssignedNodes(spanElement) private spanElement !: HTMLInputElement;\n\n    constructor() {\n        super();\n        }\n\n    @PostConstruct()\n    init() {\n        const comp : RenderingTextInputCompType = {\n            getElement            : () => this.getGui() as HTMLElement,\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className),\n            getInputElement       : () => this.spanElement,\n\n        }\n        const controller = this.createManagedBean(new RenderingTextInputController);\n        this.renderTemplate(controller);\n        controller.setComp(comp);\n    }\n    private getComponent(): RenderingTextInputCompType | any {\n        return {\n            getElement            : () => this.getGui() as HTMLInputElement,\n            addOrRemoveCSSClass   : (className: string) => this.addOrRemoveCSSClass(className),\n            getInputElement       : () => this.spanElement,\n        };\n\t}\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n    private renderTemplate(_controller: RenderingTextInputController) {\n\t\tconst template = TextInputTemplate();\n        this.setTemplate(template);\n    }\n    rerender(controller: RenderingTextInputController,comp:any) {\n\t\tthis.destroy();\n        const component = this.getComponent()\n        this.renderTemplate(controller);\n\t\tcontroller.setComp(component);\n        comp.appendChild(this.getGui());\n    }\n\n\tprotected destroy(): void {\n\t\tthis.getGui().remove();\n\n\t}\n\n}\n\nexport {\n    RenderingTextInputComponent\n}","import { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { BEAN_NAME } from \"@dg/corecomponent\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { UserComponentRegistry } from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IModule } from '../../core/modules.types';\nimport { ITextConfiguration } from \"./text-configuration.types\";\n\nimport { TextOptionHandler } from \"./core/model/text-option-handler\";\nimport { Label } from \"../../label/label-view\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { TextStateManager } from \"./core/model/text-state-manager\";\nimport { TextUserComponentHandler } from \"./core/model/text-user-component-handler\";\nimport { TextInputComponent } from \"./core/text-input/text-input-view\";\nimport { TextAPI } from \"./core/model/text-api\";\nimport { TextControllerHandler } from \"./core/model/text-controller\";\nimport { SuffixComponent } from \"../../Suffix/suffix-view\";\nimport { PrefixComponent } from \"../../Prefix/prefix-view\";\nimport { RenderingTextInputComponent } from \"./core/rendering-text-input/rendering-text-input-view\";\nimport { ErrorComponent } from \"../../error/error-view\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\n\ninterface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IModule[];\n}\n\nexport const enum PropertyName {\n\tText_RENDERER = 'textRenderer',\n}\nlet nextInstanceId = 1;\n\nclass  TextCoreComponent {\n    constructor(){\n\n    }\n    initializeText( configuration: ITextConfiguration, params: IUserParams = {}, createUI: CallableFunction, ): void {\n\t\tconst instanceID = configuration?.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n\t\tthis.registerCoreComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\n    }\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tconst beanList= [\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tEventHandler,\n\t\t\tComponentMetadataProvider,\n\t\t\tTextOptionHandler,\n\t\t\tTextStateManager,\n\t\t\tTextUserComponentHandler,\n\t\t\tTextAPI,\n\t\t\tTextControllerHandler\n\t\t]\n\t\treturn new Set(beanList);\n\t}\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID : string; } {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nfunction createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'text-label',\n\t\t\tcomponentClass: Label\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'text-helper',\n            componentClass : DescriptionComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName :'text-input',\n\t\t\tcomponentClass : TextInputComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : \"prefix\",\n\t\t\tcomponentClass : PrefixComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : \"suffix\",\n            componentClass : SuffixComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : \"render-text-input\",\n            componentClass : RenderingTextInputComponent\n\t\t},\n\t\t{\n\t\t\tcomponentName : \"error\",\n\t\t\tcomponentClass : ErrorComponent\n\t\t}\n    ];\n\n\treturn components;\n}\n\nexport { \n    TextCoreComponent,\n    IUserParams,\n    createComponentList\n\n}","import { AutoWired, BEAN_NAME,  setAriaDisabled,  setAriaLabel } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { TextOptionsHandlerTypes } from \"../model/text-options-handler.types\";\nimport { getFormattedValue, getReggexPattern, OwnerStateType } from \"../utility\";\nimport { TEXT_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { TextControllerHandler } from \"../model/text-controller\";\nimport { ITextConfiguration } from \"../../text-configuration.types\";\nimport { useUtilityClasses } from \"../text-root/text-root-classes\";\nimport { RenderingTextComponentType } from \"./rendering-text-root-types\";\nimport { removeSpecialCharsFromNumber, validateAndFormatPhoneNumber } from \"../customformatter\";\n\n\nclass RenderingTextRootController extends AbstractController<RenderingTextComponentType> {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionHandler !: TextOptionsHandlerTypes;\n\t@AutoWired(TEXT_BEAN_NAME.TEXT_CONTROLLER_HANDLER) controllerHandler !: TextControllerHandler;\n\n\n    init(): void {\n        this.registerEvent();\n        this.controllerHandler.registerTextCtrl(this);\n        this.applyClasses();\n        this.setAccessibility();\n    }\n    registerEvent(){\n    }\n\n    private valueUpdater() : void { \n        const rootElement = this.getRootElement(); \n        rootElement && (rootElement.textContent = '');\n        const newValue =  this.optionHandler.getValue();\n        const regex =  this.optionHandler.getPattern();\n        const customFormat =  this.optionHandler.getCustomPattern();\n        if(((typeof regex == 'string') && (regex == 'number'))&& customFormat) {\n             const formattedValue = validateAndFormatPhoneNumber(newValue,customFormat);\n            if(rootElement &&formattedValue ){\n                 rootElement.textContent = formattedValue;\n            }\n        }\n        else{\n          rootElement && (rootElement.textContent = newValue);\n        }\n     }\n    getElement() : HTMLElement  | undefined{\n        return this.component?.getElement();\n    }\n\n    getRootElement() {\n        return this.component?.getInputElement();\n    }\n\n    getValue() : string | number {\n        const regex =  this.optionHandler.getPattern();\n        const customFormat =  this.optionHandler.getCustomPattern();\n        if(((typeof regex == 'string') && (regex == 'number'))&& customFormat) {\n            const value  = this.getFormattedValue() ?? '';\n            return removeSpecialCharsFromNumber(value);\n        }\n        else{\n            return this.getFormattedValue() ?? '';\n        }\n    }\n    \n    private applyClasses() {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.component?.addOrRemoveCssClassName(classes.root);\n        this.component?.getElement().classList.add('dg-field__root');\n        this.component?.getElement().classList.add('dg-field--render-state');\n        this.addUserClass();\n\n    }\n\n    private addUserClass(){\n        const className = this.optionHandler?.getClassName();\n        if(className){\n            if(Array.isArray(className)){\n                className.forEach(c => this.component?.getElement()?.classList.add(c));\n            }else{\n                this.component?.getElement()?.classList.add(className);\n            }\n        }\n    }\n\n    private setAccessibility() : void { \n        const inputElement         = this.component?.getInputElement()\n        const ariaLabel       = this.optionHandler.getAriaLabel();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n\n    private getOwnerState() : OwnerStateType {\n        const selected = this.optionHandler.isSelected();\n        const disabled = this.optionHandler.isDisabled();\n        const readonly = this.optionHandler.isReadOnly();\n        return {\n            selected,\n            disabled,\n            readonly\n        }\n    }\n\n    setValue(value :  string |  number) : void{\n        this.optionHandler.updateTextValue(value);\n        this.valueUpdater()\n    }\n    updateMinValue() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.minLength = this.optionHandler.getMinCount());\n    }\n    updateMaxValue() {\n        const rootElement = this.getRootElement();\n        const maxCount     = this.optionHandler.getMaxCount();\n        if (maxCount && rootElement) {\n            rootElement.maxLength = maxCount;\n        }\n    }\n\n    updatePlaceholder() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.placeholder = this.optionHandler.getPlaceHolder());\n    }\n    updateRequired() {\n        const rootElement = this.getRootElement();\n        (rootElement) && (rootElement.required = this.optionHandler.isRequired());\n    }\n    updateAriaLabel() {\n        const ariaLabel       = this.optionHandler.getAriaLabel();\n        const inputElement         = this.getRootElement();\n        inputElement && setAriaLabel(inputElement, ariaLabel);\n    }\n    updateDisabled() {\n        const isDisabled =  this.optionHandler.isDisabled();\n       this.disable(isDisabled)\n    }\n    updateReadOnly() {\n        const isReadOnly =  this.optionHandler.isReadOnly();\n        const element = this.getRootElement();\n        if (element) {\n            element.readOnly = isReadOnly;\n        }\n    }\n    updateValue() {\n        const value =  this.optionHandler.getDefaultValue();\n        const element = this.getRootElement();\n        if(element) {\n            const format =  this.optionHandler.getFormat();\n            const formattedText =  getFormattedValue(value,format);\n            element.value = formattedText;\n            if(format === 'none'){\n                element.value = this.optionHandler.getDefaultValue();\n            }\n        };\n        this.optionHandler.updateTextValue(value);\n        this.valueUpdater()\n    }\n    refresh() {\n        this.updateMinValue();\n        this.updateMaxValue();\n        this.updatePlaceholder();\n        this.updateRequired();\n        this.updateAriaLabel();\n        this.updateDisabled();\n        this.updateRequired();\n        this.updateAriaLabel();\n        this.updateValue();\n        this.updateLabel();\n        this.updateDescription();\n    }\n    updateLabel() {\n        const label =  this.getElement()?.querySelector('label');\n        const spanElement =  label?.querySelector('span');\n        if(label && spanElement) {\n            const labelText =  this.optionHandler.getLabel();\n            spanElement.textContent =  labelText\n        }\n    }\n\n    updateDescription(){\n        const description =  this.getElement()?.querySelector('.dg-field__description');\n        if(description) {\n            const descriptionText =  this.optionHandler.getDescription();\n            description.textContent =  descriptionText\n        }\n    }\n    updateProperty(options : ITextConfiguration){\n        this.optionHandler.updateProperty(options);\n        this.applyClasses();\n        this.refresh();\n    }\n    disable(value: boolean): void {\n        const element = this.component?.getInputElement();\n        const inputWrapper = element?.parentElement;\n        if (!element || !inputWrapper) return;\n    \n        element.classList.toggle('dg-text__input--disabled', value);\n        inputWrapper.classList.toggle('dg-text__input-wrapper--disabled', value);\n        element.disabled = value;\n    \n        this.optionHandler.setDisabled(value);\n        setAriaDisabled(element, value);\n    }\n    \n    getParamsProperty() {\n        return {\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> {\n\t\t\t\t\treturn\"dg-text__label\"\n\t\t\t\t},\n\t\t\t\tgetLabelTitleClasses :()=> {\n\t\t\t\t\treturn \"dg-text__label-title\"\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-text__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-text__description\"\n\t\t\t}\n\t\t};\n    }\n    resetValue(){\n        const initialValue = this.optionHandler.getDefaultValue();\n        const element = this.getRootElement();\n        if (element) element.textContent = '';\n        this.setValue(initialValue.length > 1 ? initialValue : '');\n    }\n    hide(): void {\n        const element = this.getElement();\n        element && (element.style.display = 'none');\n    }\n    show(): void {\n        const element = this.getElement();\n        element && (element.style.display = 'block');\n    }\n    clear() :  void {\n        this.setValue('')\n    }\n    isValid() :  boolean{\n        const regex = this.optionHandler.getPattern();\n        const inputElement = this.getRootElement();\n        let validState = true;\n        if (inputElement) {\n            const { value = '' } = inputElement;\n            const inputLength = value.length;\n            const minCount = this.optionHandler.getMinCount();\n            const maxCount = this.optionHandler.getMaxCount();\n            const pattern = getReggexPattern(regex as RegExp);\n\n            if (pattern && !pattern.test(value)) {\n                validState = false;\n            }\n            if (inputLength < minCount || (maxCount && inputLength > maxCount)) {\n                validState = false;\n            }\n        }\n        return validState;\n\n    }\n\n    getFormattedValue() : string {\n        return this.getRootElement()?.textContent ?? '';\n    }\n}\n\nexport {\n    RenderingTextRootController\n}","\nimport { AutoWired, BEAN_NAME, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\n\nimport { RenderInputWrapper, RenderRootTemplate } from \"../utility\";\nimport { TextOptionsHandlerTypes } from \"../model/text-options-handler.types\";\nimport { RenderingTextComponentType } from \"./rendering-text-root-types\";\nimport { RenderingTextRootController } from \"./rendering-text-root-controller\";\n\n\nclass RenderingTextRootComponent  extends Component{\n    private componentHolder : HTMLElement |  null;\n    @queryAssignedNodes(RenderInputWrapper) private renderTags :any;\n  \n\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: TextOptionsHandlerTypes;\n    constructor(appendTo ?: HTMLElement) {\n\n        super();\n       this.componentHolder = appendTo ?? null;\n    }\n\n    @PostConstruct()\n    init() : void {\n\n        const component : RenderingTextComponentType = {\n            addOrRemoveCssClassName : (className : string) =>  this.addOrRemoveCssClassName(className),\n            getElement : () => this.getGui(),\n            getInputElement :() => {  return  this.renderTags.spanElement}\n\n        }\n        const controller = this.createManagedBean(new RenderingTextRootController());\n\n        const props ={\n            label :  this.optionHandler?.getLabel().length > 0,\n            helper :this.optionHandler?.getDescription().length > 0,\n            rtl :  this.optionHandler.isRTL(),\n            prefix : this.optionHandler.isPrefixRenderer(),\n            suffix : this.optionHandler.isSuffixRenderer(),\n        }\n\t\tconst properties = controller.getParamsProperty();\n        const emptyDom =  this.shouldGenerateEmptyDom();\n        const template = RenderRootTemplate(props,emptyDom);\n        this.setTemplate(template, {\n\t\t\tlabel : properties.label,\n\t\t\tdescription : properties.description\n\t\t});\n        controller.setComponent(component);\n\n        this.appendElementIntoUserDom();\n    }\n\n    private addOrRemoveCssClassName(className : string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n    private shouldGenerateEmptyDom(){\n\t\tconst generateEmptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\tconst label = this.optionHandler.getLabel();\n\t\tconst description = this.optionHandler.getDescription();\n        const isLabel =  label.length > 0;\n        const isDescription = description.length > 0;\n\t\tif( isLabel || isDescription){\n\t\t\treturn true\n\t\t}else if(generateEmptyDom){\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n    private appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.componentHolder && this.componentHolder.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.componentHolder && this.componentHolder.removeChild(eGui);\n\t\t\tthis.componentHolder = null;\n\t\t});\n\t}\n\n}\n\nexport {\n    RenderingTextRootComponent\n}","export const DATETIME_BEAN_NAME = {\n\tDATETIME_API               : 'dateTimeApi',\n\tDATETIME_CONFIGURATION     : 'configuration',\n\tCSSCLASSNAMEGENERATOR      : 'CSSClassNameGenartor',\n\tKEYBOARD_SHORTCUT_HANDLER  : 'KeyBoardShortCutsHandler',\n\tDATETIME_EVENT_HANDLER     : 'dateTimeEventHandler',\n\tDATETIME_CONTROLLER_HANDLER: 'dateTimeControllerHandler',\n\tDATETIME_MODEL             : 'dateTimeModel',\n\tDATETIME_INPUT_HANDLER     : 'dateTimeInputHandler',\n\tDATE_PICKER_INTERACTOR : 'dateTimePickerInteractor',\n};\n\n\nexport const DATE_TIME__BEAN_NAME ={\n\tDATE_TIME_PICKER_STATE_MANAGER: 'dateTimePickerStateManager',\n\tDATE_TIME_MODEL               : 'dateTimeModel',\n\tDATE_TIME_PLACEHOLDER_MANAGER :'dateTimePlaceholderManager',\n\tDATE_TIME_SELECTION_SERVICE   : 'dateTimeSelectionService'\n\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { DateTimeUserComponentHandlerTypes } from './date-time-user-component-handler.types';\nimport { ILabelUserComponentHandler } from '../../../../label/label.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER      = 'prefixRenderer',\n\tSUFFIX_RENDERER      = 'suffixRenderer',\n\tDESCRIPTION_RENDERER = 'descriptionRenderer',\n\tBUTTON_RENDERER      = 'buttonRenderer',\n\tERROR_RENDERER       = 'errorRenderer',\n\tLABEL_RENDERER       = 'labelRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class DateTimeUserComponentHandler extends UserComponentHandler implements DateTimeUserComponentHandlerTypes, ILabelUserComponentHandler{\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.DESCRIPTION_RENDERER, params, PropertyName.DESCRIPTION_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\t\n\tprotected getComponentDetails( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DESCRIPTION_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","export const EVENT_NAME = {\n    KEYDOWN  : 'keydown',\n    FOCUS    : 'focus',\n    BLUR     : 'blur',\n    MOUSEDOWN: 'mousedown',\n    CLICK    : 'click'\n}\n\n\nexport const DATE_TIME_CUSTOM_EVENTS = {\n    UPDATE_CALENDAR      : 'UPDATE_CALENDAR',\n    DESTROY_CALENDAR     : 'DESTROY_CALENDAR',\n    CREATE_CALENDAR      : 'CREATE_CALENDAR',\n    PROPERTY_CHANGED     : 'PROPERTY_CHANGED',\n    VALUE_CHANGED        : 'VALUE_CHANGED',\n    UPDATE_FORMAT        : 'UPDATE_FORMAT',\n    FORMAT_UPDATED       : 'FORMAT_UPDATED',\n    CLEAR_VALUE_IN_PICKER: 'CLEAR_VALUE_IN_PICKER',\n    SYNC_PLACEHOLDER     : 'SYNC_PLACEHOLDER',\n\n}\n\n// Type-safe event constants for internal use\nexport const INTERNAL_EVENTS = {\n    VALUE_UPDATE: 'EVENT_VALUE_UPDATE',\n    MAKE_SELECTION: 'EVENT_MAKE_SELCTION',\n    MAKE_SELECTION_ONCLICK: 'EVENT_MAKE_SELCTION_ONCLICK',\n    VALUE_UPDATE_BY_DATEPICKER: 'EVENT_VALUE_UPDATE_BY_DATEPICKER',\n    INCREMENT_UPDATED: 'EVENT_INCREMENT_UPDATED',\n    DECREMENT_UPDATED: 'EVENT_DECREMENT_UPDATED',\n    FOCUS_CONTAINER: 'FOCUS_CONTAINER',\n    FOCUS_IN: 'EVENT_FOCUS_IN',\n    FOCUS_OUT: 'EVENT_FOCUS_OUT'\n} as const;\n\nexport type InternalEventType = typeof INTERNAL_EVENTS[keyof typeof INTERNAL_EVENTS];","import dayjs, { Dayjs, UnitType } from \"dayjs\";\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport utc from 'dayjs/plugin/utc.js';\nimport { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { DATE_TIME__BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeModelType, FormatType, PatternType, SelectedPatternType } from \"./date-time-model.types\";\nimport { DateTimeOptionHandlerType, HookInitiator } from \"./date-time-options-handler.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\n\nexport const patternMap = {\n    y  : 'yearField',\n    Y  : 'yearField',\n    D  : 'dateField',\n    M  : 'monthField',\n    d  : 'dayField',\n    H  : 'hourField',\n    h  : 'hourField',\n    m  : 'minuteField',\n    s  : 'secondField',\n    S  : 'millisecondField',\n    A  : 'meridianField',\n    \"/\": \"separator\",\n    \"-\": \"separator\",\n    \".\": \"separator\",\n    \",\": \"separator\",\n    \":\": \"separator\",\n    \" \": \"separator\",\n};\n\nexport const formatMap = {\n    y  : 'year',\n    Y  : 'year',\n    D  : 'date',\n    M  : 'month',\n    d  : 'day',\n    H  : 'hour',\n    h  : 'hour',\n    m  : 'minute',\n    s  : 'second',\n    S  : 'millisecond',\n    A  : 'meridian',\n    \"/\": \"separator\",\n    \"-\": \"separator\",\n    \".\": \"separator\",\n    \",\": \"separator\",\n    \":\": \"separator\",\n    \" \": \"separator\",\n};\n\n\n\n\n  const DEFUALT_FORMAT_MAP = {\n    MMMM_D_YYYY_hh_mm_ss_A : 'MMMM D, YYYY hh:mm:ss A',\n    MMMM_D_YYYY: 'MMMM D, YYYY'\n  }\n\n  const MONTH_MAP: Record<string,number> = {\n    1: 0,   // January\n    2: 1,   // February\n    3: 2,   // March\n    4: 3,   // April\n    5: 4,   // May\n    6: 5,   // June\n    7: 6,   // July\n    8: 7,   // August\n    9: 8,   // September\n    j: 0,  // January (string key)\n    J: 0,  // January (string key)\n    f: 1,   // February\n    F: 1,   // February\n    m: 4,  // March\n    M: 4,  // March\n    a: 3,  // April\n    A: 3,  // April\n    s: 8,   // September\n    S: 8,   // September\n    o: 9,   // October\n    O: 9,   // October\n    n: 10,  // November\n    N: 10,  // November\n    d: 11,   // December\n    D: 11   // December\n \n  };\n\n@Bean(DATE_TIME__BEAN_NAME.DATE_TIME_MODEL)\nexport class DateTimeModel extends EventEmitter implements DateTimeModelType{\n    \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: DateTimeOptionHandlerType;\n\n\n    private currentDateTime!: Dayjs;\n    private selectedDateTime !: Dayjs | null;\n    private format         !: string;\n    private formatMap       : FormatType = {};\n    private formatArray     : string[] = [];\n    private patternArray    : PatternType[] = [];\n    private selectedField  !: string ; \n\n\n    private maxDate       : Dayjs | null = null;\n    private minDate       : Dayjs | null = null;\n\n    private year : string | number | null       = null;\n    private monthIndex: string | number | null  = null;\n    private date: string | number | null        = null;\n    private hour: string | number | null        = null;\n    private minute: string | number | null      = null;\n    private second: string | number | null      = null;\n    private millisecond: string | number | null = null;\n\n    private monthFormat !: string;\n    private activatePlaceholder : boolean = false;\n    private monthChanged : boolean = false;\n    private eventKey !: boolean;\n    private compID !:string;\n\n    private minuteInterval !: number;\n\n\n    @PostConstruct() \n    init(): void {\n        let date = this.optionHandler.getDefaultValue();\n\n        this.initDate(date);\n        this.setCompID();\n        this.minDate = this.assignDate(this.optionHandler.getMin(), this.format);\n        this.maxDate = this.assignDate(this.optionHandler.getMax(), this.format);\n        this.minuteInterval = this.optionHandler.getMinuteInterval() \n\n        this.initializeFormatArrays();\n        this.selectedField = this.patternArray[0].fieldName as string;\n        this.handleEventKey();\n\n        // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.setValue.bind(this));\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.initializeFormatArrays.bind(this));\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.changeHourCycle.bind(this));\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.UPDATE_FORMAT, this.updateFormat.bind(this));\n        \n\n    }\n\n    private setCompID(){\n        this.compID = generateCompID()\n    }\n\n    getCompID(){\n        return this.compID\n    }\n\n\n    private assignDate(value: any, format: string | null): dayjs.Dayjs | null {\n        if (typeof value === 'number') {\n            value = format ? dayjs(value).format(format) : dayjs(value);\n        } \n        \n        if (value instanceof Date) {\n            value = format ? dayjs(value).format(format) : dayjs(value);\n        }\n    \n        return value ? (format ? dayjs(value, format) : dayjs(value)) : null;\n    }\n\n    getMaxDate():Dayjs | null{\n        return this.maxDate;\n    }\n    getMinDate():Dayjs | null{\n        return this.minDate;\n    }\n\n\n\n    initDate(date:any){\n\n       \n\n        const format = this.optionHandler.getFormat();\n\n\n        if(!date){\n            this.activatePlaceholder = true;\n            this.selectedDateTime = null\n            date = dayjs();\n            date = date.set('minutes', 0).set('seconds', 0).set('milliseconds', 0);\n        }else if(date){\n            this.activatePlaceholder = false;\n            this.monthChanged = true;\n\n        }\n\n\n        // date ? date = date : date = dayjs().set('month',0).set('day',1);\n\n        if(date){\n           if(format){\n                if(typeof date === 'string'){\n                    this.currentDateTime = dayjs(date,format);\n                    this.optionHandler.getDefaultValue() ?   this.selectedDateTime =  this.currentDateTime : this.selectedDateTime = null\n\n                }else{\n                    // const hourCycle = this.optionHandler.getHourCycle();\n                    let timeStampDate;\n                    // if(hourCycle){\n                    //     // timeStampDate = dayjs.utc(date as number).format(`${format} [GMT]`);\n                    // }else{\n                    //     timeStampDate = dayjs(date as number).format(format);\n                    // }\n                    timeStampDate = dayjs(date as number).format(format);\n                    if(timeStampDate === 'Invalid Date'){\n                        timeStampDate = dayjs().format(format)\n                    }\n\n                    this.currentDateTime = dayjs(timeStampDate,`${format}`);\n                    this.optionHandler.getDefaultValue() ?   this.selectedDateTime =  this.currentDateTime : this.selectedDateTime = null\n\n\n                }\n                this.format = format;\n           }else{\n            const type = this.optionHandler.getType();\n\n            if(type === 'datefield' || type === \"datepicker\"){\n                this.currentDateTime = dayjs(date,DEFUALT_FORMAT_MAP.MMMM_D_YYYY);\n                this.optionHandler.getDefaultValue() ?   this.selectedDateTime =  this.currentDateTime : this.selectedDateTime = null\n                this.format = DEFUALT_FORMAT_MAP.MMMM_D_YYYY;\n            }else{\n                this.currentDateTime = dayjs(date,DEFUALT_FORMAT_MAP.MMMM_D_YYYY_hh_mm_ss_A);\n                this.optionHandler.getDefaultValue() ?   this.selectedDateTime =  this.currentDateTime : this.selectedDateTime = null\n                this.format = DEFUALT_FORMAT_MAP.MMMM_D_YYYY_hh_mm_ss_A;\n            }\n           }\n        }\n\n        this.changeHourCycle();\n        this.dispatchEvent({type:DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED});\n\n\n\n    }\n\n    getFormatArray():Array<string>{\n        return this.formatArray;\n    }\n\n    handleEventKey(){\n        const eventKey = this.optionHandler.getEventKey();\n        if(!eventKey){\n           return\n        }\n        const fieldName = this.formatArray[0];\n\n        if(fieldName === 'month'){\n            if(this.monthFormat != 'MM' && this.monthFormat != 'M'){\n                if (eventKey in MONTH_MAP) {\n                    const changedDate = this.currentDateTime.set(\"month\", MONTH_MAP[eventKey]);\n                    this.currentDateTime = dayjs(changedDate,this.format);\n                    this.eventKey = true \n                }\n\n            }else if(parseInt(eventKey)){\n                const changedDate = this.currentDateTime.set(fieldName as UnitType, parseInt(eventKey)-1);\n                this.currentDateTime = dayjs(changedDate,this.format);\n                this.eventKey = true \n\n\n\n            }\n            \n        }else{\n            if(parseInt(eventKey)){\n                // const formattedEventKey = `0${eventKey}`\n                const changedDate = this.currentDateTime.set(fieldName as UnitType, parseInt(eventKey));\n                this.currentDateTime = dayjs(changedDate,this.format);\n                this.eventKey = true \n\n\n            }\n           \n        }\n\n\n\n    }\n\n    getEventKey():boolean{\n        return this.eventKey;\n\n    }\n   \n\n    isActivatePlaceholder(): boolean{\n        return this.activatePlaceholder;\n\n    }\n\n    setActivatePlaceholder(value:boolean):void{\n         this.activatePlaceholder = value\n    }\n\n    // getFormattedValue(){\n    //     return this.currentDateTime.format(this.format);\n    // }\n\n    getFormattedValue(){\n        const type = this.optionHandler.getType();\n        if(type === 'timepicker'){\n            return this.getFormattedTime();\n        }else{\n            return this.getFormatedDate();\n        }\n    }\n\n    private getFormattedTime() {\n        // const userFormat = this.optionHandler.getValueFormat();\n        const userFormat = this.optionHandler.getValueFormat() ?? this.optionHandler.getFormat();\n        const format = (userFormat && userFormat.trim() !== '') ? userFormat : 'hh:mm';\n        const date = this.selectedDateTime || this.currentDateTime;\n    \n        const hasHour = /(h{1,2}|H{1,2})/.test(format);\n        const hasMinute = /m{1,2}/i.test(format);\n        const hasSecond = /s{1,2}/i.test(format);\n        const hasMeridian = /A/i.test(format);\n    \n        const finalFormat: string[] = [];\n    \n        if (hasHour) {\n            // If format has A or P (AM/PM), use 12-hour format (hh), otherwise check for H vs h\n            if (hasMeridian) {\n                finalFormat.push('hh');\n            } else {\n                finalFormat.push(/H/.test(format) ? 'HH' : 'hh');\n            }\n        }\n        if (hasMinute) finalFormat.push('mm');\n        if (hasSecond) finalFormat.push('ss');\n        if (hasMeridian) finalFormat.push('A');\n    \n        if (finalFormat.length === 0) {\n            return date.format('hh:mm');\n        }\n    \n        return date.format(finalFormat.join(':'));\n    }\n    private getFormatedDate() {\n        let formatToUse = this.optionHandler.getValueFormat();\n        formatToUse = (formatToUse && formatToUse.trim() !== '') ? formatToUse : this.format;\n\n        if (!formatToUse) {\n            return this.currentDateTime.toString();\n        }\n\n        if (/A/.test(formatToUse)) {\n          formatToUse = formatToUse\n            .replace(/HH/g, 'hh')  // Replace HH with hh\n            .replace(/H/g, 'h');  // Replace any remaining H with h\n        }\n      \n        if (this.optionHandler.getType() === 'datetimepicker') {\n          formatToUse = formatToUse\n            .replace(/MM(?=:)/g, 'mm')  \n            .replace(/SS/g, 'ss'); \n        }\n      \n        const dateToFormat = this.currentDateTime || this.selectedDateTime;\n        return dateToFormat.format(formatToUse);\n      }\n\n    getSelectedDateTime():Dayjs | null{\n        return this.selectedDateTime;\n    }\n\n\n    // #### new methods;\n\n    private initializeFormatArrays(): void {\n        // Clear format arrays before re-initializing to prevent duplicates\n        this.formatArray = [];\n        this.formatMap = {};\n        \n        const formatArray = this.format\n          ? this.format.match(new RegExp('([y|d|M|H|h|m|s|S|a|])+|[/]+|[-]+|[.]+|[,]+|[:]+|[ ]', 'ig')) || []\n          : [];\n\n        this.patternArray = formatArray.map((pattern: string) => {\n          const fieldNameKey = pattern[0] as keyof typeof formatMap; // Ensure proper key typing\n          const fieldName =  formatMap[fieldNameKey]\n          if(fieldName === 'month'){\n                this.monthFormat = pattern\n          }\n          return {\n            fieldName,\n            placeHolder: pattern,\n            className: patternMap[fieldNameKey],\n            callBack: this.setSelectedField.bind(this),\n          };\n        });\n\n        // const customFormat = this.optionHandler.getCustomFormats();\n        // if (customFormat) {\n        //     this.patternArray.forEach(item => {\n        //         if (customFormat[item.fieldName]) {\n        //             item.placeHolder = customFormat[item.fieldName];\n        //         }\n        //     });\n        // }\n\n    \n        formatArray.forEach((pattern: string) => {\n          if (pattern === \"/\" || pattern === \"-\" || pattern === \".\" || pattern === \",\" || pattern === \":\" || pattern === \" \") {\n            return;\n          }\n    \n          const fieldNameKey = pattern[0] as keyof typeof formatMap; // Explicitly define the key type\n          const formatKey = formatMap[fieldNameKey]; // Retrieve key from formatMap\n          if (formatKey) {  // Ensure formatKey exists before pushing it to arrays\n            this.formatArray.push(formatKey);\n            this.formatMap[formatKey as keyof FormatType] = pattern; // Correct type safety\n          }\n        });\n      }\n\n    \n\n    getValue(): string {\n        let formatToUse = this.format;\n\n        if (!formatToUse) {\n            return this.currentDateTime.toString();\n        }\n        \n        if (/A/.test(formatToUse)) {\n            formatToUse = formatToUse\n                .replace(/HH/g, 'hh')  // Replace HH with hh\n                .replace(/H/g, 'h');  // Replace any remaining H with h\n        }\n        \n        return this.currentDateTime.format(formatToUse);\n    }\n\n    getDateAsDayjs(): Dayjs | null{\n        return this.selectedDateTime;\n    }\n\n    getDateAsDayjsForCurrentDate():Dayjs | null{\n        return this.currentDateTime ?? null\n    }\n\n    getDateObject(): Date | null {\n        if(this.selectedDateTime === null){\n            return null;\n        }\n        // return this.selectedDateTime.toDate();\n        if(this.currentDateTime === null){\n            return null;\n        }\n        return this.currentDateTime.toDate();\n\n    }\n\n    setValue(value: any, event?:HookInitiator): void {\n        if(value === null){\n            this.currentDateTime = dayjs();\n            this.selectedDateTime = null;\n            const hookInitiator : HookInitiator = event ? event : 'ui';\n        const params = {\n            type: 'onChange',\n            event : {},\n            value : null,\n            source : hookInitiator\n        }\n        this.optionHandler.onChange(params);\n        this.monthChanged = true;\n        this.activatePlaceholder = true;\n        this.dispatchEvent({type:DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED});\n        return;\n        }\n        let newDate;\n        if(typeof value === 'string'){\n             newDate = dayjs(value,this.format);\n        }else if(typeof value === 'object' || typeof value === 'number'){\n            newDate = dayjs(value);\n        }\n\n        this.currentDateTime = this.format ? dayjs(newDate, this.format):dayjs(newDate);\n        this.selectedDateTime = this.currentDateTime;\n        // this.changeHourCycle();\n\n        const hookInitiator : HookInitiator = event ? event : 'ui';\n        const params = {\n            type: 'onChange',\n            event : {},\n            value : this.getDateObject(),\n            source : hookInitiator\n        }\n        this.optionHandler.onChange(params);\n        this.monthChanged = true;\n        this.activatePlaceholder = false;\n        this.dispatchEvent({type:DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED});\n\n    }\n\n    updateFormat():void{\n        this.format = this.optionHandler.getFormat() || this.format;\n        // Re-initialize format arrays with new format (clears arrays internally)\n        this.initializeFormatArrays();\n        // Update selected field to first field in new format\n        if(this.patternArray.length > 0){\n            this.selectedField = this.patternArray[0].fieldName as string;\n        }\n        // Dispatch events to update UI\n        this.dispatchEvent({type:DATE_TIME_CUSTOM_EVENTS.FORMAT_UPDATED});\n        this.dispatchEvent({type: DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED});\n    }\n\n    changeHourCycle(): void {\n        const hourCycle = this.optionHandler.getHourCycle();\n        if(hourCycle){\n\n            const configFormat = this.optionHandler.getFormat();\n            if(configFormat){\n                const hasHH = /H{1,2}/.test(configFormat);\n                const hashh = /h{1,2}/.test(configFormat);\n                if(hourCycle === 12 && hasHH && !hashh){\n                    return;\n                }\n                if(hourCycle === 24 && hashh && !hasHH){\n                    return;\n                }\n            }\n            \n            if(hourCycle === 12){\n                this.format  = this.format.replace(/H/g, 'h');\n\n            }else{\n                this.format  = this.format.replace(/h/g, 'H');\n            }\n\n            this.dispatchEvent({type:DATE_TIME_CUSTOM_EVENTS.FORMAT_UPDATED})\n\n            this.dispatchEvent({type : DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED})\n        }\n    }\n\n    incrementDate(): boolean {\n\n        if(!this.isWithinRange(this.currentDateTime)){\n            this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n            return true\n\n        }\n\n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the next day to check if it would exceed the maximum\n\n            const nextDay = this.currentDateTime.add(1, 'day');\n            \n            // If the next day would be after the maximum date, don't increment\n            if (nextDay.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the next day to check if it would be before the minimum\n            const nextDay = this.currentDateTime.add(1, 'day');\n            \n            // If the next day would be before the minimum date, don't increment\n            if (nextDay.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to increment the day\n        this.currentDateTime = this.currentDateTime.add(1, 'day');\n        return true;\n    }\n\n    incrementMonth(): boolean {\n        if(!this.isWithinRange(this.currentDateTime)){\n            this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n            return true\n\n        }\n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the next month to check if it would exceed the maximum\n            const nextMonth = this.currentDateTime.add(1, 'month');\n            \n            // If the next month would be after the maximum date, don't increment\n            if (nextMonth.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the next month to check if it would be before the minimum\n            const nextMonth = this.currentDateTime.add(1, 'month');\n            \n            // If the next month would be before the minimum date, don't increment\n            if (nextMonth.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to increment the month\n        this.currentDateTime = this.currentDateTime.add(1, 'month');\n        return true;\n    }\n\n    incrementYear():boolean{\n        if(!this.isWithinRange(this.currentDateTime)){\n            this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n            return true\n\n        }\n        if(this.maxDate){\n            if(this.currentDateTime.isAfter(this.maxDate) || this.currentDateTime.isSame(this.maxDate,'year')){\n                return false\n            }\n        }\n\n        this.currentDateTime = this.currentDateTime.add(1, 'year');\n        return true\n\n\n    }\n\n    incrementHour(): boolean {\n        if(!this.isWithinRange(this.currentDateTime)){\n            this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n            return true\n\n        }\n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the next hour to check if it would exceed the maximum\n            const nextHour = this.currentDateTime.add(1, 'hour');\n            \n            // If the next hour would be after the maximum date, don't increment\n            if (nextHour.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the next hour to check if it would be before the minimum\n            const nextHour = this.currentDateTime.add(1, 'hour');\n            \n            // If the next hour would be before the minimum date, don't increment\n            if (nextHour.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to increment the hour\n        this.currentDateTime = this.currentDateTime.add(1, 'hour');\n        return true;\n    }\n\n    incrementMinute(): boolean {\n        if(!this.isWithinRange(this.currentDateTime)){\n            this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n            return true\n\n        }\n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the next minute to check if it would exceed the maximum\n            const nextMinute = this.currentDateTime.add(this.minuteInterval, 'minute');\n            \n            // If the next minute would be after the maximum date, don't increment\n            if (nextMinute.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the next minute to check if it would be before the minimum\n            const nextMinute = this.currentDateTime.add(this.minuteInterval, 'minute');\n            \n            // If the next minute would be before the minimum date, don't increment\n            if (nextMinute.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to increment the minute\n        this.currentDateTime = this.currentDateTime.add(this.minuteInterval, 'minute');\n        return true;\n    }\n\n    incrementSecond(): boolean {\n        if(!this.isWithinRange(this.currentDateTime)){\n            this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n            return true\n\n        }\n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the next second to check if it would exceed the maximum\n            const nextSecond = this.currentDateTime.add(1, 'second');\n            \n            // If the next second would be after the maximum date, don't increment\n            if (nextSecond.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the next second to check if it would be before the minimum\n            const nextSecond = this.currentDateTime.add(1, 'second');\n            \n            // If the next second would be before the minimum date, don't increment\n            if (nextSecond.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to increment the second\n        this.currentDateTime = this.currentDateTime.add(1, 'second');\n        return true;\n    }\n\n    incrementMillisecond():void{\n        this.currentDateTime = this.currentDateTime.add(1,'millisecond');\n\n\n    }\n\n     isWithinRange(tempDateTime: any): boolean {\n        // Check if the temporary date is within the valid range\n        const isWithinMaxRange = !this.maxDate || \n            (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n\n        const isWithinMinRange = !this.minDate || \n            (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        return isWithinMaxRange && isWithinMinRange;\n    }\n\n    changeMeridian(): void {\n        // Check if we're using a 12-hour cycle\n        if (this.optionHandler.getHourCycle() === 12) {\n            // Get the current hour\n            const currentHour = this.currentDateTime.hour();\n            \n            // Calculate the new hour (add or subtract 12 hours)\n            let newHour;\n            if (currentHour < 12) {\n                newHour = currentHour + 12; // Convert AM to PM\n            } else {\n                newHour = currentHour - 12; // Convert PM to AM\n            }\n            \n            // Create a new date with the same date but different hour\n            const tempDateTime = this.currentDateTime.hour(newHour);\n            \n            // Check if there's a maximum date and if the new time would exceed it\n            if (this.maxDate && tempDateTime.isAfter(this.maxDate)) {\n                this.minDate ? this.currentDateTime = this.minDate : this.currentDateTime = dayjs();\n                return\n            }\n            \n            // Check if there's a minimum date and if the new time would go below it\n            if (this.minDate && tempDateTime.isBefore(this.minDate)) {\n                this.currentDateTime = this.minDate;\n                return; \n            }\n            \n            // If we get here, it's safe to change the meridian\n            this.currentDateTime = tempDateTime;\n        }\n    }\n\n    decrementDate(): boolean {\n       \n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the previous day to check if it would be before the minimum\n            const prevDay = this.currentDateTime.subtract(1, 'day');\n            \n            // If the previous day would be before the minimum date, don't decrement\n            if (prevDay.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the previous day to check if it would exceed the maximum\n            const prevDay = this.currentDateTime.subtract(1, 'day');\n            \n            // If the previous day would be after the maximum date, don't decrement\n            if (prevDay.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to decrement the day\n        this.currentDateTime = this.currentDateTime.subtract(1, 'day');\n        return true;\n    }\n\n    decrementMonth(): boolean {\n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the previous month to check if it would be before the minimum\n            const prevMonth = this.currentDateTime.subtract(1, 'month');\n            \n            // If the previous month would be before the minimum date, don't decrement\n            if (prevMonth.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the previous month to check if it would exceed the maximum\n            const prevMonth = this.currentDateTime.subtract(1, 'month');\n            \n            // If the previous month would be after the maximum date, don't decrement\n            if (prevMonth.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to decrement the month\n        this.currentDateTime = this.currentDateTime.subtract(1, 'month');\n        return true;\n    }\n\n    \n\n    decrementYear():boolean{\n        if(this.minDate){\n            if(this.currentDateTime.isBefore(this.minDate) || this.currentDateTime.isSame(this.minDate,'year')){\n                return false\n            }\n        }\n        this.currentDateTime = this.currentDateTime.subtract(1, 'year');\n        return true\n    }\n\n    decrementHour(): boolean {\n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the previous hour to check if it would be before the minimum\n            const prevHour = this.currentDateTime.subtract(1, 'hour');\n            \n            // If the previous hour would be before the minimum date, don't decrement\n            if (prevHour.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the previous hour to check if it would exceed the maximum\n            const prevHour = this.currentDateTime.subtract(1, 'hour');\n            \n            // If the previous hour would be after the maximum date, don't decrement\n            if (prevHour.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to decrement the hour\n        this.currentDateTime = this.currentDateTime.subtract(1, 'hour');\n        return true;\n    }\n\n    decrementMinute(): boolean {\n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the previous minute to check if it would be before the minimum\n            const prevMinute = this.currentDateTime.subtract(this.minuteInterval, 'minute');\n            \n            // If the previous minute would be before the minimum date, don't decrement\n            if (prevMinute.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the previous minute to check if it would exceed the maximum\n            const prevMinute = this.currentDateTime.subtract(this.minuteInterval, 'minute');\n            \n            // If the previous minute would be after the maximum date, don't decrement\n            if (prevMinute.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to decrement the minute\n        this.currentDateTime = this.currentDateTime.subtract(this.minuteInterval, 'minute');\n        return true;\n    }\n\n    decrementSecond(): boolean {\n        // Check if there's a minimum date\n        if (this.minDate) {\n            // Create a temporary date with the previous second to check if it would be before the minimum\n            const prevSecond = this.currentDateTime.subtract(1, 'second');\n            \n            // If the previous second would be before the minimum date, don't decrement\n            if (prevSecond.isBefore(this.minDate)) {\n                return false;\n            }\n        }\n        \n        // Check if there's a maximum date\n        if (this.maxDate) {\n            // Create a temporary date with the previous second to check if it would exceed the maximum\n            const prevSecond = this.currentDateTime.subtract(1, 'second');\n            \n            // If the previous second would be after the maximum date, don't decrement\n            if (prevSecond.isAfter(this.maxDate)) {\n                return false;\n            }\n        }\n        \n        // If we get here, it's safe to decrement the second\n        this.currentDateTime = this.currentDateTime.subtract(1, 'second');\n        return true;\n    }\n\n    decrementMillisecond():void{\n        this.currentDateTime = this.currentDateTime.subtract(1,'millisecond');\n    }\n\n    increment():boolean{\n        const callBack = getCallbackName(this.selectedField, 'increment');\n        if(this.selectedField === \"meridian\"){\n             this.changeMeridian();\n            return true\n        }\n        if (typeof this[callBack] === 'function' && this.isWithinMaxRange()) {\n            return (this[callBack] as CallableFunction)(this.selectedField);\n            // (this[callBack] as () => SelectedPatternType[]).call(this.selectedField);\n\n        }\n        return false\n    }\n    decrement():boolean{\n        const callBack = getCallbackName(this.selectedField, 'decrement');\n        if(this.selectedField === \"meridian\"){\n             this.changeMeridian()\n             return true\n        }\n        if (typeof this[callBack] === 'function' && this.isWithinMinRange()) {\n            return (this[callBack] as CallableFunction)(this.selectedField); \n            //  (this[callBack] as () => SelectedPatternType[]).call(this.selectedField);\n\n        }\n        return false\n    }\n\n    \n\n    isWithinMaxRange(): boolean {\n        // const \n        return this.maxDate === null || this.currentDateTime.isBefore(this.maxDate);\n    }\n    \n\n    isWithinMinRange(): boolean {\n        return this.minDate === null || this.currentDateTime.isAfter(this.minDate);\n    }\n\n    setCurrentDateTime(dateTime ?: any): void {\n        this.currentDateTime = dateTime\n    }\n\n    setDateValue(value?:any){\n        this.currentDateTime = dayjs(value);\n    }\n\n    setDate(value?: any): void {\n        if (value === undefined || value === null) {\n            return;\n        }\n        \n        const dateValue = Number(value);\n        \n        // Validate the date value (1-31 depending on month)\n        if (isNaN(dateValue) || dateValue < 1 || dateValue > 31) {\n            return;\n        }\n        \n        let tempDateTime = this.currentDateTime.set(\"date\", dateValue);\n        \n        const isWithinMaxRange = !this.maxDate || (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        if (isWithinMaxRange && isWithinMinRange) {\n            this.currentDateTime = tempDateTime;\n        }\n    }\n    \n\n    setMonth(value?: any): void {\n        // If no value is provided, return early\n        if (value === undefined || value === null) {\n            return;\n        }\n        \n        // Convert the value to a number\n        const monthValue = Number(value);\n        \n        // Validate the month value (0-11 for dayjs)\n        if (isNaN(monthValue) || monthValue < 0 || monthValue > 11) {\n            return; // Invalid month value\n        }\n        \n        \n\n        let tempDateTime = this.currentDateTime.set(\"month\", monthValue)\n\n        const isWithinMaxRange = !this.maxDate || (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        // Only set currentDateTime if tempDateTime is within the valid range\n        if (isWithinMaxRange && isWithinMinRange) {\n            this.currentDateTime = tempDateTime;\n        }\n        \n\n      \n        \n        // If we get here, it's safe to set the month\n    }\n\n    setYear(value?: any): void {\n        if (value === undefined || value === null) {\n            return;\n        }\n        \n        const yearValue = Number(value);\n        \n        // Validate the year value\n        if (isNaN(yearValue)) {\n            return;\n        }\n        \n        let tempDateTime = this.currentDateTime.set(\"year\", yearValue);\n        \n        const isWithinMaxRange = !this.maxDate || (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        if (isWithinMaxRange && isWithinMinRange) {\n            this.currentDateTime = tempDateTime;\n        }\n    }\n    \n    setHour(value?: any): void {\n        if (value === undefined || value === null) {\n            return;\n        }\n        \n        const hourValue = Number(value);\n        \n        // Validate the hour value (0-23)\n        if (isNaN(hourValue) || hourValue < 0 || hourValue > 23) {\n            return;\n        }\n        \n        let tempDateTime = this.currentDateTime.set(\"hour\", hourValue);\n        \n        const isWithinMaxRange = !this.maxDate || (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        if (isWithinMaxRange && isWithinMinRange) {\n            this.currentDateTime = tempDateTime;\n        }\n    }\n    \n    setMinute(value?: any): void {\n        if (value === undefined || value === null) {\n            return;\n        }\n        \n        const minuteValue = Number(value);\n        \n        // Validate the minute value (0-59)\n        if (isNaN(minuteValue) || minuteValue < 0 || minuteValue > 59) {\n            return;\n        }\n        \n        let tempDateTime = this.currentDateTime.set(\"minute\", minuteValue);\n        \n        const isWithinMaxRange = !this.maxDate || (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        if (isWithinMaxRange && isWithinMinRange) {\n            this.currentDateTime = tempDateTime;\n        }\n    }\n    \n    setSecond(value?: any): void {\n        if (value === undefined || value === null) {\n            return;\n        }\n        \n        const secondValue = Number(value);\n        \n        // Validate the second value (0-59)\n        if (isNaN(secondValue) || secondValue < 0 || secondValue > 59) {\n            return;\n        }\n        \n        let tempDateTime = this.currentDateTime.set(\"second\", secondValue);\n        \n        const isWithinMaxRange = !this.maxDate || (tempDateTime.isBefore(this.maxDate) || tempDateTime.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (tempDateTime.isAfter(this.minDate) || tempDateTime.isSame(this.minDate));\n        \n        if (isWithinMaxRange && isWithinMinRange) {\n            this.currentDateTime = tempDateTime;\n        }\n    }\n    setMillisecond(value ?:any): void {\n        this.currentDateTime = this.currentDateTime.set(\"millisecond\", value);\n    }\n\n    changeSelectionToForward():void{\n        let index = this.formatArray.indexOf(this.selectedField);\n        if(index === this.formatArray.length-1){\n            index = -1\n        }\n            this.selectedField = this.formatArray[index + 1];\n    }\n\n    changeSelectionToBackward():void{\n        let index = this.formatArray.indexOf(this.selectedField);\n        if(index-1 === -1){\n            index = this.formatArray.length;\n        }\n        this.selectedField = this.formatArray[index - 1];\n        \n\n    }\n\n\n\n    /////////////////////\n\n\n    setSelectedField(fieldName?: string): void {\n        this.selectedField = fieldName as string;\n\n    }\n\n    \n\n    updateDateTime(value ?:any): void {\n        if (this.selectedField === \"year\") {\n            this.setYear(parseInt(value));\n        } else if (this.selectedField === \"month\") {\n            this.setMonth(parseInt(value));\n        } else if (this.selectedField === \"date\") {\n            this.setDate(parseInt(value));\n        } else if (this.selectedField === \"hour\") {\n            this.setHour(parseInt(value));\n        } else if (this.selectedField === \"minute\") {\n            this.setMinute(parseInt(value));\n        } else if (this.selectedField === \"second\") {\n            this.setSecond(parseInt(value));\n        } else if (this.selectedField === \"millisecond\") {\n            this.setMillisecond(parseInt(value));\n        }\n    }\n\n    // ##### ----- Navigators Methods ----- ##### \n\n    navigateToLeft() {\n        let index = this.formatArray.indexOf(this.selectedField);\n        if (index === 0) {\n            index = this.formatArray.length;\n        }\n        return this.selectedField = this.formatArray[index - 1];\n    }\n\n    navigateToRight() {\n        let index = this.formatArray.indexOf(this.selectedField);\n        if (index === this.formatArray.length - 1) {\n            index = -1;\n        }\n        return this.selectedField = this.formatArray[index + 1];\n    }\n\n    navigateToNextDate() {\n        this.date = this.currentDateTime.date();\n        this.currentDateTime = this.currentDateTime.set(\"date\", this.date + 1);\n        return this.getCurrentDate();\n    }\n\n    navigateToNextMonth() {\n        this.monthIndex = this.currentDateTime.month();\n        this.currentDateTime = this.currentDateTime.set(\"month\", this.monthIndex + 1);\n        return this.getCurrentMonth();\n    }\n\n    navigateToNextYear() {\n        this.year = this.currentDateTime.year();\n        this.currentDateTime = this.currentDateTime.set(\"year\", this.year + 1);\n        return this.getCurrentYear();\n    }\n\n    navigateToNextHour() {\n        this.hour = this.currentDateTime.hour();\n        this.currentDateTime = this.currentDateTime.set(\"hour\", this.hour + 1);\n        return this.getCurrentHour();\n    }\n\n    navigateToNextMinute() {\n        this.minute = this.currentDateTime.minute();\n        this.currentDateTime = this.currentDateTime.set(\"minute\", this.minute + 1);\n        return this.getCurrentMinute();\n    }\n\n    navigateToNextSecond() {\n        this.second = this.currentDateTime.second();\n        this.currentDateTime = this.currentDateTime.set(\"second\", this.second + 1);\n        return this.getCurrentSecond();\n    }\n\n    navigateToNextMillisecond() {\n        this.millisecond = this.currentDateTime.millisecond();\n        this.currentDateTime = this.currentDateTime.set(\"millisecond\", this.millisecond + 1);\n        return this.getCurrentMillisecond();\n    }\n\n    navigateToPrevDate() {\n        this.date = this.currentDateTime.date();\n        this.currentDateTime = this.currentDateTime.set(\"date\", this.date - 1);\n        return this.getCurrentDate();\n    }\n\n    navigateToPrevMonth() {\n        this.monthIndex = this.currentDateTime.month();\n        this.currentDateTime = this.currentDateTime.set(\"month\", this.monthIndex - 1);\n        return this.getCurrentMonth();\n    }\n\n    navigateToPrevYear() {\n        this.year = this.currentDateTime.year();\n        this.currentDateTime = this.currentDateTime.set(\"year\", this.year - 1);\n        return this.getCurrentYear();\n    }\n\n    navigateToPrevHour() {\n        this.hour = this.currentDateTime.hour();\n        this.currentDateTime = this.currentDateTime.set(\"hour\", this.hour - 1);\n        return this.getCurrentHour();\n    }\n\n    navigateToPrevMinute() {\n        this.minute = this.currentDateTime.minute();\n        this.currentDateTime = this.currentDateTime.set(\"minute\", this.minute - 1);\n        return this.getCurrentMinute();\n    }\n\n    navigateToPrevSecond() {\n        this.second = this.currentDateTime.second();\n        this.currentDateTime = this.currentDateTime.set(\"second\", this.second - 1);\n        return this.getCurrentSecond();\n    }\n\n    navigateToPrevMillisecond() {\n        this.millisecond = this.currentDateTime.millisecond();\n        this.currentDateTime = this.currentDateTime.set(\"millisecond\", this.millisecond - 1);\n        return this.getCurrentMillisecond();\n    }\n\n    // ##### ----- Getter Methods ----- ##### \n\n    getFormat(): string{\n        return this.format;\n    }\n\n\n    getFormatMap(): FormatType {\n        return this.formatMap;\n    }\n\n    getDefaultPattern() {\n        return this.patternArray;\n    }\n\n    getUpdatedPattern() {\n        const date = this.getCurrentDate();\n        const month = this.getCurrentMonth();\n        const year = this.getCurrentYear();\n        const hour = this.getCurrentHour();\n        const minute = this.getCurrentMinute();\n        const second = this.getCurrentSecond();\n        const millisecond = this.getCurrentMillisecond();\n\n        this.patternArray = this.patternArray.map(item => {\n            if (item.fieldName === 'date') {\n                return { ...item, placeHolder: date };\n            }\n            if (item.fieldName === 'month') {\n                return { ...item, placeHolder: month };\n            }\n            if (item.fieldName === 'year') {\n                return { ...item, placeHolder: year };\n            }\n            if (item.fieldName === 'hour') {\n                return { ...item, placeHolder: hour };\n            }\n            if (item.fieldName === 'minute') {\n                return { ...item, placeHolder: minute };\n            }\n            if (item.fieldName === 'second') {\n                return { ...item, placeHolder: second };\n            }\n            if (item.fieldName === 'millisecond') {\n                return { ...item, placeHolder: millisecond };\n            }\n            return item;\n        });\n        return this.patternArray;\n    }\n\n    getSelectedField(): string {\n        return this.selectedField;\n    }\n\n    // Current DateTime Getters\n\n    getCurrentFullDateTime(): string {\n        return this.format ? this.currentDateTime.format(this.format): this.currentDateTime.toString() ;\n    }\n\n    getCurrentDate(): string {\n        return this.currentDateTime.format(this.formatMap[\"date\"]);\n    }\n\n    getCurrentMonth(): string {\n        return this.currentDateTime.format(this.formatMap[\"month\"]);\n    }\n\n    getDateFormat(): string {\n        return this.formatMap[\"date\"] as string;\n\n    }\n\n    getCurrentYear(): string {\n        return this.currentDateTime.format(this.formatMap[\"year\"]);\n    }\n\n    getCurrentHour(): string {\n        if (this.formatMap[\"meridian\"]) {\n            return this.currentDateTime.format('hh');\n            return this.currentDateTime.format('h');\n        }\n        return this.currentDateTime.format(this.formatMap[\"hour\"]);\n    }\n\n    getCurrentMinute(): string {\n        return this.currentDateTime.format(this.formatMap[\"minute\"]);\n    }\n    getCurrentMeridian():string{\n        return this.currentDateTime.format(this.formatMap[\"meridian\"]);\n    }\n\n    getCurrentSecond(): string {\n        return this.currentDateTime.format(this.formatMap[\"second\"]);\n    }\n\n    getCurrentMillisecond(): string {\n        return this.currentDateTime.format(this.formatMap[\"millisecond\"]);\n    }\n\n    setSelectedDate(date :Dayjs|null){\n        this.selectedDateTime = date\n    }\n\n    private formatDayJs(dateString: string): Dayjs  {\n        const parsedDate = dayjs(dateString.toUpperCase(), this.format, true);\n        return parsedDate;\n    }\n\n    parseAndSetDateFromString(dateString: string): boolean {\n        if (!dateString || !this.format) {\n            return false;\n        }\n        // const parsedDate = dayjs(dateString, this.format, true);\n        const parsedDate = this.formatDayJs(dateString);\n        if (!parsedDate.isValid()) {\n            return false;\n        }\n\n        const isWithinMaxRange = !this.maxDate || (parsedDate.isBefore(this.maxDate) || parsedDate.isSame(this.maxDate));\n        const isWithinMinRange = !this.minDate || (parsedDate.isAfter(this.minDate) || parsedDate.isSame(this.minDate));\n\n        if (!isWithinMaxRange || !isWithinMinRange) {\n            return false;\n        }\n        this.currentDateTime = parsedDate;\n        this.selectedDateTime = parsedDate;\n        this.activatePlaceholder = false;\n        this.monthChanged = true;\n\n        return true;\n    }\n\n   \n\n    // Method to get selection pattern\n    getSelectionPatterns(): SelectedPatternType[] {\n        const selectionPattern : SelectedPatternType[] = [];\n        let currentIndex = 0;\n\n        this.patternArray.forEach((pattern) => {\n            const length = pattern.placeHolder.length;\n            if (pattern.fieldName !== 'separator') {\n                const object = { type: pattern.fieldName, start: currentIndex, end: currentIndex + length }\n                if(pattern.fieldName==='meridian'){\n                    object.end = object.end+1\n                }\n                selectionPattern.push(object);\n                \n            }\n            currentIndex += length;\n        });\n\n\n        return selectionPattern;\n    }\n\n    getSelectionPattern(): SelectedPatternType[] {\n        const selectionPattern: SelectedPatternType[] = [];\n        let currentIndex = 0;\n    \n        for (const pattern of this.patternArray) {\n            if (pattern.fieldName === 'separator') {\n                currentIndex++;\n                continue;\n            }\n    \n            const callBack = getCallbackName(pattern.fieldName, \"getCurrent\") as keyof this;\n            let value = (this[callBack] as CallableFunction)(pattern.fieldName) ;\n            // const value = (this[callBack] as () => SelectedPatternType[]).call(pattern.fieldName);\n            if(pattern.fieldName === 'month'){\n               \n                if(!this.monthChanged){\n                    const customFormat = this.optionHandler.getCustomFormats();\n                    if(customFormat && customFormat['month']){\n                        value = customFormat['month'] as string\n                    }else{\n                        value = this.formatMap['month'] as string\n                    }\n                }\n            }\n            \n            const length = value.length;\n    \n            const object = { type: pattern.fieldName, start: currentIndex, end: currentIndex + length };\n            if (pattern.fieldName === 'meridian') {\n                object.end = object.end + 1;\n            }\n            selectionPattern.push(object);\n    \n            currentIndex += length;\n        }\n    \n        return selectionPattern;\n    }\n\n    getValueAsTimeStamp():number{\n        // const hourCycle = this.optionHandler.getHourCycle();\n        let timestamp = this.currentDateTime.valueOf();\n        // if(hourCycle){\n        // //    const date =  dayjs.utc(timestamp).format(`${this.format} [GMT]`);\n        // //    return dayjs(date).valueOf();\n        // const GMTdate = new Date(timestamp).toUTCString();\n        // console.log(`||| timestamp ${timestamp}`)\n\n        // timestamp = dayjs.utc(GMTdate).valueOf();\n\n        // console.log(`||| GMTdate ${timestamp}`)\n\n\n        // }\n\n        return timestamp;\n    }\n\n    \n\n    setMonthChanged(value:boolean){\n        this.monthChanged = value;\n\n    }\n\n    isAllowSpecialKeys(event: KeyboardEvent): boolean {\n        const type =this.optionHandler.getType()\n        const separatorKeys = ['/', '-', ':', ' ', '.'];\n\n        if(type === 'datetimepicker'){\n            const meridianKeys = ['a','p','m']\n            separatorKeys.push(...meridianKeys)\n        }\n        const allowManualInput = this.optionHandler.isAllowManualInput();\n        const isSeparator = separatorKeys.includes(event.key.toLowerCase());\n        const allowSpecialKeys = allowManualInput && isSeparator;\n        return allowSpecialKeys ?? false;\n    }\n    \n    // getSelectionPattern(): SelectedPatternType[]{\n    //     const selectionPattern: SelectedPatternType[] = [];\n    //     let currentIndex = 0;\n\n\n    //     this.patternArray.forEach((pattern) => {\n\n    //         if (pattern.fieldName === 'separator') {\n    //             currentIndex ++;\n    //             return\n\n    //         }\n\n    //         const callBack = getCallbackName(pattern.fieldName,\"getCurrent\") \n    //         const value = this[callBack]() as SelectedPatternType[];\n    //         const length = value.length\n\n    //         if (pattern.fieldName !== 'separator') {\n\n    //             const object = { type: pattern.fieldName, start: currentIndex, end: currentIndex + length }\n    //             if(pattern.fieldName==='meridian'){\n    //                 object.end = object.end+1\n    //             }\n    //             selectionPattern.push(object);\n                \n    //         }\n    //         currentIndex += length;\n    //     });\n\n\n    //     return selectionPattern;\n    // }\n\n\n\n    // ValidationDateTime\n\n}\n\n// function getCallback(eventName: string, Hookname: string): string {\n//     if (eventName && eventName.length == 2) {\n//         return eventName;\n//     }\n    \n//     return `${Hookname}${eventName[0].toUpperCase()}${eventName.slice(1)}`;\n// }\n\nfunction getCallbackName(field: string, operation: 'increment' | 'decrement' | 'getCurrent'): keyof DateTimeModel {\n    // Example implementation; modify this as per your logic\n    return `${operation}${field.charAt(0).toUpperCase() + field.slice(1)}` as keyof DateTimeModel;\n  }\n\n  export function isSameMonthInSameYear(date1:Dayjs,date2:Dayjs):boolean{\n\n    const month1 = date1.month();\n    const month2= date2.month();\n\n    const year1 =  date1.year();\n    const year2 = date2.year();\n\n    if( (month1 === month2) && (year1 === year2)){\n        return true;\n    }\n    return false;\n\n}\n\n\nfunction generateCompID() {\n    const randomText = Math.random().toString(36).substring(2, 10);\n    return `dg-component--${randomText}`;\n  }","import { BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { CorePopupHandler } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(BEAN_NAME.POPUP_HANDLER)\nexport class PopupHandler extends CorePopupHandler {\n   \n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { PopupHandler } from \"./popup-handler\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeControllerHandlerType } from \"./date-time-controller.type\";\nimport { DateTimePickerStateManagerType } from \"./date-picker-state-manager.types\";\nimport { DateTimeModelType } from \"./date-time-model.types\";\nimport { ICalendarConfiguration } from \"../../../../calendar/src/calendar-configuration.types\";\nimport { Calendar } from \"../../../../calendar/src/calendar\";\nimport { PopupComponentPositionParams, Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { DATE_TIME_CUSTOM_EVENTS, INTERNAL_EVENTS } from \"../../constant/event-name\";\n\n\n\n@Bean(DATETIME_BEAN_NAME.DATE_PICKER_INTERACTOR)\nexport class DatePickerInteractor extends AbstractController<any>{\n\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_MODEL) protected model !: DateTimeModelType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PICKER_STATE_MANAGER) protected stateManager !: DateTimePickerStateManagerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER) controllerHandler !: DateTimeControllerHandlerType;\n    \n\n    private calendar: any;\n    private popupDestroy :any;\n\n    init(){\n    this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR, (params : any) => this.destroyCalendar(params.event));\n    this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.CREATE_CALENDAR, this.createCalendar.bind(this));\n    this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.UPDATE_CALENDAR, this.setDate.bind(this));\n    this.addListener(this.eventHandler,DATE_TIME_CUSTOM_EVENTS.CLEAR_VALUE_IN_PICKER,this.clearValue.bind(this))\n    }\n      createCalendar():void{\n        if (this.calendar) {\n            // this.destroyCalendar();\n            // return\n        } \n        else {\n            \n            const calendarParams :ICalendarConfiguration = { \n                appendTo      : this.optionsHandler.getDatePickerAppendTo(),\n                \n                value         :  this.model.getSelectedDateTime(),\n                minDate       : this.model.getMinDate(),\n                id      : createId(),\n                maxDate       : this.model.getMaxDate(),\n                monthFormat   : 'MMM',\n                inputElement  : this.controllerHandler.getDateTimeFieldController().getInputElement(),\n                format        : this.model.getFormat(),\n                ariaLabelledby: this.optionsHandler.getAriaLabelledby(),\n                      // className     : this.optionsHandler.getClassName(),\n                type             : this.optionsHandler.getType(),\n                pickerType       : this.optionsHandler.getType(),\n                minuteInterval : this.optionsHandler.getMinuteInterval(),\n                hourCycle        : this.optionsHandler.getHourCycle(),\n                showAdjacentDates: false,\n                showTimePicker   : this.optionsHandler.getShowTimePicker(),\n                onDestroy : this.stateUpdate.bind(this),\n                onChange         : (value:any)=>{\n                                    this.model.setValue(value);\n                                    this.model.setActivatePlaceholder(false);\n                                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE_BY_DATEPICKER});\n                                    const inputElement =  this.controllerHandler.getDateTimeFieldController().getInputElement();\n                                    inputElement.focus();\n                                    setTimeout(() => {\n                                        this.dispatchEvent({\n                                            type: INTERNAL_EVENTS.MAKE_SELECTION\n                                        });\n                                    }, 0);\n\n\n\n                                },\n                onClick : (_event :MouseEvent)=>{\n                                    // const type = this.optionsHandler.getType();\n                                    // if(type !== 'datetimepicker'){\n                                    //     this.destroyCalendar();\n                                    // }\n\n                            }         \n            }\n\n\n            this.calendar = new Calendar(calendarParams);\n    \n            const calendarElement = this.calendar.api.getElement();\n            const sourceElement = this.controllerHandler.getDateTimeFieldController().getDateInputWrapper() as HTMLElement;\n            \n            const positionParams: PopupComponentPositionParams = {\n                popUpElement    : calendarElement,\n                // sourceElement : this.optionsHandler.getAppendTo(),\n                sourceElement,\n                position        : Position.bottomLeft,\n                keepWithinBounds : true,\n                gapX : this.optionsHandler.getHorizontalSpacing(),\n                gapY : this.optionsHandler.getVerticalSpacing(),\n            };\n    \n            const positionCallback = this.popupHandler.positionPopupByComponent.bind(this.popupHandler, positionParams,this.optionsHandler.getDatePickerAppendTo());\n    \n            const addPopup = this.popupHandler.addPopup({\n                                childElement   : calendarElement,\n                                anchorToElement:sourceElement,\n                                // anchorToElement: this.component?.getElement() as HTMLElement,\n                                popupParentElement: this.optionsHandler.getDatePickerAppendTo(),\n                                positionCallback,\n                                ariaLabel : ''\n                            });\n            this.popupDestroy = addPopup.hideFunction;\n\n        }\n        this.stateManager.setState(true);\n        this.optionsHandler.onPickerOpen();\n\n    };\n\n    setDate(){\n        // const date = this.model.getDateAsDayjs();\n        // const formattedDateString = this.placeholderManager.getPlaceholder(); // TODO :  need change hot fix\n        // const isValidDate = !isNaN(new Date(formattedDateString).getTime()); // TODO :  need change hot fix\n        const date= this.model.getDateObject()\n       this.calendar && this.calendar.api.updateProperties({value : date})\n    }\n\n\n    destroyCalendar(event ?: Event){\n        if(this.calendar){\n            this.calendar.api.destroy();\n            this.popupDestroy();\n            this.calendar = null;\n            this.stateManager.setState(false);\n            if(event) { // need to check with implementation\n                // event.preventDefault();\n                // event.stopPropagation();\n            }\n\n        }\n      \n\n    }\n\n    stateUpdate(){\n        this.stateManager.setState(false)\n        this.calendar = null;\n\n\n    }\n\n    getId(){\n        return this.calendar?.api.getId();\n    }\n\n    private clearValue():void{\n        this.calendar.api.updateProperties({value : null})\n    }\n}\n\n\nfunction createId(){\n    return `datepicker-${Math.random().toString(36).substring(2, 9)}`;\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeApiType, subElement } from \"./date-time-api.type\";\nimport { DateTimeModel } from \"./date-time-model\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeControllerHandlerType } from \"./date-time-controller.type\";\nimport { DateTimeConfiguration } from \"../../date-time-configuration.types\";\nimport { DatePickerInteractor } from \"./date-picker-interacter\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateTimeOptionHandlerType } from \"./date-time-options-handler.types\";\nimport dayjs from \"dayjs\";\n\n@Bean(DATETIME_BEAN_NAME.DATETIME_API)\nexport class DateTimeApi extends EventEmitter implements DateTimeApiType {\n\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER) controllerHandler !        : DateTimeControllerHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) protected model !                       : DateTimeModel;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_CONFIGURATION) configuration!                  : DateTimeConfiguration;\n    @AutoWired(DATETIME_BEAN_NAME.DATE_PICKER_INTERACTOR) protected datePickerInteractor !: DatePickerInteractor;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !                        : DateTimeOptionHandlerType;\n \n\n\n\n    getElement() : HTMLElement {\n        return this.controllerHandler.getDateTimeFieldController().getElement();\n    }\n\n    getValue(): Date | null{\n        const selectedDatevalue = this.model.getSelectedDateTime()\n        if(!selectedDatevalue){\n            return null;\n        }else{\n            return this.model.getDateObject();\n        }\n    }\n    destroy(): void{\n         this.controllerHandler.getDateTimeFieldController().destroy();\n         this.datePickerInteractor.destroyCalendar()\n         \n\n\n    }\n\n    focus(){\n        this.controllerHandler.getDateTimeFieldController().focus('api');\n\n    }\n\n    blur(){\n        this.controllerHandler.getDateTimeFieldController().blur('api');\n    }\n\n    hide(subElement?: subElement[]): void {\n        if (!subElement || subElement.length === 0) {\n            // Hide the entire component if no specific elements are specified\n            return this.controllerHandler.getDateTimeFieldController().hide([]);\n        }\n\n        // Validate that all elements in subElement are valid\n        const validElements = subElement.filter(element => \n            ['prefix', 'suffix', 'label', 'description', 'inputPrefix', 'inputSuffix', 'container', 'tooltip', 'errorMessage', 'validationMessage'].includes(element)\n        );\n\n        if (validElements.length === 0) {\n            console.warn('No valid elements specified to hide');\n            return;\n        }\n\n        return this.controllerHandler.getDateTimeFieldController().hide(validElements);\n    }\n    show(subElement?: subElement[]): void {\n        if (!subElement || subElement.length === 0) {\n            // Hide the entire component if no specific elements are specified\n            return this.controllerHandler.getDateTimeFieldController().show([]);\n        }\n\n        // Validate that all elements in subElement are valid\n        const validElements = subElement.filter(element => \n            ['prefix', 'suffix', 'label', 'description', 'inputPrefix', 'inputSuffix', 'container', 'tooltip', 'errorMessage', 'validationMessage'].includes(element)\n        );\n\n        if (validElements.length === 0) {\n            console.warn('No valid elements specified to show');\n            return;\n        }\n\n        return this.controllerHandler.getDateTimeFieldController().show(validElements);\n    }\n\n    setValue(value:any){\n        const dateTime  =  new Date(value);\n        this.model.setValue(dateTime,'api');\n        this.dispatchEvent({type:DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED,option:'API'})\n\n    }\n\n    updateProperties(properties : DateTimeConfiguration) {\n        //this.controllerHandler.getDateTimeFieldController().updateProperties(options);\n        Object.entries(properties).forEach(([key, value]) => {\n            if (value !== undefined) {\n                // Cast key as keyof INumberConfiguration to maintain type safety\n                (this.configuration as any)[key] = value; \n            }\n        });\n        this.dispatchEvent({\n            type: DATE_TIME_CUSTOM_EVENTS.UPDATE_FORMAT,\n            options: properties,\n        })\n        const value = properties.value;\n\n        if(value) {\n            this.model.setValue(value,'api');\n        }else if(value === null){\n            this.model.setValue(value,'api');\n        }\n\n       \n\n        this.dispatchEvent({\n            type: \"PROPERTY_CHANGED\",\n            options: properties,\n        });\n\n    }\n\n\n    showDatePickerIcon(){\n        this.dispatchEvent({type: 'SHOW_DATEPICKER_ICON',});\n    }\n\n    getValueAsTimeStamp(): number|null {\n        const selectedDatevalue = this.model.getSelectedDateTime()\n        if(!selectedDatevalue){\n            return null; // or return Date.now(), or another appropriate default number\n        }else{\n            return this.model.getValueAsTimeStamp();\n        }\n    }\n\n    getFormattedValue(){\n        return this.model.getFormattedValue();\n    }\n\n    getTime(): string | null {\n        if (this.optionHandler.getType() !== 'timepicker') {\n            return null;\n        }\n        const selectedDateTime = this.model.getSelectedDateTime();\n        const dateTime = selectedDateTime || this.model.getDateAsDayjsForCurrentDate();\n        if (!dateTime) {\n            return null;\n        }\n        return dayjs(dateTime).format('HH:mm:ss');\n    }\n\n    openPicker(){\n        this.controllerHandler.getDateTimeFieldController().openPicker();\n    }\n\n    closePicker(){\n        this.controllerHandler.getDateTimeFieldController().closePicker();\n    }\n\n    clear(){\n        this.configuration.showFormatAsPlaceholder = true;\n        this.model.initDate(null);\n        this.model.setSelectedDate(null);\n\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\"\n        });\n        \n\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\nexport function getDateTimeRootUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('date-time', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { composeClasses } from \"@dg/utils\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { SpinButtonCompType } from \"./spin-button.types\";\nimport { getDateTimeRootUtilityClass } from \"../date-time-root/date-time-root-classes\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { DateTimeEventHandlerType } from \"../model/date-time-event-handler.types\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot    : {\n            slot     : 'spinbutton-panel',\n            modifiers: []\n        }\n\t};\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass);\n};\n\nexport class SpinButtonController extends EventEmitter {\n    private    comp                                                     !: SpinButtonCompType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !: DateTimeEventHandlerType;\n\n    setComp   (comp : SpinButtonCompType)                               : void {\n        this.comp = comp;\n\n        this.applyClasses();\n    }\n    \n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCSSClass(classes.root)\n    }\n\n    getProperty() {\n        return {\n\t\t\tincrementButton: {\n                getIcon          : () =>  this.optionsHandler.getIncrementButtonSVGIconId(),\n                getRenderer      : () => this.optionsHandler.getIncrementRenderer(),\n                getRendererParams: () => this.optionsHandler.getIncrementRendererParams(),\n                callback         : () => this.dateTimeEventHandler.onIncrement(),\n                isDisabled       : () => false,\n                getRole          : () => 'increment',\n                enableStepperButtons : () =>this.optionsHandler.enableStepperButtons(),\n                getSvgClasses : ()=>\"dg-date-time__decrement-svg\"\n\t\t\t},\n\t\t\tdecrementButton: {\n                getIcon       : () =>  this.optionsHandler.getDecrementButtonSVGIconId(),\n                renderer      : () => this.optionsHandler.getDecrementRenderer(),\n                rendererParams: () => this.optionsHandler.getDecrementRendererParams(),\n                callback      : () => this.dateTimeEventHandler.onDecrement(),\n                isDisabled    : () => false,\n                getRole       : () => 'decrement',\n                enableStepperButtons : () =>this.optionsHandler.enableStepperButtons(),\n                getSvgClasses : ()=>\"dg-date-time__increment-svg\"\n\t\t\t},\n\t\t};\n        return{}\n    }\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { SpinButtonController } from \"./spin-button-controller\";\nimport { SpinButtonCompType } from \"./spin-button.types\";\n\nconst spinButtonTemplate = (): HTMLElement => {\n    const container = document.createElement(\"div\");\n\n    const incrementButton = document.createElement(\"date-time-increment\");\n    incrementButton.setAttribute(\"ref\", \"incrementButton\");\n\n    const decrementButton = document.createElement(\"date-time-decrement\");\n    decrementButton.setAttribute(\"ref\", \"decrementButton\");\n\n    container.appendChild(incrementButton);\n    container.appendChild(decrementButton);\n\n    return container;\n};\n\nexport class SpinButtonComponent extends Component {\n    private params : any;\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n    @PostConstruct()\n    init() : void {\n        const controller = this.createBean(new SpinButtonController());\n\n        this.setTemplate(spinButtonTemplate(), {\n\t\t\tincrementButton: this.params.incrementButton,\n\t\t\tdecrementButton: this.params.decrementButton\n\t\t});\n\n        const comp : SpinButtonCompType = {\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        \n        controller.setComp(comp);\n    }\n\n    private addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { KeyCodes, KeyEventManager } from \"@dg/utils\";\nimport { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { IAdjusterList, IDestroyAdjuster } from \"./date-time-keyboard-shortcut.types\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeEventHandlerType } from \"./date-time-event-handler.types\";\n\n\n@Bean(DATETIME_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER)\nexport class DateTimeKeyBoardShortCuts extends EventEmitter {\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !: DateTimeEventHandlerType;\n\n\n\tprivate adjusterList: IAdjusterList[] = [];\n\tregisterElement(element: HTMLElement): IDestroyAdjuster {\n\t\tconst adjusterIndex = this.getAdjusterIndex(element);\n\n\t\tif (adjusterIndex !== -1) {\n\t\t\tconst adjuster = this.adjusterList[adjusterIndex];\n\t\t\treturn { destroyFunc: () => adjuster.destroyFunc() };\n\t\t}\n\t\tconst keyBoardEventHandler = this.keyBoardEventHandler(element);\n\n\t\tconst adjuster = {\n\t\t\telement: element,\n\t\t\teventHandler: keyBoardEventHandler,\n\t\t\tdestroyFunc: () => keyBoardEventHandler.destroy(),\n\t\t};\n\n\t\tthis.adjusterList.push(adjuster);\n\n\t\treturn {\n\t\t\tdestroyFunc: () => adjuster.destroyFunc(),\n\t\t};\n\t}\n\n\tprotected getAdjusterIndex(element: HTMLElement): number {\n\t\treturn this.adjusterList.findIndex(\n\t\t\t(adjuster) => adjuster.element === element,\n\t\t);\n\t}\n\n\tdeRegisterElement(element: HTMLElement): void {\n\t\tthis.adjusterList = this.adjusterList.filter(\n\t\t\t(adjuster) => adjuster.element !== element,\n\t\t);\n\t}\n\n\tprivate keyBoardEventHandler(element: HTMLElement): KeyEventManager {\n\t\tconst keyBoardShortCuts = [\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ArrowUp],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onIncrement(event),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ArrowUp],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onIncrement(event),\n\t\t\t\trepeat : true\n\t\t\t},\n            {\n\t\t\t\tkeyCombo: [KeyCodes.ArrowLeft],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onChangeSelectionToBackward(event)\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ArrowLeft],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onChangeSelectionToBackward(event),\n\t\t\t\trepeat : true\n\t\t\t},\n            {\n\t\t\t\tkeyCombo: [KeyCodes.ArrowRight],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onChangeSelectionToForward(event)\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ArrowRight],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onChangeSelectionToForward(event),\n\t\t\t\trepeat  : true\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.Enter],\n\t\t\t\tcallback: () => this.dateTimeEventHandler.onBlur(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ArrowDown],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onDecrement(event),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ArrowDown],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onDecrement(event),\n\t\t\t\trepeat : true\n\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ShiftLeft, KeyCodes.ArrowUp],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onIncrement(event),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ShiftLeft, KeyCodes.ArrowDown],\n\t\t\t\tcallback: (event : any) => {this.dateTimeEventHandler.onDecrement(event)},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ShiftLeft, KeyCodes.ArrowLeft],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onChangeSelectionToBackward(event),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.ShiftLeft, KeyCodes.ArrowRight],\n\t\t\t\tcallback: (event : any) => this.dateTimeEventHandler.onChangeSelectionToForward(event),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.MetaLeft, KeyCodes.ArrowUp],\n\t\t\t\tcallback: () =>\tthis.dateTimeEventHandler.onIncrementByShortStep(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo: [KeyCodes.MetaLeft, KeyCodes.ArrowDown],\n\t\t\t\tcallback: () => this.dateTimeEventHandler.onDecrementByShortStep(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkeyCombo : [KeyCodes.Escape],\n\t\t\t\tcallback : (event : any) => this.dateTimeEventHandler.onClosePicker(event)\n\t\t\t}\n\t\t];\n\n\t\tconst keyEventManager = new KeyEventManager(element);\n\t\tkeyEventManager.importEvents(keyBoardShortCuts as any);\n\t\treturn keyEventManager;\n\t}\n}","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeModel } from \"./date-time-model\";\nimport { SelectedPatternType } from \"./date-time-model.types\";\n\n/**\n * Service responsible for managing selection/cursor position in DateTime input.\n * Separated from Controller to follow MVC principles and improve testability.\n */\n\n@Bean(DATE_TIME__BEAN_NAME.DATE_TIME_SELECTION_SERVICE)\nexport class DateTimeSelectionService extends EventEmitter {\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) protected model!: DateTimeModel;\n\n    private isMakingSelection = false;\n\n    /**\n     * Finds the field type at a given cursor position\n     * @param cursorPosition - Current cursor position in the input\n     * @param pattern - Selection pattern array from model\n     * @returns Object with selectedField, start, and end positions\n     */\n    private findFieldAtPosition(\n        cursorPosition: number,\n        pattern: SelectedPatternType[]\n    ): { selectedField: string; start: number; end: number } | null {\n        if (!pattern || pattern.length === 0) {\n            return null;\n        }\n\n        for (const part of pattern) {\n            if (cursorPosition >= part.start && cursorPosition <= part.end) {\n                return {\n                    selectedField: part.type,\n                    start: part.start,\n                    end: part.end\n                };\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Finds the selection range for a given field type\n     * @param fieldType - The field type to find (e.g., 'date', 'month', 'year')\n     * @param pattern - Selection pattern array from model\n     * @returns Object with start and end positions, or null if not found\n     */\n    private findFieldRange(\n        fieldType: string,\n        pattern: SelectedPatternType[]\n    ): { start: number; end: number } | null {\n        if (!pattern || pattern.length === 0) {\n            return null;\n        }\n\n        for (const part of pattern) {\n            if (fieldType === part.type) {\n                return {\n                    start: part.start,\n                    end: part.end\n                };\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Validates and normalizes selection range to ensure it's within valid bounds\n     * @param start - Start position\n     * @param end - End position\n     * @param valueLength - Length of the input value\n     * @returns Normalized start and end positions\n     */\n    private validateSelectionRange(\n        start: number,\n        end: number,\n        valueLength: number\n    ): { start: number; end: number } {\n        const validStart = Math.max(0, Math.min(start, valueLength));\n        const validEnd = Math.max(validStart, Math.min(end, valueLength));\n        return { start: validStart, end: validEnd };\n    }\n\n    /**\n     * Applies selection range to the input element\n     * @param element - The HTML input element\n     * @param start - Start position\n     * @param end - End position\n     * @param waitForDOMUpdate - Whether to wait for DOM update using requestAnimationFrame\n     */\n    private applySelectionToElement(\n        element: HTMLInputElement,\n        start: number,\n        end: number,\n        waitForDOMUpdate: boolean = false\n    ): void {\n        const valueLength = element.value ? element.value.length : 0;\n        const { start: validStart, end: validEnd } = this.validateSelectionRange(start, end, valueLength);\n\n        if (waitForDOMUpdate) {\n            // Use requestAnimationFrame to ensure DOM is updated before selection\n            requestAnimationFrame(() => {\n                if (element && document.activeElement === element) {\n                    element.setSelectionRange(validStart, validEnd);\n                }\n            });\n        } else {\n            element.setSelectionRange(validStart, validEnd);\n        }\n    }\n\n    /**\n     * Handles selection based on click position\n     * Determines which field the user clicked on and selects it\n     * @param element - The HTML input element\n     * @param cursorPosition - Current cursor position\n     * @returns true if selection was applied, false otherwise\n     */\n    selectFieldAtCursorPosition(element: HTMLInputElement, cursorPosition: number | null): boolean {\n        if (this.isMakingSelection) {\n            return false; // Re-entrancy protection\n        }\n\n        if (cursorPosition === null || cursorPosition === undefined) {\n            return false;\n        }\n\n        try {\n            this.isMakingSelection = true;\n\n            const dateTimeParts = this.model.getSelectionPattern();\n            const fieldInfo = this.findFieldAtPosition(cursorPosition, dateTimeParts);\n\n            if (!fieldInfo) {\n                return false;\n            }\n\n            // Update model with selected field\n            this.model.setSelectedField(fieldInfo.selectedField);\n\n            // Apply selection to DOM\n            this.applySelectionToElement(element, fieldInfo.start, fieldInfo.end, false);\n\n            return true;\n        } catch (error) {\n            console.error('Error in selectFieldAtCursorPosition:', error);\n            return false;\n        } finally {\n            this.isMakingSelection = false;\n        }\n    }\n\n    /**\n     * Selects the field that is currently active in the model\n     * @param element - The HTML input element\n     * @param waitForDOMUpdate - Whether to wait for DOM update (default: true)\n     * @returns true if selection was applied, false otherwise\n     */\n    selectCurrentField(element: HTMLInputElement, waitForDOMUpdate: boolean = true): boolean {\n        if (this.isMakingSelection) {\n            return false; // Re-entrancy protection\n        }\n\n        try {\n            this.isMakingSelection = true;\n\n            const selectionField = this.model.getSelectedField();\n            if (!selectionField) {\n                return false;\n            }\n\n            const dateTimeParts = this.model.getSelectionPattern();\n            const range = this.findFieldRange(selectionField, dateTimeParts);\n\n            if (!range) {\n                return false;\n            }\n\n            // Apply selection to DOM\n            this.applySelectionToElement(element, range.start, range.end, waitForDOMUpdate);\n\n            return true;\n        } catch (error) {\n            console.error('Error in selectCurrentField:', error);\n            return false;\n        } finally {\n            this.isMakingSelection = false;\n        }\n    }\n\n    /**\n     * Checks if selection is currently being applied\n     * Useful for preventing concurrent selection operations\n     */\n    isSelectionInProgress(): boolean {\n        return this.isMakingSelection;\n    }\n}\n","/**\n * Constants for DateTime Input Handler\n * Centralized configuration for thresholds and key mappings\n */\n\n/**\n * Input thresholds that trigger immediate forward navigation\n * Values >= threshold trigger navigation to next field\n */\nexport const DATE_INPUT_THRESHOLDS = {\n    /** Values >= 4 trigger immediate forward navigation for date field */\n    SINGLE_DIGIT_MAX: 3,\n    /** Values >= 2 trigger immediate forward navigation for month field */\n    MONTH_SINGLE_DIGIT_MAX: 1,\n    /** Values >= 2 trigger immediate forward navigation for 12-hour cycle */\n    HOUR_12_CYCLE_THRESHOLD: 2,\n    /** Values >= 3 trigger immediate forward navigation for 24-hour cycle */\n    HOUR_24_CYCLE_THRESHOLD: 3,\n    /** Values >= 6 trigger immediate forward navigation for minute field */\n    MINUTE_THRESHOLD: 6,\n    /** Values >= 6 trigger immediate forward navigation for second field */\n    SECOND_THRESHOLD: 6,\n} as const;\n\n/**\n * Keyboard keys that are allowed without special handling\n */\nexport enum DateTimeInputKeys {\n    ENTER = 'Enter',\n    TAB = 'Tab',\n    ARROW_LEFT = 'ArrowLeft',\n    ARROW_RIGHT = 'ArrowRight',\n    ARROW_UP = 'ArrowUp',\n    ARROW_DOWN = 'ArrowDown',\n    HOME = 'Home',\n    END = 'End',\n    DELETE = 'Delete',\n    BACKSPACE = 'Backspace',\n    ESCAPE = 'Escape',\n    E_KEY = 'e',\n    MINUS = '-',\n    PLUS = '+',\n    CONTROL = 'Control',\n    META = 'Meta',\n    PERIOD = '.',\n}\n\n/**\n * Keys that are allowed when combined with Ctrl/Cmd\n */\nexport enum DateTimeCombinationKeys {\n    A = 'a', // Select All\n    C = 'c', // Copy\n    X = 'x', // Cut\n    V = 'v', // Paste\n}\n","/**\n * Simplified Placeholder Engine\n * All logic in one file - easy to understand and maintain\n */\n\nimport {\n  PlaceholderToken,\n  TokenType,\n  SelectionRange,\n  EditEvent,\n  FormatProvider,\n  EngineResult,\n} from './types';\n\nimport { ICustomFormat } from '../../../date-time-configuration.types';\n\n/**\n * Field pattern detection map\n */\nconst FIELD_PATTERNS: Record<string, TokenType> = {\n  'M': 'month',\n  'D': 'day',\n  'd': 'day',\n  'Y': 'year',\n  'y': 'year',\n  'H': 'hour',\n  'h': 'hour',\n  'm': 'minute',\n  's': 'second',\n  'S': 'millisecond',\n  'A': 'meridian',\n};\n\nconst SEPARATOR_CHARS = ['/', '-', '.', ',', ':', ' '];\n\n/**\n * Simple Placeholder Engine\n * Manages placeholder tokens and handles edit events\n */\nexport class PlaceholderEngine {\n  private tokens: PlaceholderToken[] = [];\n  private formatProvider: FormatProvider;\n  private tokenIdCounter = 0;\n  private baseFormat: string;\n  private displayFormat: ICustomFormat | string | undefined;\n\n  constructor(formatProvider: FormatProvider, baseFormat: string, displayFormat?: ICustomFormat) {\n    this.formatProvider = formatProvider;\n    this.baseFormat = baseFormat || formatProvider.getFormat();\n    this.displayFormat = displayFormat;\n    \n    // Use baseFormat to parse tokens (for correct field identification)\n    // Use displayFormat for display values (for custom formats)\n    this.tokens = this.createTokensFromFormat(this.baseFormat, this.displayFormat);\n  }\n\n  /**\n   * Creates tokens from format string\n   * Uses baseFormat to identify field types and positions\n   * Uses displayFormat (ICustomFormat object) to set display values (for custom formats)\n   * \n   * Example:\n   * baseFormat: \"MMMM DD, YYYY hh:mm A\"\n   * displayFormat: { month: \"Month\", day: \"DD\", year: \"YYYY\", hour: \"HH\", minute: \"mm\", second: \"ss\", meridian: \"tt\", separator: \":\" }\n   * -> [month token with display \"Month\", separator, day token, separator, year token, separator, hour token with display \"HH\", separator, minute token, separator, meridian token with display \"tt\"]\n   */\n  private createTokensFromFormat(baseFormat: string, displayFormat?: ICustomFormat | string): PlaceholderToken[] {\n    // Parse displayFormat string if it's a string to create a field map\n    let displayFieldMap: Map<number, string> | null = null;\n    if (typeof displayFormat === 'string') {\n      const displayFields = this.parseFormatFields(displayFormat);\n      displayFieldMap = new Map<number, string>();\n      displayFields.forEach((field, index) => {\n        displayFieldMap!.set(index, field.segment);\n      });\n    }\n    \n    // Now create tokens using baseFormat structure but displayFormat values\n    const tokens: PlaceholderToken[] = [];\n    const baseChars = baseFormat.split('');\n    let baseIndex = 0;\n    let fieldIndex = 0; // Track field position for string displayFormat\n    let separatorIndex = 0; // Track separator position for ICustomFormat\n\n    while (baseIndex < baseChars.length) {\n      const char = baseChars[baseIndex];\n\n      // Check if this starts a field pattern (M, D, Y, H, h, m, s, S, A, etc.)\n      const fieldType = FIELD_PATTERNS[char];\n      if (fieldType) {\n        // Extract the pattern from baseFormat (e.g., \"MMMM\", \"DD\", \"YYYY\", \"mm\", \"HH\", \"ss\")\n        const basePattern = this.extractPattern(baseChars, baseIndex, char);\n        \n        // Get display segment from displayFormat\n        const displaySegment = this.getDisplayValueForField(\n          fieldType,\n          displayFormat,\n          basePattern,\n          displayFieldMap,\n          fieldIndex\n        );\n        \n        // Create field token with displayFormat segment\n        const token: PlaceholderToken = {\n          id: this.generateTokenId(),\n          type: fieldType,\n          rawFormat: displaySegment, // Use displayFormat for display\n          displayValue: displaySegment, // Start with display format as placeholder\n          isFilled: false,\n          isEditable: true,\n        };\n        tokens.push(token);\n        \n        baseIndex += basePattern.length;\n        fieldIndex++;\n        continue;\n      }\n\n      // Check if separator (including ':' for time fields and ' ' for meridian)\n      if (SEPARATOR_CHARS.includes(char)) {\n        const baseSeparator = this.extractSeparator(baseChars, baseIndex, tokens);\n        \n        // Only create separator token if separator is not empty\n        if (baseSeparator.length > 0) {\n          // Get separator from displayFormat\n          const displaySeparator = this.getDisplaySeparator(displayFormat, separatorIndex, baseSeparator);\n          \n          const token: PlaceholderToken = {\n            id: this.generateTokenId(),\n            type: 'separator',\n            rawFormat: displaySeparator,\n            displayValue: displaySeparator,\n            isFilled: false,\n            isEditable: false,\n          };\n          tokens.push(token);\n          baseIndex += baseSeparator.length;\n          separatorIndex++;\n        } else {\n          // Skip this character as it's part of a multi-character separator already processed\n          baseIndex++;\n        }\n        continue;\n      }\n\n      // Unknown character - skip\n      baseIndex++;\n    }\n\n    return tokens;\n  }\n\n  /**\n   * Gets display value for a field type from displayFormat\n   * If displayFormat is ICustomFormat object, uses the corresponding property\n   * If displayFormat is string, uses the fieldMap to get segment by position\n   * Otherwise, uses basePattern as fallback\n   */\n  private getDisplayValueForField(\n    fieldType: TokenType,\n    displayFormat: ICustomFormat | string | undefined,\n    basePattern: string,\n    displayFieldMap: Map<number, string> | null,\n    fieldIndex: number\n  ): string {\n    // If displayFormat is ICustomFormat object, get value from property\n    if (displayFormat && typeof displayFormat === 'object') {\n      // Map TokenType to ICustomFormat property name\n      const formatMap: Record<TokenType, keyof ICustomFormat> = {\n        month: 'month',\n        day: 'day',\n        year: 'year',\n        hour: 'hour',\n        minute: 'minute',\n        second: 'second',\n        millisecond: 'second', // Use second for millisecond if not available\n        meridian: 'meridian',\n        separator: 'separator',\n      };\n      \n      const propertyName = formatMap[fieldType];\n      if (propertyName && displayFormat[propertyName]) {\n        return displayFormat[propertyName];\n      }\n    }\n    \n    // If displayFormat is string, use fieldMap to get segment by position\n    if (displayFieldMap && displayFieldMap.has(fieldIndex)) {\n      return displayFieldMap.get(fieldIndex)!;\n    }\n    \n    // Fallback to basePattern\n    return basePattern;\n  }\n\n  /**\n   * Gets separator from displayFormat\n   * If displayFormat is ICustomFormat, uses separator property\n   * If displayFormat is string, extracts from that position\n   * Otherwise, uses baseSeparator\n   */\n  private getDisplaySeparator(\n    displayFormat: ICustomFormat | string | undefined,\n    separatorIndex: number,\n    baseSeparator: string\n  ): string {\n    // If displayFormat is ICustomFormat object, use separator property\n    if (displayFormat && typeof displayFormat === 'object' && displayFormat.separator) {\n      return displayFormat.separator;\n    }\n    \n    // If displayFormat is string, extract separator from that position\n    if (typeof displayFormat === 'string') {\n      const separator = this.getDisplaySeparatorFromString(displayFormat, separatorIndex);\n      if (separator) {\n        return separator;\n      }\n    }\n    \n    // Fallback to baseSeparator\n    return baseSeparator;\n  }\n\n  /**\n   * Gets separator from displayFormat string at the given separator position\n   */\n  private getDisplaySeparatorFromString(displayFormat: string, separatorPosition: number): string | null {\n    const chars = displayFormat.split('');\n    let i = 0;\n    let currentSeparatorPos = 0;\n\n    while (i < chars.length && currentSeparatorPos <= separatorPosition) {\n      const char = chars[i];\n      const fieldType = FIELD_PATTERNS[char];\n      \n      if (fieldType) {\n        const pattern = this.extractPattern(chars, i, char);\n        i += pattern.length;\n        continue;\n      }\n      \n      if (SEPARATOR_CHARS.includes(char)) {\n        if (currentSeparatorPos === separatorPosition) {\n          // This is the separator we're looking for\n          const separator = this.extractSeparator(chars, i, []);\n          return separator.length > 0 ? separator : null;\n        }\n        const separator = this.extractSeparator(chars, i, []);\n        i += separator.length > 0 ? separator.length : 1;\n        currentSeparatorPos++;\n        continue;\n      }\n      \n      i++;\n    }\n\n    return null;\n  }\n\n  /**\n   * Parses format string to extract field information\n   * Returns array of { type, segment, index } for each field\n   */\n  private parseFormatFields(format: string): Array<{ type: TokenType; segment: string; index: number }> {\n    const fields: Array<{ type: TokenType; segment: string; index: number }> = [];\n    const chars = format.split('');\n    let i = 0;\n    let fieldIndex = 0;\n\n    while (i < chars.length) {\n      const char = chars[i];\n      const fieldType = FIELD_PATTERNS[char];\n      \n      if (fieldType) {\n        const pattern = this.extractPattern(chars, i, char);\n        fields.push({\n          type: fieldType,\n          segment: pattern,\n          index: fieldIndex++,\n        });\n        i += pattern.length;\n        continue;\n      }\n      \n      if (SEPARATOR_CHARS.includes(char)) {\n        const separator = this.extractSeparator(chars, i, []);\n        i += separator.length > 0 ? separator.length : 1;\n        continue;\n      }\n      \n      i++;\n    }\n\n    return fields;\n  }\n\n\n  /**\n   * Extracts field pattern (e.g., \"MMMM\", \"DD\", \"YYYY\")\n   */\n  private extractPattern(chars: string[], startIndex: number, patternChar: string): string {\n    let length = 1;\n    let i = startIndex + 1;\n\n    while (i < chars.length && chars[i] === patternChar) {\n      length++;\n      i++;\n    }\n\n    return patternChar.repeat(length);\n  }\n\n  /**\n   * Extracts separator (handles multi-character separators like \", \")\n   * Properly handles separators for time fields (hour, minute, second, meridian)\n   * \n   * @param chars - Array of characters from format string\n   * @param startIndex - Current index in chars array\n   * @param tokens - Already created tokens (to check if previous token was a comma)\n   * @returns Separator string, or empty string if already handled\n   */\n  private extractSeparator(chars: string[], startIndex: number, tokens: PlaceholderToken[]): string {\n    const char = chars[startIndex];\n    \n    // Handle multi-character separator \", \" (comma followed by space)\n    if (char === ',' && startIndex + 1 < chars.length && chars[startIndex + 1] === ' ') {\n      return ', ';\n    }\n    \n    // If this is a space, check if it's part of a \", \" separator that was already processed\n    if (char === ' ' && startIndex > 0) {\n      const prevChar = chars[startIndex - 1];\n      // If previous character was comma, check if last token is \", \" separator\n      if (prevChar === ',') {\n        const lastToken = tokens.length > 0 ? tokens[tokens.length - 1] : null;\n        // If last token is \", \" separator, this space is already part of it\n        if (lastToken && lastToken.type === 'separator' && lastToken.rawFormat === ', ') {\n          return ''; // Already handled as part of \", \"\n        }\n      }\n    }\n    \n    // For all other separators (including ':' for time fields and ' ' for meridian),\n    // return the character as separator\n    // This ensures \":\" between hour:minute:second and \" \" before meridian are properly handled\n    return char;\n  }\n\n  /**\n   * Generates unique token ID\n   */\n  private generateTokenId(): string {\n    return `token-${++this.tokenIdCounter}-${Date.now()}`;\n  }\n\n  /**\n   * Handles edit event and returns result\n   */\n  handleEvent(event: EditEvent, selection?: SelectionRange): EngineResult {\n    switch (event.type) {\n      case 'fieldFilled':\n        if (event.fieldType && event.value) {\n          this.fillField(event.fieldType, event.value);\n        }\n        break;\n\n      case 'fieldCleared':\n        if (event.fieldType) {\n          this.clearField(event.fieldType);\n        }\n        break;\n\n      case 'backspace':\n        this.handleBackspace(event.fieldType, selection);\n        break;\n\n      case 'delete':\n        this.handleDelete(event.fieldType, selection);\n        break;\n\n      case 'selectAll':\n        this.resetAllFields();\n        break;\n\n      case 'reset':\n        this.resetAllFields();\n        break;\n    }\n\n    return {\n      renderedValue: this.render(),\n      cursorPosition: this.calculateCursorPosition(event.fieldType),\n    };\n  }\n\n  /**\n   * Fills a field with a value\n   */\n  private fillField(fieldType: TokenType, value: string): void {\n    const token = this.tokens.find(t => t.type === fieldType && t.isEditable);\n    if (token) {\n      const index = this.tokens.indexOf(token);\n      this.tokens[index] = {\n        ...token,\n        displayValue: value,\n        isFilled: true,\n      };\n    }\n  }\n\n  /**\n   * Clears a field (resets to placeholder format)\n   */\n  private clearField(fieldType: TokenType): void {\n    const token = this.tokens.find(t => t.type === fieldType && t.isEditable);\n    if (token) {\n      const index = this.tokens.indexOf(token);\n      this.tokens[index] = {\n        ...token,\n        displayValue: token.rawFormat,\n        isFilled: false,\n      };\n    }\n  }\n\n  /**\n   * Handles backspace keypress\n   */\n  private handleBackspace(fieldType: TokenType | undefined, selection?: SelectionRange): void {\n    // If selection is provided and covers all text, reset all\n    if (selection && this.isAllSelected(selection)) {\n      this.resetAllFields();\n      return;\n    }\n\n    // If field type is provided, clear that field\n    if (fieldType) {\n      this.clearField(fieldType);\n    }\n  }\n\n  /**\n   * Handles delete keypress (same as backspace)\n   */\n  private handleDelete(fieldType: TokenType | undefined, selection?: SelectionRange): void {\n    this.handleBackspace(fieldType, selection);\n  }\n\n  /**\n   * Resets all editable fields to placeholder format\n   */\n  private resetAllFields(): void {\n    this.tokens = this.tokens.map(token => {\n      if (token.isEditable) {\n        return {\n          ...token,\n          displayValue: token.rawFormat,\n          isFilled: false,\n        };\n      }\n      return token;\n    });\n  }\n\n  /**\n   * Checks if selection covers all text\n   */\n  private isAllSelected(selection: SelectionRange): boolean {\n    const totalLength = this.render().length;\n    return selection.start === 0 && selection.end === totalLength && totalLength > 0;\n  }\n\n  /**\n   * Calculates cursor position for a field\n   */\n  private calculateCursorPosition(fieldType: TokenType | undefined): number | undefined {\n    if (!fieldType) return undefined;\n\n    const positioned = this.calculatePositions();\n    const token = positioned.find(t => t.type === fieldType);\n    return token ? token.start : undefined;\n  }\n\n  /**\n   * Calculates positions for all tokens\n   */\n  private calculatePositions(): Array<PlaceholderToken & { start: number; end: number }> {\n    const positioned: Array<PlaceholderToken & { start: number; end: number }> = [];\n    let currentPos = 0;\n\n    for (const token of this.tokens) {\n      const start = currentPos;\n      const end = start + token.displayValue.length;\n\n      positioned.push({\n        ...token,\n        start,\n        end,\n      });\n\n      currentPos = end;\n    }\n\n    return positioned;\n  }\n\n  /**\n   * Renders tokens to string\n   */\n  render(): string {\n    return this.tokens\n      .map(token => token.displayValue ?? token.rawFormat ?? '')\n      .join('');\n  }\n\n  /**\n   * Gets current tokens\n   */\n  getTokens(): ReadonlyArray<PlaceholderToken> {\n    return this.tokens;\n  }\n\n  /**\n   * Gets current state info\n   */\n  getState() {\n    const editableTokens = this.tokens.filter(t => t.isEditable);\n    const filledCount = editableTokens.filter(t => t.isFilled).length;\n    const totalCount = editableTokens.length;\n\n    return {\n      tokens: this.tokens,\n      filledCount,\n      totalCount,\n      isComplete: filledCount === totalCount && totalCount > 0,\n    };\n  }\n\n  /**\n   * Resets to initial format\n   */\n  reset(baseFormat?: string, displayFormat?: ICustomFormat): void {\n    const base = baseFormat || this.baseFormat || this.formatProvider.getFormat();\n    const display = displayFormat !== undefined ? displayFormat : this.displayFormat;\n    this.baseFormat = base;\n    this.displayFormat = display;\n    this.tokens = this.createTokensFromFormat(base, display);\n  }\n}\n","/**\n * Format Provider Adapter\n * Adapts DateTimeModel to FormatProvider interface\n * Enables decoupling from model\n */\n\nimport {\n  FormatProvider,\n  TokenType,\n} from '../types';\n\n/**\n * Adapter that wraps DateTimeModel and DateTimeOptionHandler\n * Implements FormatProvider interface\n */\nexport class DateTimeFormatProviderAdapter implements FormatProvider {\n  constructor(\n    private model: any, // DateTimeModel - typed as any to avoid circular dependency\n    private optionsHandler: any // DateTimeOptionHandlerType\n  ) {}\n\n  getFormat(): string {\n    return this.model.getFormat();\n  }\n\n  getFieldFormat(fieldType: TokenType): string {\n    const formatMap = this.model.getFormatMap();\n    const customFormats = this.optionsHandler.getCustomFormats();\n    \n    // Check for custom format first\n    const customFormat = customFormats?.[fieldType];\n    if (customFormat) {\n      return customFormat;\n    }\n    \n    // Use default format from formatMap\n    return formatMap[fieldType as keyof typeof formatMap] || fieldType.toUpperCase();\n  }\n\n  getFieldValue(fieldType: TokenType): string {\n    const currentDateTime = this.model.getDateAsDayjsForCurrentDate();\n    \n    if (currentDateTime) {\n      const formatPattern = this.getFieldFormat(fieldType);\n      if (formatPattern) {\n        return currentDateTime.format(formatPattern);\n      }\n    }\n    \n    // Fallback to model methods\n    return this.getFieldValueFromModel(fieldType);\n  }\n\n  getDefaultValue(fieldType: TokenType, format: string): string {\n    // Check if there's a custom format for this field\n    const customFormats = this.optionsHandler.getCustomFormats();\n    if (customFormats && customFormats[fieldType]) {\n      // Return custom format if available\n      return customFormats[fieldType];\n    }\n    \n    // Return format pattern as default\n    return format;\n  }\n\n  private getFieldValueFromModel(fieldType: TokenType): string {\n    const fieldMap: Record<string, () => string> = {\n      date: () => this.model.getCurrentDate(),\n      day: () => this.model.getCurrentDate(),\n      month: () => this.model.getCurrentMonth(),\n      year: () => this.model.getCurrentYear(),\n      hour: () => this.model.getCurrentHour(),\n      minute: () => this.model.getCurrentMinute(),\n      second: () => this.model.getCurrentSecond(),\n      meridian: () => this.model.getCurrentMeridian(),\n    };\n\n    const getter = fieldMap[fieldType];\n    return getter ? getter() : '';\n  }\n}\n","/**\n * Placeholder Engine Integration\n * Bridges new PlaceholderEngine with existing DateTimePlaceholderManager interface\n * Drop-in replacement that maintains backward compatibility\n */\n\nimport dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\n\ndayjs.extend(customParseFormat);\n\nimport { AutoWired, Bean, PostConstruct, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeModel } from \"./date-time-model\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateTimeOptionHandlerType } from \"./date-time-options-handler.types\";\nimport { DateTimeSelectionService } from \"./date-time-selection-service\";\n\n// Simplified engine imports\nimport { PlaceholderEngine } from \"./placeholder-engine/placeholder-engine\";\nimport { DateTimeFormatProviderAdapter } from \"./placeholder-engine/adapters/format-provider-adapter\";\nimport { EditEvent, SelectionRange, TokenType, PlaceholderToken } from \"./placeholder-engine/types\";\n\nconst SELECTEDFIELD_NAME = {\n    DATE: 'date',\n    MONTH: 'month',\n    YEAR: 'year',\n    HOUR: 'hour',\n    MINUTE: 'minute',\n    SECOND: 'second',\n    MILLISECOND: 'millisecond',\n    MERIDIAN: 'meridian'\n};\n\n/**\n * Integration class that wraps PlaceholderEngine\n * Implements same interface as DateTimePlaceholderManager\n * Maintains backward compatibility\n */\n@Bean(DATE_TIME__BEAN_NAME.DATE_TIME_PLACEHOLDER_MANAGER)\nexport class DateTimePlaceholderManagerIntegration extends EventEmitter {\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) protected model!: DateTimeModel;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionsHandler!: DateTimeOptionHandlerType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_SELECTION_SERVICE) protected selectionService!: DateTimeSelectionService;\n\n    private engine!: PlaceholderEngine;\n    private formatProvider!: DateTimeFormatProviderAdapter;\n    private lastMonth: string = \"\";\n    private element: HTMLInputElement | null = null;\n    private skipSyncOnGetPlaceholder: boolean = false;\n\n    @PostConstruct()\n    init(): void {\n        // Initialize format provider\n        this.formatProvider = new DateTimeFormatProviderAdapter(this.model, this.optionsHandler);\n        \n        // Get format and apply custom formats if present\n        const baseFormat = this.model.getFormat();\n        const format =this.optionsHandler.getCustomFormats();\n        \n        // Initialize engine with format (custom formats already applied)\n        this.engine = new PlaceholderEngine(this.formatProvider, baseFormat,format);\n\n        // Sync initial selected value from model if available\n        this.syncInitialValueFromModel();\n\n        // Handle event key if present\n        const eventKey = this.model.getEventKey();\n        if (eventKey) {\n            this.handleEventKey();\n        }\n\n        // Listen to format updates\n        this.addListener(\n            this.eventHandler,\n            DATE_TIME_CUSTOM_EVENTS.FORMAT_UPDATED,\n            this.setPlaceholder.bind(this)\n        );\n        this.addListener(\n            this.eventHandler,\n            DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED,\n            this.changeCustomFormat.bind(this)\n        );\n\n        // Listen to SYNC_PLACEHOLDER event to sync input value with engine and model\n        // This event is dispatched from input handler, event handler, etc.\n        // when input value changes (typing, backspace, arrow keys, etc.)\n        this.addListener(\n            this.eventHandler,\n            DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER,\n            () => {\n                // Sync input value with engine state\n                this.syncInputValueWithEngine();\n                // Sync input/engine state into model so currentDateTime is valid for increment/decrement\n                this.syncFromInputToModel();\n            }\n        );\n\n\n    }\n\n    /**\n     * Applies custom formats to format string\n     * Returns format with custom formats applied\n     * \n     * IMPORTANT: Processes patterns from longest to shortest to avoid partial matches\n     * Example: \"MMMM\" must be replaced before \"MM\" to prevent \"MM\" from matching inside \"MMMM\"\n     * Only replaces patterns that actually exist in the format string\n     */\n    // private applyCustomFormatsToFormat(baseFormat: string): string {\n    //     const customFormats = this.optionsHandler.getCustomFormats();\n    //     if (!customFormats) {\n    //         return baseFormat;\n    //     }\n\n    //     let format = baseFormat;\n    //     const formatArray = this.model.getFormatArray();\n    //     const formatMap = this.model.getFormatMap();\n        \n    //     // Create array of replacements with their patterns\n    //     const replacements: Array<{ pattern: string; newFormat: string; length: number }> = [];\n        \n    //     formatArray.forEach((item: string) => {\n    //         if (customFormats[item]) {\n    //             const formatToBeChanged = formatMap[item as keyof typeof formatMap] as string;\n    //             // Only add replacement if pattern exists in format string\n    //             if (formatToBeChanged && format.includes(formatToBeChanged)) {\n    //                 replacements.push({\n    //                     pattern: formatToBeChanged,\n    //                     newFormat: customFormats[item],\n    //                     length: formatToBeChanged.length,\n    //                 });\n    //             }\n    //         }\n    //     });\n        \n    //     // Sort by length (longest first) to avoid partial matches\n    //     // Example: \"MMMM\" (4 chars) should be replaced before \"MM\" (2 chars)\n    //     replacements.sort((a, b) => b.length - a.length);\n        \n    //     // Apply replacements in order (longest patterns first)\n    //     replacements.forEach(({ pattern, newFormat }) => {\n    //         // Only replace if pattern still exists (avoid double replacement)\n    //         if (format.includes(pattern)) {\n    //             // Use replace with regex to match exact pattern (not partial matches)\n    //             // Escape special regex characters in pattern\n    //             const escapedPattern = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    //             const regex = new RegExp(escapedPattern, 'g');\n    //             format = format.replace(regex, newFormat);\n    //         }\n    //     });\n        \n    //     return format;\n    // }\n\n    /**\n     * Handles custom format changes\n     * Applies custom formats to the format string before creating tokens\n     */\n    changeCustomFormat(): void {\n        const baseFormat = this.model.getFormat();\n        const format = this.optionsHandler.getCustomFormats();\n        \n        // Recreate engine with custom format applied\n        this.engine = new PlaceholderEngine(this.formatProvider, baseFormat,format);\n        \n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED });\n    }\n\n    /**\n     * Gets formatted value for a field\n     * Supports custom formats\n     */\n    private getFormattedValueForField(fieldName: string): string {\n        const currentDateTime = this.model.getDateAsDayjsForCurrentDate();\n        const formatMap = this.model.getFormatMap();\n        // const customFormats = this.optionsHandler.getCustomFormats();\n\n        // Check for custom format first\n        const   formatPattern = formatMap[fieldName as keyof typeof formatMap] as string;\n\n        if (currentDateTime) {\n            return currentDateTime.format(formatPattern);\n        }\n\n        // Fallback to model methods\n        switch (fieldName) {\n            case SELECTEDFIELD_NAME.DATE:\n                return this.model.getCurrentDate();\n            case SELECTEDFIELD_NAME.MONTH:\n                return this.model.getCurrentMonth();\n            case SELECTEDFIELD_NAME.YEAR:\n                return this.model.getCurrentYear();\n            case SELECTEDFIELD_NAME.HOUR:\n                return this.model.getCurrentHour();\n            case SELECTEDFIELD_NAME.MINUTE:\n                return this.model.getCurrentMinute();\n            case SELECTEDFIELD_NAME.SECOND:\n                return this.model.getCurrentSecond();\n            case SELECTEDFIELD_NAME.MERIDIAN:\n                return this.model.getCurrentMeridian();\n            default:\n                return \"\";\n        }\n    }\n\n    /**\n     * Syncs initial selected value from model to engine\n     * Called during initialization to populate engine with preloaded values\n     */\n    private syncInitialValueFromModel(): void {\n        // Check if model has a selected date/time value\n        const selectedDateTime = this.model.getSelectedDateTime();\n        const currentDateTime = this.model.getDateAsDayjsForCurrentDate();\n        \n        // Use selected date if available, otherwise use current date\n        const dateTime = selectedDateTime || currentDateTime;\n        \n        if (!dateTime || selectedDateTime === null) {\n            // No date value in model - engine will use placeholder format\n            return;\n        }\n\n        // Get format array to know which fields to fill\n        const formatArray = this.model.getFormatArray();\n        if (!formatArray || formatArray.length === 0) {\n            return;\n        }\n\n        // Fill all fields that exist in the format\n        for (const fieldName of formatArray) {\n            const value = this.getFormattedValueForField(fieldName);\n            if (!value) {\n                continue;\n            }\n\n            // Map field name to token type\n            const tokenType = this.mapFieldNameToTokenType(fieldName);\n            if (!tokenType) {\n                continue;\n            }\n\n            // Fill the field in engine\n            const event: EditEvent = {\n                type: 'fieldFilled',\n                fieldType: tokenType as TokenType,\n                value: value,\n            };\n\n            this.engine.handleEvent(event);\n\n            // Track month change if applicable\n            if (fieldName === SELECTEDFIELD_NAME.MONTH) {\n                this.lastMonth = value;\n                this.model.setMonthChanged(true);\n            }\n        }\n\n        // Check if all fields are filled and update model state\n        this.checkAndUpdateModelState();\n    }\n\n    /**\n     * Handles event key (initial field fill)\n     */\n    handleEventKey(): void {\n        const fieldName = this.model.getFormatArray()[0];\n        if (!fieldName) return;\n\n        const value = this.getFormattedValueForField(fieldName);\n        \n        // Map field name to token type\n        const tokenType = this.mapFieldNameToTokenType(fieldName);\n        if (!tokenType) return;\n\n        // Fill the field\n        const event: EditEvent = {\n            type: 'fieldFilled',\n            fieldType: tokenType as TokenType,\n            value: value,\n        };\n\n        this.engine.handleEvent(event);\n\n        // Update model state if needed\n        if (fieldName === SELECTEDFIELD_NAME.MONTH) {\n            this.lastMonth = value;\n            this.model.setMonthChanged(true);\n        }\n\n        // Check if all fields filled\n        this.checkAndUpdateModelState();\n    }\n\n    /**\n     * Sets placeholder from format\n     * Applies custom formats if present\n     */\n    setPlaceholder(): void {\n        const baseFormat = this.model.getFormat();\n        const format = this.optionsHandler.getCustomFormats()\n        \n        this.engine = new PlaceholderEngine(this.formatProvider,baseFormat, format);\n    }\n\n    /**\n     * Gets placeholder string\n     * Syncs current input value with engine state before rendering\n     * This ensures that filled values are preserved and empty fields show placeholder format\n     * \n     * IMPORTANT: Always syncs when called, even if input value exists (for initial load)\n     * This ensures that preloaded values are properly synced with the engine\n     * \n     * Example: If input is \"December 20, 2020\" and month is deleted:\n     * - Sync will update engine: month=placeholder, day=\"20\", year=\"2020\"\n     * - Render will return: \"MMMM 20, 2020\" (only month shows placeholder)\n     */\n    getPlaceholder(): string {\n        // Always sync input value with engine state if element exists\n        // This ensures the engine knows which fields are filled and which are empty\n        // Even if value is preloaded initially, sync will update the engine\n        // Skip sync only if we just updated the element value in changeFormatForSelectedField()\n        if (this.element && !this.skipSyncOnGetPlaceholder) {\n            // Sync even if value is empty - this will reset all fields to placeholder format\n            this.syncInputValueWithEngine();\n        }\n        // Reset flag after sync check\n        this.skipSyncOnGetPlaceholder = false;\n        \n        // Render will show placeholder format for unfilled tokens and actual values for filled tokens\n        return this.engine.render();\n    }\n\n    /**\n     * Gets formatted value based on engine state\n     * Returns string with filled values and placeholder format for unfilled fields\n     * Example: If only month is filled -> \"May DD, YYYY\"\n     */\n    getFormattedValue(): string {\n        const state = this.engine.getState();\n        \n        // Build formatted string: filled tokens show their value, unfilled show placeholder format\n        return state.tokens\n            .map(token => {\n                if (token.isEditable && token.isFilled) {\n                    // Show actual filled value\n                    return token.displayValue;\n                } else if (token.isEditable) {\n                    // Show placeholder format for unfilled fields\n                    return token.rawFormat;\n                } else {\n                    // Separators and non-editable tokens show as-is\n                    return token.displayValue;\n                }\n            })\n            .join('');\n    }\n\n    /**\n     * Resets placeholder to initial format\n     * Applies custom formats if present\n     */\n    resetPlaceholder(): void {\n        const baseFormat = this.model.getFormat();\n        const format = this.optionsHandler.getCustomFormats();;\n        \n        this.engine = new PlaceholderEngine(this.formatProvider, baseFormat,format);\n    }\n\n    /**\n     * Handles field change (called when field is updated)\n     */\n    change(): void {\n        const selectedField = this.model.getSelectedField();\n        if (!selectedField) return;\n\n        // Check if all fields are filled\n        const state = this.engine.getState();\n        const filledCount = state.tokens.filter(t => t.isEditable && t.isFilled).length;\n        const totalCount = state.tokens.filter(t => t.isEditable).length;\n\n        if (filledCount === totalCount) {\n            const date = this.model.getDateAsDayjsForCurrentDate();\n            this.model.setSelectedDate(date);\n            this.model.setActivatePlaceholder(false);\n            return;\n        }\n\n        // Get formatted value\n        const value = this.getFormattedValueForField(selectedField);\n        const tokenType = this.mapFieldNameToTokenType(selectedField);\n        \n        if (!tokenType) return;\n\n        // Fill the field\n        const event: EditEvent = {\n            type: 'fieldFilled',\n            fieldType: tokenType as TokenType,\n            value: value,\n        };\n\n        this.engine.handleEvent(event);\n\n        // Update model state\n        if (selectedField === SELECTEDFIELD_NAME.MONTH) {\n            this.lastMonth = value;\n            this.model.setMonthChanged(true);\n        }\n\n        // Check if all fields filled\n        this.checkAndUpdateModelState();\n    }\n\n    /**\n     * Public method to sync current input value with engine state\n     * Can be called from external handlers (input handler, event handler, etc.)\n     * to ensure engine state matches current input value\n     */\n    syncInputValue(): void {\n        this.syncInputValueWithEngine();\n    }\n\n    /**\n     * Syncs current input/engine state into the model's currentDateTime.\n     * Replaces placeholder segments with parseable defaults so the model has a valid\n     * base date for increment/decrement on any field (e.g. after backspace on month).\n     * Uses engine token positions (not model selection pattern) so positions match the input.\n     * Does not set selectedDateTime.\n     */\n    syncFromInputToModel(): void {\n        if (!this.element) {\n            return;\n        }\n        this.syncInputValueWithEngine();\n        const inputValue = this.element.value || '';\n        const format = this.model.getFormat();\n        if (!format) {\n            return;\n        }\n        const state = this.engine.getState();\n        // Calculate positions inline\n        const positioned = this.calculateTokenPositions(state.tokens);\n        let built = inputValue;\n        for (let i = positioned.length - 1; i >= 0; i--) {\n            const token = positioned[i];\n            if (!token.isEditable) {\n                continue;\n            }\n            const segment = built.substring(token.start, Math.min(token.end, built.length));\n            const isPlaceholder = !segment ||\n                this.isPlaceholderFormat(segment, token.rawFormat);\n            if (isPlaceholder) {\n                const fieldName = this.mapTokenTypeToFieldName(token.type);\n                const defaultValue = this.getDefaultValueForParsing(fieldName);\n                built = built.substring(0, token.start) + defaultValue + built.substring(Math.min(token.end, built.length));\n            }\n        }\n        const parsed = dayjs(built, format, true);\n        if (parsed.isValid()) {\n            this.model.setCurrentDateTime(parsed);\n        }\n    }\n\n    private mapTokenTypeToFieldName(tokenType: TokenType): string {\n        const mapping: Record<string, string> = {\n            day: SELECTEDFIELD_NAME.DATE,\n            month: SELECTEDFIELD_NAME.MONTH,\n            year: SELECTEDFIELD_NAME.YEAR,\n            hour: SELECTEDFIELD_NAME.HOUR,\n            minute: SELECTEDFIELD_NAME.MINUTE,\n            second: SELECTEDFIELD_NAME.SECOND,\n            millisecond: SELECTEDFIELD_NAME.MILLISECOND,\n            meridian: SELECTEDFIELD_NAME.MERIDIAN,\n        };\n        return mapping[tokenType] ?? '';\n    }\n\n    /**\n     * Default values used when building a parseable string from partial input\n     * (e.g. \"MMMM 02, 2026\" -> \"January 02, 2026\" so model has a valid base for increment/decrement).\n     */\n    private getDefaultValueForParsing(fieldType: string): string {\n        const now = dayjs();\n        const map: Record<string, string> = {\n            [SELECTEDFIELD_NAME.MONTH]: 'January',\n            [SELECTEDFIELD_NAME.DATE]: '01',\n            [SELECTEDFIELD_NAME.YEAR]: String(now.year()),\n            [SELECTEDFIELD_NAME.HOUR]: '12',\n            [SELECTEDFIELD_NAME.MINUTE]: '00',\n            [SELECTEDFIELD_NAME.SECOND]: '00',\n            [SELECTEDFIELD_NAME.MERIDIAN]: 'AM',\n        };\n        return map[fieldType] ?? '';\n    }\n\n    /**\n     * Syncs model's currentDateTime into the engine so display matches model\n     * after increment/decrement. Call after model.increment()/decrement() when\n     * selectedDateTime is null so getPlaceholder() shows the updated partial value.\n     */\n    syncModelToEngine(): void {\n        const currentDateTime = this.model.getDateAsDayjsForCurrentDate();\n        if (!currentDateTime) {\n            return;\n        }\n        const formatArray = this.model.getFormatArray();\n        if (!formatArray?.length) {\n            return;\n        }\n        for (const fieldName of formatArray) {\n            const tokenType = this.mapFieldNameToTokenType(fieldName);\n            if (!tokenType) {\n                continue;\n            }\n            const value = this.getFormattedValueForField(fieldName);\n            if (!value) {\n                continue;\n            }\n            const event: EditEvent = {\n                type: 'fieldFilled',\n                fieldType: tokenType as TokenType,\n                value,\n            };\n            this.engine.handleEvent(event);\n        }\n        if (formatArray.includes(SELECTEDFIELD_NAME.MONTH)) {\n            this.lastMonth = this.getFormattedValueForField(SELECTEDFIELD_NAME.MONTH);\n        }\n        this.skipSyncOnGetPlaceholder = true;\n    }\n\n    /**\n     * Syncs current input value with engine state\n     * Extracts filled values from input and updates tokens to preserve filled values\n     * Also resets empty fields to placeholder format\n     * \n     * This ensures that:\n     * - Filled fields (like \"20\" and \"2020\") are preserved and synced\n     * - Empty fields show placeholder format (like \"MMMM\" or \"Month\")\n     * - When getPlaceholder() is called, it returns mixed format: \"MMMM 20, 2020\"\n     * \n     * Works for both:\n     * - Initial load: \"December 20, 2020\" → syncs all fields\n     * - After deletion: \" 20, 2020\" → syncs day/year, resets month to placeholder\n     */\n    private syncInputValueWithEngine(): void {\n        if (!this.element) {\n            return;\n        }\n\n        const inputValue = this.element.value || '';\n        const dateTimeParts = this.model.getSelectionPattern();\n        \n        if (!dateTimeParts || dateTimeParts.length === 0) {\n            return;\n        }\n\n        // Process each field in the selection pattern\n        // Get fresh state for each field to account for updates\n        for (const part of dateTimeParts) {\n            // Map field type to token type\n            const tokenType = this.mapFieldNameToTokenType(part.type);\n            if (!tokenType) {\n                continue;\n            }\n\n            // Get fresh state to check current token value\n            const state = this.engine.getState();\n            const token = state.tokens.find(t => t.type === tokenType && t.isEditable);\n            if (!token) {\n                continue;\n            }\n\n            // Get substring for this field from input\n            // Use exact positions from selection pattern\n            const fieldValue = inputValue.substring(part.start, Math.min(part.end, inputValue.length)).trim();\n            \n            // Check if field has a meaningful value in input\n            // A value is meaningful if it's not empty and not just placeholder format\n            const hasValue = fieldValue && \n                            fieldValue.length > 0 && \n                            fieldValue !== token.rawFormat &&\n                            !this.isPlaceholderFormat(fieldValue, token.rawFormat);\n            \n            if (hasValue) {\n                // Field has actual value - fill the token\n                if (token.displayValue !== fieldValue || !token.isFilled) {\n                    const event: EditEvent = {\n                        type: 'fieldFilled',\n                        fieldType: tokenType as TokenType,\n                        value: fieldValue,\n                    };\n                    this.engine.handleEvent(event);\n                }\n            } else {\n                // Field is empty or contains placeholder format - reset to placeholder\n                if (token.isFilled || (token.displayValue !== token.rawFormat && fieldValue.length === 0)) {\n                    const event: EditEvent = {\n                        type: 'fieldCleared',\n                        fieldType: tokenType as TokenType,\n                    };\n                    this.engine.handleEvent(event);\n                }\n            }\n        }\n    }\n\n    /**\n     * Checks if a value is just a placeholder format (not an actual value)\n     * Helps distinguish between \"MMMM\" (placeholder) and \"December\" (actual value)\n     */\n    private isPlaceholderFormat(value: string, rawFormat: string): boolean {\n        // If value matches rawFormat exactly, it's placeholder\n        if (value === rawFormat) {\n            return true;\n        }\n        \n        // If value is all the same character as format pattern (e.g., \"MMMM\" = \"MMMM\")\n        if (rawFormat.length > 0 && value.length === rawFormat.length) {\n            const firstChar = rawFormat[0];\n            if (value.split('').every(char => char === firstChar)) {\n                return true;\n            }\n        }\n        \n        return false;\n    }\n\n    /**\n     * Changes format for selected field (BACKSPACE HANDLER)\n     * This is called from DateTimeInputHandler.handleBackspaceForSelectedField()\n     * Uses DateTimeSelectionService to get selection range from model's selection pattern\n     * \n     * IMPORTANT: Syncs current input value with engine state before handling backspace\n     * This ensures that filled fields (like \"20\" and \"2022\") are preserved\n     */\n    changeFormatForSelectedField(): string {\n        const selectedField = this.model.getSelectedField();\n        if (!selectedField) {\n            return this.getPlaceholder();\n        }\n\n        // CRITICAL: Sync current input value with engine state before backspace\n        // This preserves filled values like \"20\" and \"2022\" when resetting month\n        // For hour, minute, second, and meridian, we need to sync to ensure accurate positions\n        const isTimeField = selectedField === SELECTEDFIELD_NAME.HOUR || \n                           selectedField === SELECTEDFIELD_NAME.MINUTE || \n                           selectedField === SELECTEDFIELD_NAME.SECOND || \n                           selectedField === SELECTEDFIELD_NAME.MERIDIAN;\n        \n        // if (isTimeField && this.element) {\n        //     this.syncInputValueWithEngine();\n        // }\n\n        // Get selection range using DateTimeSelectionService\n        // First try to get from element if available (for partial selections)\n        let selection: SelectionRange | undefined;\n        if (this.element) {\n            const elementSelectionStart = this.element.selectionStart || 0;\n            const elementSelectionEnd = this.element.selectionEnd || 0;\n            \n            // If user has selected text (not just cursor), use element selection\n            if (elementSelectionStart !== elementSelectionEnd) {\n                selection = {\n                    start: elementSelectionStart,\n                    end: elementSelectionEnd,\n                };\n            } else {\n                // For hour, minute, second, and meridian, use engine token positions\n                // which are more accurate when custom formats are used\n                if (isTimeField) {\n                    const tokenType = this.mapFieldNameToTokenType(selectedField);\n                    if (tokenType) {\n                        const state = this.engine.getState();\n                        const token = state.tokens.find(t => t.type === tokenType && t.isEditable);\n                        if (token) {\n                            const positioned = this.calculateTokenPositions(state.tokens);\n                            const positionedToken = positioned.find(t => t.id === token.id);\n                            if (positionedToken) {\n                                selection = {\n                                    start: positionedToken.start,\n                                    end: positionedToken.end,\n                                };\n                            }\n                        }\n                    }\n                }\n                \n                // If engine positions not found, fall back to model's selection pattern\n                if (!selection) {\n                    const dateTimeParts = this.model.getSelectionPattern();\n                    const fieldRange = this.getFieldRangeFromPattern(selectedField, dateTimeParts);\n                    if (fieldRange) {\n                        selection = {\n                            start: fieldRange.start,\n                            end: fieldRange.end,\n                        };\n                    }\n                }\n            }\n        } else {\n            // No element, get from model's selection pattern or engine state\n            if (isTimeField) {\n                const tokenType = this.mapFieldNameToTokenType(selectedField);\n                if (tokenType) {\n                    const state = this.engine.getState();\n                    const token = state.tokens.find(t => t.type === tokenType && t.isEditable);\n                    if (token) {\n                        const positioned = this.calculateTokenPositions(state.tokens);\n                        const positionedToken = positioned.find(t => t.id === token.id);\n                        if (positionedToken) {\n                            selection = {\n                                start: positionedToken.start,\n                                end: positionedToken.end,\n                            };\n                        }\n                    }\n                }\n            }\n            \n            // Fall back to model's selection pattern if engine positions not found\n            if (!selection) {\n                const dateTimeParts = this.model.getSelectionPattern();\n                const fieldRange = this.getFieldRangeFromPattern(selectedField, dateTimeParts);\n                if (fieldRange) {\n                    selection = {\n                        start: fieldRange.start,\n                        end: fieldRange.end,\n                    };\n                }\n            }\n        }\n\n        // Map field name to token type\n        const tokenType = this.mapFieldNameToTokenType(selectedField);\n        if (!tokenType) {\n            return this.getPlaceholder();\n        }\n\n        // Create backspace event\n        const event: EditEvent = {\n            type: 'backspace',\n            fieldType: tokenType,\n        };\n\n        // ← THIS IS THE CALLBACK FOR BACKSPACE\n        const result = this.engine.handleEvent(event, selection);\n\n        // Update element value directly with the rendered result\n        // This ensures the element shows the correct value immediately\n        // Set flag to skip sync in getPlaceholder() since we just updated the element\n        // if (this.element) {\n        //     this.element.value = result.renderedValue;\n        //     this.skipSyncOnGetPlaceholder = true;\n        // }\n\n        // Update model state\n        if (selectedField === SELECTEDFIELD_NAME.MONTH) {\n            this.model.setMonthChanged(false);\n        }\n\n        // Update model\n        // this.model.setActivatePlaceholder(true);\n        this.model.setSelectedDate(null);\n\n        // Dispatch events\n        this.dispatchEvent({ type: 'EVENT_VALUE_UPDATE' });\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.CLEAR_VALUE_IN_PICKER });\n        this.optionsHandler.onChange({\n            event: {},\n            source: \"ui\",\n            type: \"onChange\",\n            value: null\n        });\n\n        return result.renderedValue;\n    }\n\n    /**\n     * Checks if month has changed\n     */\n    hasMonthchanged(): boolean {\n        return !!this.lastMonth;\n    }\n\n    /**\n     * Sets input element (for selection tracking)\n     */\n    setInputElement(element: HTMLInputElement): void {\n        this.element = element;\n    }\n\n    /**\n     * Maps field name to token type\n     */\n    private mapFieldNameToTokenType(fieldName: string): TokenType | null {\n        const mapping: Record<string, TokenType> = {\n            [SELECTEDFIELD_NAME.DATE]: 'day',\n            [SELECTEDFIELD_NAME.MONTH]: 'month',\n            [SELECTEDFIELD_NAME.YEAR]: 'year',\n            [SELECTEDFIELD_NAME.HOUR]: 'hour',\n            [SELECTEDFIELD_NAME.MINUTE]: 'minute',\n            [SELECTEDFIELD_NAME.SECOND]: 'second',\n            [SELECTEDFIELD_NAME.MILLISECOND]: 'millisecond',\n            [SELECTEDFIELD_NAME.MERIDIAN]: 'meridian',\n        };\n        return mapping[fieldName] || null;\n    }\n\n    /**\n     * Checks if all fields are filled and updates model state\n     */\n    private checkAndUpdateModelState(): void {\n        const state = this.engine.getState();\n        const filledCount = state.tokens.filter(t => t.isEditable && t.isFilled).length;\n        const totalCount = state.tokens.filter(t => t.isEditable).length;\n\n        if (filledCount === totalCount) {\n            const date = this.model.getDateAsDayjsForCurrentDate();\n            this.model.setSelectedDate(date);\n            this.model.setActivatePlaceholder(false);\n        }\n    }\n\n    /**\n     * Gets field range from model's selection pattern\n     * Uses same logic as DateTimeSelectionService.findFieldRange\n     */\n    private getFieldRangeFromPattern(\n        fieldType: string,\n        pattern: any[]\n    ): { start: number; end: number } | null {\n        if (!pattern || pattern.length === 0) {\n            return null;\n        }\n\n        for (const part of pattern) {\n            if (fieldType === part.type) {\n                return {\n                    start: part.start,\n                    end: part.end\n                };\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Finds segment for field (for backward compatibility)\n     * Returns positions from engine state\n     */\n    findSegment(type: string): { start: number; end: number } {\n        // First try to get from model's selection pattern (more accurate)\n        const dateTimeParts = this.model.getSelectionPattern();\n        const patternRange = this.getFieldRangeFromPattern(type, dateTimeParts);\n        if (patternRange) {\n            return patternRange;\n        }\n\n        // Fallback to engine state calculation\n        const state = this.engine.getState();\n        const token = state.tokens.find(t => t.type === type);\n        \n        if (!token) {\n            return { start: 0, end: 0 };\n        }\n\n        // Calculate positions\n        const positioned = this.calculateTokenPositions(state.tokens);\n        const positionedToken = positioned.find(t => t.id === token.id);\n        \n        if (positionedToken) {\n            return { start: positionedToken.start, end: positionedToken.end };\n        }\n\n        return { start: 0, end: 0 };\n    }\n\n    /**\n     * Finds segment in placeholder (for backward compatibility)\n     */\n    findSegmentInPlaceholder(type: string): { start: number; end: number } {\n        return this.findSegment(type);\n    }\n\n    /**\n     * Calculates positions for tokens (simplified helper)\n     */\n    private calculateTokenPositions(tokens: ReadonlyArray<PlaceholderToken>): Array<PlaceholderToken & { start: number; end: number }> {\n        const positioned: Array<PlaceholderToken & { start: number; end: number }> = [];\n        let currentPos = 0;\n\n        for (const token of tokens) {\n            const start = currentPos;\n            const end = start + token.displayValue.length;\n\n            positioned.push({\n                ...token,\n                start,\n                end,\n            });\n\n            currentPos = end;\n        }\n\n        return positioned;\n    }\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeEventHandlerType } from \"./date-time-event-handler.types\";\nimport { DateTimeModel } from \"./date-time-model\";\nimport { DATE_TIME_CUSTOM_EVENTS, INTERNAL_EVENTS } from \"../../constant/event-name\";\nimport { DateTimeOptionHandlerType } from \"./date-time-options-handler.types\";\nimport { DateTimeSelectionService } from \"./date-time-selection-service\";\nimport { DATE_INPUT_THRESHOLDS, DateTimeInputKeys, DateTimeCombinationKeys } from \"./date-time-input-constants\";\nimport { DateTimePlaceholderManagerIntegration } from \"./placeholder-engine-integration\";\n\n\nconst SELECTEDFIELD = {\n    DATE       : 'date',\n    MONTH      : 'month',\n    YEAR       : 'year',\n    HOUR       : 'hour',\n    MINUTE     : 'minute',\n    SECOND     : 'second',\n    MILLISECOND: 'millisecond'\n}\n\n\n@Bean(DATETIME_BEAN_NAME.DATETIME_INPUT_HANDLER)\nexport class DateTimeInputHandler extends EventEmitter {\n    private element!: HTMLInputElement | null;\n    private keyDownHandler?: (event: KeyboardEvent) => void;\n    private compositionStartHandler?: () => void;\n    private compositionEndHandler?: () => void;\n    private pasteHandler?: (event: ClipboardEvent) => void;\n    \n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !: DateTimeEventHandlerType;\n\t@AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) model!: DateTimeModel;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PLACEHOLDER_MANAGER) protected placeholderManager !: DateTimePlaceholderManagerIntegration;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionsHandler !: DateTimeOptionHandlerType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_SELECTION_SERVICE) protected selectionService !: DateTimeSelectionService;\n\n    // Re-entrancy and state management\n    private isProcessing = false;\n    private isComposing = false;\n    private lastTypedNumber : string | null = null;\n    private lastSelectedField !:string;\n    private pendingOnChange: ReturnType<typeof setTimeout> | null = null;\n\n    // Allowed keys using constants\n    private allowedKeys = [ \n        DateTimeInputKeys.ENTER,\n        DateTimeInputKeys.TAB,\n        DateTimeInputKeys.ARROW_LEFT,\n        DateTimeInputKeys.ARROW_RIGHT,\n        DateTimeInputKeys.ARROW_UP,\n        DateTimeInputKeys.ARROW_DOWN,\n        DateTimeInputKeys.HOME,\n        DateTimeInputKeys.END,\n        DateTimeInputKeys.E_KEY,\n        DateTimeInputKeys.MINUS,\n        DateTimeInputKeys.PLUS,\n        DateTimeInputKeys.CONTROL,\n        DateTimeInputKeys.META,\n        DateTimeInputKeys.PERIOD,\n    ];\n\n    private combinationAllowedKeys = [\n        DateTimeCombinationKeys.A,\n        DateTimeCombinationKeys.C,\n        DateTimeCombinationKeys.X,\n        DateTimeCombinationKeys.V,\n    ];\n    private monthMaping = {\n        \"j\"  : 0,\n        \"ja\"  : 0,\n        \"f\"  : 1,\n        \"m\"  : 2,\n        \"ma\" : 2,\n        \"mar\": 2,\n        \"a\"  : 3,\n        \"ap\" : 3,\n        \"may\": 4,\n        \"ju\" : 5,\n        \"jun\": 5,\n        \"jul\": 6,\n        \"au\" : 7,\n        \"s\"  : 8,\n        \"o\"  : 9,\n        \"n\"  : 10,\n        \"d\"  : 11,\n    }\n\n\n    registerElement(element: HTMLInputElement): void {\n        this.deregisterElement();\n\n        if (this.element) return;\n\n        this.element = element;\n        \n        // Set input element in placeholder manager so it can sync values\n        // This ensures placeholder engine can access current input value for syncing\n        if (this.placeholderManager && typeof (this.placeholderManager as any).setInputElement === 'function') {\n            (this.placeholderManager as any).setInputElement(element);\n        }\n        \n        this.registerEvents();\n    }\n\n    protected registerEvents(): void {\n        if (this.element) {\n            // Register keydown handler\n            this.keyDownHandler = (event: KeyboardEvent) => this.onKeyDown(event);\n            this.element.addEventListener('keydown', this.keyDownHandler);\n            \n            // Register IME/composition handlers (P0 Fix #1)\n            this.compositionStartHandler = () => {\n                this.isComposing = true;\n            };\n            this.compositionEndHandler = () => {\n                this.isComposing = false;\n            };\n            this.element.addEventListener('compositionstart', this.compositionStartHandler);\n            this.element.addEventListener('compositionend', this.compositionEndHandler);\n            \n            // Register paste handler (P1 Fix #7)\n            this.pasteHandler = (event: ClipboardEvent) => this.onPaste(event);\n            this.element.addEventListener('paste', this.pasteHandler);\n        }\n    }\n\n    deregisterElement(): void {\n        if (this.element) {\n            if (this.keyDownHandler) {\n                this.element.removeEventListener('keydown', this.keyDownHandler);\n                this.keyDownHandler = undefined;\n            }\n            if (this.compositionStartHandler) {\n                this.element.removeEventListener('compositionstart', this.compositionStartHandler);\n                this.compositionStartHandler = undefined;\n            }\n            if (this.compositionEndHandler) {\n                this.element.removeEventListener('compositionend', this.compositionEndHandler);\n                this.compositionEndHandler = undefined;\n            }\n            if (this.pasteHandler) {\n                this.element.removeEventListener('paste', this.pasteHandler);\n                this.pasteHandler = undefined;\n            }\n            this.element = null;\n        }\n        \n        // Clear pending timeouts\n        if (this.pendingOnChange) {\n            clearTimeout(this.pendingOnChange);\n            this.pendingOnChange = null;\n        }\n        \n        // Reset state\n        this.isProcessing = false;\n        this.isComposing = false;\n        this.lastTypedNumber = null;\n    }\n    protected onKeyDown(event: KeyboardEvent): void {\n        // P0 Fix #3: Re-entrancy protection\n        if (this.isProcessing) {\n            return;\n        }\n        \n        // P0 Fix #1: Block processing during IME composition\n        if (this.isComposing) {\n            return;\n        }\n        \n        try {\n            this.isProcessing = true;\n            \n            // P0 Fix #4: Capture selection before any processing\n            this.captureSelection();\n            \n            // Early return for readonly mode\n            if (this.optionsHandler.isReadonly()) {\n                return;\n            }\n\n            // Handle manual input mode restrictions\n            if (this.optionsHandler.isAllowManualInput()) {\n                const allowSpecialKeys = this.model.isAllowSpecialKeys(event);\n                if (this.checkAllowedKeys(event) && !allowSpecialKeys) {\n                    return;\n                }\n                const isAlphanumeric = /^[a-zA-Z0-9]$/.test(event.key);\n                if (isAlphanumeric) {\n                    return;\n                }\n            }\n\n            // Prevent Alt key on Mac\n            if (event.altKey) {\n                event.preventDefault();\n                return;\n            }\n\n            // Skip processing for all browser default actions with modifier keys (Cmd/Ctrl)\n            // This prevents handler from interfering with browser shortcuts like:\n            // Cmd+R (Refresh), Cmd+S (Save), Cmd+W (Close), Cmd+N (New), Cmd+T (New Tab),\n            // Cmd+P (Print), Cmd+Z (Undo), Cmd+Y (Redo), Cmd+A (Select All), etc.\n            if (event.ctrlKey || event.metaKey) {\n                // Allow only specific combinations we want to handle:\n                // - Cmd/Ctrl+C (Copy) - already in allowedKeys\n                // - Cmd/Ctrl+V (Paste) - we have a paste handler\n                // - Cmd/Ctrl+X (Cut) - already in allowedKeys\n                // - Cmd/Ctrl+A (Select All) - browser handles it\n                const key = event.key.toLowerCase();\n                const allowedModifierKeys = ['c', 'v', 'x', 'a'];\n                \n                // If it's not an allowed modifier combination, skip processing\n                if (!allowedModifierKeys.includes(key)) {\n                    return; // Let browser handle the shortcut\n                }\n                \n                // For Cmd/Ctrl+A, let browser handle Select All\n                if (key === 'a') {\n                    return;\n                }\n                \n                // For Cmd/Ctrl+V, our paste handler will process it\n                // For Cmd/Ctrl+C and Cmd/Ctrl+X, they're in allowedKeys and will be handled by browser\n                // Continue processing for these cases\n            }\n\n            let handled = false;\n\n            // Handle Delete key when all content is selected\n            if (event.key === DateTimeInputKeys.DELETE && this.element) {\n                if (this.isAllContentSelected()) {\n                    this.clearValue();\n                    handled = true;\n                }\n                // P1 Fix #6: Only prevent default if we handled it\n                if (handled) {\n                    event.preventDefault();\n                }\n                return;\n            }\n\n            // Handle Backspace key\n            if (event.key === DateTimeInputKeys.BACKSPACE) {\n                if (this.element && this.isAllContentSelected()) {\n                    this.clearValue();\n                } else {\n                    this.handleBackspaceForSelectedField();\n                }\n                handled = true;\n                // P1 Fix #6: Only prevent default if we handled it\n                if (handled) {\n                    event.preventDefault();\n                }\n                return;\n            }\n\n            // Handle field-specific editing\n            this.handleFieldEditing(event);\n        } catch (error) {\n            // P2 Fix #11: Error handling\n            console.error('Error in onKeyDown:', error, { event });\n            // Fallback: trigger value update to restore state\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        } finally {\n            this.isProcessing = false;\n        }\n    }\n    \n    /**\n     * P0 Fix #4: Capture selection before mutation\n     * Note: Selection is captured but restoration is handled by selectionService\n     */\n    private captureSelection(): void {\n        // Selection capture ensures we have current state before mutation\n        // Actual restoration is handled by selectionService.selectCurrentField()\n        // This method exists for potential future use or debugging\n    }\n    \n    /**\n     * P1 Fix #7: Handle paste events\n     */\n    private onPaste(event: ClipboardEvent): void {\n        if (this.isProcessing || this.isComposing) {\n            return;\n        }\n        \n        event.preventDefault();\n        \n        try {\n            this.isProcessing = true;\n            const pastedText = event.clipboardData?.getData('text') || '';\n            \n            if (!pastedText.trim()) {\n                return;\n            }\n            \n            // Parse and validate pasted content\n            const success = this.model.parseAndSetDateFromString(pastedText);\n            if (success) {\n                this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                this.dispatchEvent({ type: INTERNAL_EVENTS.MAKE_SELECTION });\n                this.optionsHandler.onChange({\n                    event: {},\n                    source: \"ui\",\n                    type: \"onChange\",\n                    value: this.model.getDateObject()\n                });\n            } else {\n                // Invalid paste - restore previous value\n                this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n            }\n        } catch (error) {\n            console.error('Error in onPaste:', error);\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        } finally {\n            this.isProcessing = false;\n        }\n    }\n\n    private clearValue(): void {\n        // Sync current input value before clearing (for Cmd+A + Backspace scenario)\n        // This ensures engine knows what was selected before clearing\n        // Dispatch SYNC_PLACEHOLDER event which the integration class listens to\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        \n        this.model.setActivatePlaceholder(true);\n        this.model.setSelectedDate(null);\n        this.placeholderManager.resetPlaceholder();\n        this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.CLEAR_VALUE_IN_PICKER });\n        this.optionsHandler.onChange({ event: {}, source: \"ui\", type: \"onChange\", value: null });\n    }\n\n    private handleBackspaceForSelectedField(): void {\n        try {\n            // Sync current input value with placeholder engine before handling backspace\n            // This ensures engine knows current filled values (like \"20\" and \"2020\")\n            // Dispatch SYNC_PLACEHOLDER event which the integration class listens to\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n            \n            this.placeholderManager.changeFormatForSelectedField();\n            this.model.setActivatePlaceholder(true);\n            this.model.setSelectedDate(null);\n            \n            // P0 Fix #5: Validate state sync\n            this.validateStateSync();\n            \n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.CLEAR_VALUE_IN_PICKER });\n            this.optionsHandler.onChange({ event: {}, source: \"ui\", type: \"onChange\", value: null });\n            \n            // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n            this.restoreSelection();\n        } catch (error) {\n            console.error('Error in handleBackspaceForSelectedField:', error);\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n    \n    /**\n     * P1 Fix #8: Restore selection using requestAnimationFrame\n     */\n    private restoreSelection(): void {\n        if (!this.element) return;\n        \n        requestAnimationFrame(() => {\n            if (this.element && document.activeElement === this.element) {\n                this.selectionService.selectCurrentField(this.element, true);\n            }\n        });\n    }\n    \n    /**\n     * P0 Fix #5: Validate state synchronization\n     */\n    private validateStateSync(): void {\n        if (!this.element) return;\n        \n        try {\n            const domValue = this.element.value || '';\n            const modelValue = this.model.getValue();\n            const modelValueStr = modelValue && modelValue !== 'Invalid Date' ? String(modelValue) : '';\n            \n            // If Model has a value, DOM should match (unless placeholder is active)\n            if (this.model.getSelectedDateTime() && !this.model.isActivatePlaceholder()) {\n                if (domValue !== modelValueStr && modelValueStr !== '') {\n                    console.warn('State desync detected: DOM value does not match Model value', {\n                        domValue,\n                        modelValue: modelValueStr\n                    });\n                    // Trigger recovery: sync DOM from Model\n                    this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                }\n            }\n        } catch (error) {\n            console.error('Error validating state sync:', error);\n        }\n    }\n\n    private handleFieldEditing(event: KeyboardEvent): void {\n        try {\n            const selectedField = this.model.getSelectedField();\n            const value = parseInt(event.key);\n\n            // Reset last typed number if field changed\n            if (this.lastSelectedField && selectedField !== this.lastSelectedField) {\n                this.lastTypedNumber = null;\n            }\n\n            // Update last selected field and call appropriate edit method\n            this.lastSelectedField = selectedField;\n\n            switch (selectedField) {\n                case SELECTEDFIELD.DATE:\n                    this.editDate(value, event);\n                    break;\n                case SELECTEDFIELD.MONTH:\n                    this.editMonth(value, event);\n                    break;\n                case SELECTEDFIELD.YEAR:\n                    this.editYear(value, event);\n                    break;\n                case SELECTEDFIELD.HOUR:\n                    this.editHour(value, event);\n                    break;\n                case SELECTEDFIELD.MINUTE:\n                    this.editMinute(value, event);\n                    break;\n                case SELECTEDFIELD.SECOND:\n                    this.editSecond(value, event);\n                    break;\n                case 'meridian':\n                    this.editMeridian(event.key, event);\n                    break;\n            }\n\n            // Sync current input value with placeholder engine after field editing\n            // This ensures engine state matches the updated input value\n            // Dispatch SYNC_PLACEHOLDER event which the integration class listens to\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n\n            // P1 Fix #9: Debounce onChange callbacks\n            this.debouncedOnChange();\n            \n            // P0 Fix #5: Validate state sync after edit\n            this.validateStateSync();\n        } catch (error) {\n            console.error('Error in handleFieldEditing:', error, { event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n    \n    /**\n     * P1 Fix #9: Debounce onChange callbacks for rapid input\n     */\n    private debouncedOnChange(): void {\n        if (this.pendingOnChange) {\n            clearTimeout(this.pendingOnChange);\n        }\n        \n        this.pendingOnChange = setTimeout(() => {\n            if (this.model.getSelectedDateTime()) {\n                this.optionsHandler.onChange({ \n                    event: {}, \n                    source: \"ui\", \n                    type: \"onChange\", \n                    value: this.model.getDateObject() \n                });\n            }\n            this.pendingOnChange = null;\n        }, 100); // 100ms debounce\n    }\n\n\n    protected editDate(value: number, event: KeyboardEvent): void {\n        try {\n            if(isNaN(value)) {\n                return;\n            }\n            \n            // P2 Fix #12: Use constants instead of magic numbers\n            if(value > DATE_INPUT_THRESHOLDS.SINGLE_DIGIT_MAX && !this.lastTypedNumber){\n                this.model.setDate(value);\n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate){\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                this.dateTimeEventHandler.onChangeSelectionToForward(event);\n            }else{\n                if(!this.lastTypedNumber){\n                    this.model.setDate(value);\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate){\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                    this.restoreSelection();\n                    this.lastTypedNumber = String(value);\n                }else{\n                    const newValue = `${this.lastTypedNumber}${String(value)}`;\n                    this.model.setDate(parseInt(newValue));\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate){\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                    this.lastTypedNumber = null;\n                }\n            }\n        } catch (error) {\n            console.error('Error in editDate:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n    protected editMonth(value: number, event: KeyboardEvent): void {\n        try {\n            if(!isNaN(value)){\n                // P2 Fix #12: Use constants instead of magic numbers\n                if(value > DATE_INPUT_THRESHOLDS.MONTH_SINGLE_DIGIT_MAX && !this.lastTypedNumber){\n                    this.model.setMonth(value-1);\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate){\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                }\n                else{\n                    if(!this.lastTypedNumber){\n                        this.model.setMonth(value-1);\n                        const selectedDate = this.model.getSelectedDateTime();\n                        if(!selectedDate){\n                            this.placeholderManager.change();\n                        }\n                        this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                        // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                        this.restoreSelection();\n                        this.lastTypedNumber = String(value);\n                    }else{\n                        const newValue = `${this.lastTypedNumber}${String(value)}`;\n                        const month = parseInt(newValue)-1;\n        \n                        if(month >= 13){\n                            this.model.setMonth(parseInt(this.lastTypedNumber));\n                        }else{\n                            this.model.setMonth(month);\n                        }\n                        const selectedDate = this.model.getSelectedDateTime();\n                        if(!selectedDate){\n                            this.placeholderManager.change();\n                        }\n        \n                        this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                        this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                        this.lastTypedNumber = null;\n                    }\n                }\n\n            }else{\n                const key = event.key.toLowerCase() as (keyof typeof this.monthMaping);\n\n                if((key ==='f'|| key === \"s\" || key ==='o' || key ==='n' || key ==='d') && !this.lastTypedNumber){\n                    const month = this.monthMaping[`${key}`];\n                    this.model.setMonth(month);\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate){\n                        this.placeholderManager.change();\n                    }\n                    \n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                    this.restoreSelection();\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n\n                }else{\n                    if(!this.lastTypedNumber){\n                        const month = this.monthMaping[`${key}`];\n                        if(month === undefined || month === null){\n                            this.lastTypedNumber = null;\n                            return;\n                        }\n                        this.model.setMonth(month);\n                        const selectedDate = this.model.getSelectedDateTime();\n                        if(!selectedDate){\n                            this.placeholderManager.change();\n                        }\n                        this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                        // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                        this.restoreSelection();\n                        this.lastTypedNumber = key;\n                    }else{\n                        this.lastTypedNumber = `${this.lastTypedNumber}${key}`;\n                        const month = this.monthMaping[`${this.lastTypedNumber}` as keyof typeof this.monthMaping];\n                        if(month === undefined || month === null){\n                            this.lastTypedNumber = null;\n                            return;\n                        }\n                        this.model.setMonth(month);\n                        const selectedDate = this.model.getSelectedDateTime();\n                        if(!selectedDate){\n                            this.placeholderManager.change();\n                        }\n                        this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                        // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                        this.restoreSelection();\n\n                        if (this.lastTypedNumber.length >= 3 || this.lastTypedNumber ===\"au\" || this.lastTypedNumber ===\"ja\") {\n                            this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                            this.lastTypedNumber = null;\n                        } \n\n                    }\n                }\n            }\n        } catch (error) {\n            console.error('Error in editMonth:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n\n    protected editYear(value: number, event: KeyboardEvent): void {\n        try {\n            if(isNaN(value)) {\n                return;\n            }\n            \n            // P1 Fix #10: Get actual year length dynamically from format\n            const formatMap = this.model.getFormatMap();\n            const yearPattern = formatMap.year || 'YYYY';\n            const yearLength = yearPattern.length; // Dynamic, not hardcoded\n\n            if (!this.lastTypedNumber) {\n                this.lastTypedNumber = String(value);\n                this.model.setYear(value);\n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate){\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                this.restoreSelection();\n            } else {\n                this.lastTypedNumber = `${this.lastTypedNumber}${String(value)}`;\n                this.model.setYear(parseInt(this.lastTypedNumber));\n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate){\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                this.restoreSelection();\n\n                if (this.lastTypedNumber.length >= yearLength) {\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                    this.lastTypedNumber = null;\n                } \n            }\n        } catch (error) {\n            console.error('Error in editYear:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n    protected editHour(value: number, event: KeyboardEvent): void {\n        try {\n            if(isNaN(value)) {\n                return;\n            }\n\n            // Get hour cycle (12 or 24)\n            const hourCycle = this.optionsHandler.getHourCycle();\n            const maxHour = hourCycle === 12 ? 12 : 23;\n\n            // P2 Fix #12: Use constants instead of magic numbers\n            const threshold = hourCycle === 12 \n                ? DATE_INPUT_THRESHOLDS.HOUR_12_CYCLE_THRESHOLD \n                : DATE_INPUT_THRESHOLDS.HOUR_24_CYCLE_THRESHOLD;\n\n            if(value > threshold && !this.lastTypedNumber) {\n                // For single digits that are too large to be first digit of valid hour\n                this.model.setHour(value);\n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate) {\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                this.dateTimeEventHandler.onChangeSelectionToForward(event);\n            } else {\n                if(!this.lastTypedNumber) {\n                    // First digit entered\n                    this.model.setHour(value);\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate) {\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                    this.restoreSelection();\n                    this.lastTypedNumber = String(value);\n                } else {\n                    // Second digit entered\n                    const newValue = `${this.lastTypedNumber}${String(value)}`;\n                    const hour = parseInt(newValue);\n                    \n                    // Validate hour based on hour cycle\n                    if(hour > maxHour) {\n                        this.model.setHour(parseInt(this.lastTypedNumber));\n                    } else {\n                        this.model.setHour(hour);\n                    }\n                    \n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate) {\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                    this.lastTypedNumber = null;\n                }\n            }\n        } catch (error) {\n            console.error('Error in editHour:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n    protected editMinute(value: number, event: KeyboardEvent): void {\n        try {\n            if(isNaN(value)) {\n                return;\n            }\n\n            // Handle minute intervals if configured\n            const minuteInterval = this.optionsHandler.getMinuteInterval();\n\n            // P2 Fix #12: Use constants instead of magic numbers\n            if(value > DATE_INPUT_THRESHOLDS.MINUTE_THRESHOLD && !this.lastTypedNumber) {\n                // For single digits that are too large to be first digit of valid minute\n                const roundedMinute = Math.round(value / minuteInterval) * minuteInterval;\n                this.model.setMinute(roundedMinute);\n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate) {\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                this.dateTimeEventHandler.onChangeSelectionToForward(event);\n            } else {\n                if(!this.lastTypedNumber) {\n                    // First digit entered\n                    this.model.setMinute(value);\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate) {\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                    this.restoreSelection();\n                    this.lastTypedNumber = String(value);\n                } else {\n                    // Second digit entered\n                    const newValue = `${this.lastTypedNumber}${String(value)}`;\n                    const minute = parseInt(newValue);\n                    \n                    if(minute > 59) {\n                        this.model.setMinute(parseInt(this.lastTypedNumber));\n                    } else {\n                        // Round to nearest interval if configured\n                        const roundedMinute = minuteInterval > 1 ? \n                            Math.round(minute / minuteInterval) * minuteInterval : \n                            minute;\n                        this.model.setMinute(roundedMinute);\n                    }\n                    \n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate) {\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                    this.lastTypedNumber = null;\n                }\n            }\n        } catch (error) {\n            console.error('Error in editMinute:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n    protected editSecond(value: number, event: KeyboardEvent): void {\n        try {\n            if(isNaN(value)) {\n                return;\n            }\n\n            // P2 Fix #12: Use constants instead of magic numbers\n            if(value > DATE_INPUT_THRESHOLDS.SECOND_THRESHOLD && !this.lastTypedNumber) {\n                // For single digits that are too large to be first digit of valid second\n                this.model.setSecond(value);\n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate) {\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                this.dateTimeEventHandler.onChangeSelectionToForward(event);\n            } else {\n                if(!this.lastTypedNumber) {\n                    // First digit entered\n                    this.model.setSecond(value);\n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate) {\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    // P1 Fix #8: Use requestAnimationFrame instead of setTimeout\n                    this.restoreSelection();\n                    this.lastTypedNumber = String(value);\n                } else {\n                    // Second digit entered\n                    const newValue = `${this.lastTypedNumber}${String(value)}`;\n                    const second = parseInt(newValue);\n                    \n                    if(second > 59) {\n                        this.model.setSecond(parseInt(this.lastTypedNumber));\n                    } else {\n                        this.model.setSecond(second);\n                    }\n                    \n                    const selectedDate = this.model.getSelectedDateTime();\n                    if(!selectedDate) {\n                        this.placeholderManager.change();\n                    }\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                    this.dateTimeEventHandler.onChangeSelectionToForward(event);\n                    this.lastTypedNumber = null;\n                }\n            }\n        } catch (error) {\n            console.error('Error in editSecond:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n    protected editMeridian(value: string, event: KeyboardEvent): void {\n        try {\n            // Handle 'a' for AM and 'p' for PM\n            const key = value.toString().toLowerCase();\n            \n            if(key === 'a' || key === 'p') {\n                const currentHour = this.model.getCurrentHour();\n                const hour = Number(currentHour);\n                \n                if(key === 'a' && hour >= 12) {\n                    // Convert to AM\n                    this.model.setHour(hour % 12);\n                } else if(key === 'p' && hour < 12) {\n                    // Convert to PM\n                    this.model.setHour(hour + 12);\n                }\n                \n                const selectedDate = this.model.getSelectedDateTime();\n                if(!selectedDate) {\n                    this.placeholderManager.change();\n                }\n                this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n                this.dateTimeEventHandler.onChangeSelectionToForward(event);\n            }\n        } catch (error) {\n            console.error('Error in editMeridian:', error, { value, event });\n            this.dispatchEvent({ type: INTERNAL_EVENTS.VALUE_UPDATE });\n            this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        }\n    }\n\n    protected isAllContentSelected(): boolean {\n        if (!this.element) {\n            return false;\n        }\n        const el = this.element as HTMLInputElement;\n        const valueLength = el.value ? el.value.length : 0;\n        const selectionStart = el.selectionStart ?? 0;\n        const selectionEnd = el.selectionEnd ?? 0;\n        return valueLength > 0 && selectionStart === 0 && selectionEnd === valueLength;\n    }\n\n    protected checkAllowedKeys(event: KeyboardEvent): boolean {\n        // P2 Fix #12: Use enum values instead of string literals\n        for (let i = 0; i < this.allowedKeys.length; i++) {\n           if(this.allowedKeys[i] === event.key){\n               return true;\n           }\n        }\n        for (let i = 0; i < this.combinationAllowedKeys.length; i++) {\n            if(this.combinationAllowedKeys[i] === event.key){\n                if(event.ctrlKey || event.metaKey){\n                    return true;\n                } \n            }\n         }\n         return false;\n    }\n\n\n    dummy(){\n        \n    }\n\n\n\n}","\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport {  CalendarIconViewType } from \"./datefield-icon-view.types\";\n\n// import { Calendar } from \"../../../../calendar/src/calendar\";\n// import { PopupComponentPositionParams, Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { PopupHandler } from \"../model/popup-handler\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimePickerStateManagerType } from \"../model/date-picker-state-manager.types\";\n// import { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateTimeModelType } from \"../model/date-time-model.types\";\nimport { DateTimeControllerHandlerType } from \"../model/date-time-controller.type\";\n// import { ICalendarConfiguration } from \"../../../../calendar/src/calendar-configuration.types\";\nimport { DatePickerInteractor } from \"../model/date-picker-interacter\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\nexport class CalendarIconController extends AbstractController<CalendarIconViewType>{\n\n    static CALENDAR_ICON_INSTANCE = 'calendarIconInstance'\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_MODEL) protected model !: DateTimeModelType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PICKER_STATE_MANAGER) protected stateManager !: DateTimePickerStateManagerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER) controllerHandler !: DateTimeControllerHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATE_PICKER_INTERACTOR) protected datePickerInteractor !: DatePickerInteractor;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\n\n\n    // private calendar: any;\n    // private popupDestroy :any;\n    // private listener !: boolean;\n    \n   init(){\n    this.registerListeners();\n    this.applyClassNames();\n    // this.setTabindex();\n    this.setDisabled();\n    this.optionsHandler.setDomData(this.component?.getElement() as HTMLElement , CalendarIconController.CALENDAR_ICON_INSTANCE, this.getBeanInstanceByBeanName('instanceID'))\n    // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.UPDATE_CALENDAR, this.setDate.bind(this));\n    // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR, (params : any) => this.destroyCalendar(params.event));\n    // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.CREATE_CALENDAR, this.createCalendar.bind(this));\n    this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.setDisabled.bind(this));\n\n    }\n\n    // private setTabindex(){\n    //     const element = this.component?.getElement() as HTMLElement;\n    //     element.setAttribute('tabindex','0');\n    // }\n\n    private applyClassNames(){\n        this.component?.addOrRemoveCssClass(\"dg-datepicker__icon\");\n    }\n\n    private setDisabled(){\n        const disabled = this.optionsHandler.isDisabled();\n        if(disabled){\n            const element = this.component?.getElement();\n            element?.setAttribute('disabled','')\n        }else{\n            const element = this.component?.getElement();\n            element?.removeAttribute('disabled')\n        }\n    }\n\n\n    private registerListeners(){\n        const element = this.component?.getElement() as HTMLElement;\n        element.addEventListener( \"click\",this.onClick.bind(this));\n\n        element.addEventListener(\"keydown\",(event)=>{\n            if(event.key === 'Enter'){\n                this.createOrDestroyCalendar();\n            }\n        })\n    }\n\n    private onClick(event : MouseEvent){\n        event.preventDefault();\n        this.createOrDestroyCalendar()\n       \n\n    }\n\n    private createOrDestroyCalendar(){\n        const isReadonly =  this.optionsHandler.isReadonly();\n        const isDisabled =  this.optionsHandler.isDisabled();\n        if(isReadonly || isDisabled) {return}\n\n        if(this.stateManager.getState()){\n            this.datePickerInteractor.destroyCalendar()\n\n            return\n                    \n        }else{\n            // this.createCalendar();\n            this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'})\n            this.datePickerInteractor.createCalendar()\n        }\n\n    }\n\n    getProperties(){\n        return {\n            type : this.optionsHandler.getType()\n        }\n    }\n\n\n    \n\n\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeInputCompType } from \"./date-time-input.type\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName, setAriaLabel, setAriaRequired } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getDateTimeRootUtilityClass } from \"../date-time-root/date-time-root-classes\";\nimport { DateTimeOptionHandlerType } from \"../model/date-time-options-handler.types\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeModel } from \"../model/date-time-model\";\nimport { DateTimeEventHandlerType } from \"../model/date-time-event-handler.types\";\nimport { DateTimeKeyBoardShortCuts } from \"../model/date-time-keyboard-shorcuts\";\nimport { DateTimeInputHandler } from \"../model/date-time-input-handler\";\nimport { DATE_TIME_CUSTOM_EVENTS, INTERNAL_EVENTS } from \"../../constant/event-name\";\nimport { IDestroyAdjuster } from \"../model/date-time-keyboard-shortcut.types\";\nimport { DateTimePickerStateManagerType } from \"../model/date-picker-state-manager.types\";\nimport { DateTimePlaceholderManagerIntegration } from \"../model/placeholder-engine-integration\";\nimport { DatePickerInteractor } from \"../model/date-picker-interacter\";\nimport { HooksParams } from \"../../date-time-configuration.types\";\nimport { CalendarIconController } from \"../calendar-icon/calendar-icon-controller\";\nimport { DateTimeSelectionService } from \"../model/date-time-selection-service\";\n\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input',\n\t\t\tmodifiers: [],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass);\n};\nexport class DateTimeInputController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !                               : DateTimeOptionHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) protected model !                              : DateTimeModel;\n    @AutoWired(DATETIME_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER) adjusterEventHandler !              : DateTimeKeyBoardShortCuts;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !                 : DateTimeEventHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_INPUT_HANDLER) inputHandler !                         : DateTimeInputHandler;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PICKER_STATE_MANAGER) protected stateManager !     : DateTimePickerStateManagerType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PLACEHOLDER_MANAGER) protected placeholderManager !: DateTimePlaceholderManagerIntegration;\n    @AutoWired(DATETIME_BEAN_NAME.DATE_PICKER_INTERACTOR) protected datePickerInteractor !       : DatePickerInteractor;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_SELECTION_SERVICE) protected selectionService !    : DateTimeSelectionService;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !                              : getBeanInstanceByBeanName;\n    \n\n\n\n    private comp !: DateTimeInputCompType;\n\n    private dateAdjusterRef : IDestroyAdjuster | null = null;\n    private focus !:boolean;\n    private adaptiveFormatActive = false;\n    \n    // Re-entrancy protection flags\n    private isSettingValue = false;\n    private isSettingPlaceholder = false;\n    private isProcessingEvent = false;\n    \n    // Value diffing cache\n    private lastRenderedValue: string | null = null;\n    \n    setComp(comp : DateTimeInputCompType ) {\n        this.comp = comp;\n\n        this.setPlaceholder();\n        this.applyClasses();\n        this.setValue();\n        this.setID();\n        this.setAriaAttributes();\n        this.registerEventHandler();\n        this.registerAdjusterEventHandler();\n        this.placeholderManager.setInputElement(this.comp.getElement() as HTMLInputElement);\n        // Prevent event loop by checking isProcessingEvent flag\n        const safeSetValue = () => {\n            if (!this.isProcessingEvent) {\n                this.setValue();\n            }\n        };\n        \n        const safeSetPlaceholder = () => {\n            if (!this.isProcessingEvent) {\n                this.setPlaceholder();\n            }\n        };\n        \n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, safeSetPlaceholder);\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.registerEventHandler.bind(this));\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.setAriaAttributes.bind(this));\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, this.applyClasses.bind(this));\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.PROPERTY_CHANGED, safeSetValue);\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED, safeSetValue);\n\n\n\n    }\n    \n    private setID(){\n        const element = this.comp.getElement();\n        if (!element) return;\n        try {\n            element.setAttribute('id', this.model.getCompID());\n        } catch (error) {\n            console.error('Error setting ID:', error);\n        }\n    }\n\n\n\n    private applyClasses() : void {\n        const element = this.comp.getElement();\n        if (!element) return;\n        \n        try {\n            const classes = useUtilityClasses();\n            this.comp.addOrRemoveCSSClass(classes.root);\n            element.classList.add(\"dg-field__input\");\n        } catch (error) {\n            console.error('Error applying classes:', error);\n        }\n    }\n\n    private refresh() : void {\n        this.applyClasses();\n\n    }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadonly(),\n            focus : this.focus\n\t\t}\n\t}\n\n\n\n\n    private registerEventHandler() {\n        const ownerState = this.getOwnerState();\n        const element = this.comp.getElement();\n\n\n        if(ownerState.readonly || ownerState.disabled) {\n            if(ownerState.readonly){\n                this.addListener(element, 'focusin', () => {\n                    this.focus = true\n                    this.refresh()\n    \n                })\n                this.addListener(element, 'focusout', () => {\n                    this.focus = false\n                    this.refresh()\n    \n                })\n            }\n\n            return \n        }\n\n        // Register element with InputHandler (which handles keydown)\n        // DO NOT register keydown here to avoid double registration\n        this.inputHandler.registerElement(this.comp.getElement() as HTMLInputElement);\n        \n        // Register other events that InputHandler doesn't handle\n        element.addEventListener('input', this.onInput.bind(this));\n        element.addEventListener(\"click\", this.onClick.bind(this));\n        element.addEventListener('focusin', this.onFocusIn.bind(this));\n        element.addEventListener('focusout', this.onFocusOut.bind(this));\n\n\n        \n        this.addListener(this.eventHandler, INTERNAL_EVENTS.VALUE_UPDATE, this.setValue.bind(this));\n        this.addListener(this.eventHandler, INTERNAL_EVENTS.INCREMENT_UPDATED, this.refresh.bind(this));\n\t\tthis.addListener(this.eventHandler, INTERNAL_EVENTS.DECREMENT_UPDATED, this.refresh.bind(this));\n        this.addListener(this.eventHandler, INTERNAL_EVENTS.MAKE_SELECTION_ONCLICK, this.makeOnClickSelection.bind(this));\n        this.addListener(this.eventHandler, INTERNAL_EVENTS.MAKE_SELECTION, this.makeSelection.bind(this));\n        this.addListener(this.eventHandler, INTERNAL_EVENTS.VALUE_UPDATE_BY_DATEPICKER, this.setValueOnDatePicker.bind(this));\n\n       \n\n        const type = this.optionHandler.getType();\n        const spinButton = this.optionHandler.getSpinButton();\n        if(type === 'datetimepicker' || type === 'datepicker' || type === 'timepicker'){\n\n            if(spinButton === 'together' || this.optionHandler.shouldOpenPickerOnFocus()){\n                \n                    element.addEventListener( 'focus', (event) => {\n                        const relatedTarget = event.relatedTarget as HTMLElement;\n                        this.dispatchEvent({type:'FOCUS_CONTAINER'})\n\n\n                        if(!this.isElementWithinDatePickerIcon(relatedTarget)) {\n                            if(!this.stateManager.getState()){\n                                this.datePickerInteractor.createCalendar()\n                            }\n                        }\n                    })\n\n                \n\n                    element.addEventListener( 'focusout', (event) => {\n                        const relatedTarget = event.relatedTarget as HTMLElement;\n                        const datePickerId = this.datePickerInteractor.getId();\n                        const datePickerElement = document.getElementById(datePickerId);\n                        // const timeDropDownOption = document.querySelector('dg-date-picker__time-picker-dropdown');\n\n\n                        if (!datePickerElement || !relatedTarget) {\n                            this.datePickerInteractor.destroyCalendar();\n                            return;\n                        }\n\n                        // console.log('timeDropDownOption : ',timeDropDownOption)\n                        // console.log('relatedTarget: ',relatedTarget)\n\n\n                        const isTimeDropDown = this.isElementWithinTimePicker(relatedTarget);\n\n\n                        const isWithinDatePicker = datePickerElement === relatedTarget || \n                                                 datePickerElement.contains(relatedTarget) || isTimeDropDown || this.isElementWithinDatePickerIcon(relatedTarget);\n                        \n                        if (!isWithinDatePicker) {\n                            this.datePickerInteractor.destroyCalendar();\n                        }\n                    })\n               \n            }\n            element.addEventListener(\"keydown\",(event)=>{\n                if(event.key === 'Escape'){\n                    this.datePickerInteractor.destroyCalendar();\n    \n                }\n            })\n\n        }\n       \n        \n\n    }\n\n    private isElementWithinTimePicker(element : HTMLElement) : boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            if (pointer.classList.contains('dg-date-picker__time-picker-dropdown')) {\n                return true;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n    private isElementWithinDatePickerIcon(element: HTMLElement): boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            // getDomData exists in implementation but not in interface, cast to access it\n            const instanceId = (this.optionHandler as any).getDomData?.(pointer, CalendarIconController.CALENDAR_ICON_INSTANCE);\n            if (!!instanceId) {\n                const eventFromThisComponent = instanceId === this.getBeanInstanceByBeanName('instanceID');\n                return eventFromThisComponent;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n\n    private onFocusIn(event:FocusEvent):void{\n        this.dispatchEvent({type: INTERNAL_EVENTS.FOCUS_CONTAINER});\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n        \n        // Use document.activeElement instead of maintaining separate flag\n        const element = this.comp.getElement();\n        this.focus = document.activeElement === element;\n        this.refresh();\n        \n        const inputElement = element as HTMLInputElement;\n        if (inputElement) {\n            this.selectionService.selectCurrentField(inputElement, false);\n        }\n        \n        this.dateTimeEventHandler.onFocus(event);\n    }\n\n    private onFocusOut(event:FocusEvent):void{\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n\n        const allowManualInput = this.optionHandler.isAllowManualInput();\n        if (allowManualInput) {\n            const element = event.target as HTMLInputElement;\n            const value = element.value;\n            \n            if (value) {\n                const success = this.model.parseAndSetDateFromString(value);\n                if (success) {\n                    this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n                    this.optionHandler.onChange({ \n                        event: {}, \n                        source: \"ui\", \n                        type: \"onChange\", \n                        value: this.model.getDateObject() \n                    });\n                } else {\n                    this.setValue();\n                }\n            }\n        }\n\n        // Use document.activeElement instead of maintaining separate flag\n        const element = this.comp.getElement();\n        this.focus = document.activeElement === element;\n        this.refresh();\n        this.dateTimeEventHandler.onFocusOut(event);\n\n        // Derive adaptiveFormatActive from Model state\n        if (this.shouldUseAdaptiveFormat() && !this.model.getSelectedDateTime()) {\n            this.adaptiveFormatActive = false;\n            this.setValue();\n        }\n\n    }\n\n    private onInput(event:any):void{\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n\n        const allowManualInput = this.optionHandler.isAllowManualInput();\n        const inputElement = event.target as HTMLInputElement;\n        const value = inputElement.value;\n        const selectedDateTime = this.model.getSelectedDateTime();\n\n        if (allowManualInput) {\n            const format = this.optionHandler.getFormat();\n            if (format && value) {\n                return;\n            }\n            return;\n        }\n        event.preventDefault();\n\n        if(!selectedDateTime && value === ''){\n            this.setValue();\n            this.selectionService.selectCurrentField(inputElement);\n            return;\n        }\n\n        if (!/^[a-zA-Z0-9]*$/.test(value.normalize('NFD').replace(/\\p{M}/gu, ''))) {\n            this.setValue();\n            this.selectionService.selectCurrentField(inputElement);\n            return;\n        }\n\n        this.dateTimeEventHandler.onInput(value);\n\n    }\n\n    private onClick():void {\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n        this.dispatchEvent({ type: INTERNAL_EVENTS.MAKE_SELECTION_ONCLICK });\n\n        if(!this.stateManager.getState()){\n            this.dispatchEvent({\n                type: DATE_TIME_CUSTOM_EVENTS.CREATE_CALENDAR\n            })\n        };\n    }\n\n    private makeOnClickSelection(): void {\n        const element = this.comp.getElement() as HTMLInputElement;\n        if (!element) return;\n        \n        const cursorPosition = element.selectionStart;\n        this.selectionService.selectFieldAtCursorPosition(element, cursorPosition);\n    }\n\n    private makeSelection(): void {\n        const element = this.comp.getElement() as HTMLInputElement;\n        if (!element) return;\n        \n        // Use waitForDOMUpdate=true to ensure DOM is updated before selection\n        this.selectionService.selectCurrentField(element, true);\n    }\n    \n\n    private setAriaAttributes() : void {\n        const element = this.comp.getElement();\n        if (!element) return;\n        \n        try {\n            setAriaRequired(element, this.optionHandler.isRequired());\n            setAriaLabel(element, this.optionHandler.getAriaLabel());\n            this.optionHandler.isDisabled() ? element.setAttribute(\"disabled\",\"\") : element.removeAttribute(\"disabled\");\n            this.optionHandler.isReadonly() ? element.setAttribute(\"readonly\",\"\") : element.removeAttribute(\"readonly\");\n            const value = this.model.getValue();\n            if(!this.model.isActivatePlaceholder()){\n                value && element.setAttribute('value', value);\n                return;\n            }\n        } catch (error) {\n            console.error('Error setting ARIA attributes:', error);\n        }\n    }\n\n    private setPlaceholder():void{\n        if (this.isSettingPlaceholder) return; // Re-entrancy protection\n        \n        const element = this.comp.getElement() as HTMLInputElement;\n        if (!element) return;\n        \n        try {\n            this.isSettingPlaceholder = true;\n            const placeHolder = this.optionHandler.getPlaceholder();\n            if(!placeHolder){\n                element.removeAttribute('placeholder');\n            } else {\n                element.setAttribute('placeholder', placeHolder);\n            }\n        } catch (error) {\n            console.error('Error setting placeholder:', error);\n        } finally {\n            this.isSettingPlaceholder = false;\n        }\n    }\n\n    private setValue(): void {\n        // Re-entrancy protection\n\n        if (this.isSettingValue || this.isProcessingEvent) {\n            return;\n        }\n        \n        const element = this.comp.getElement() as HTMLInputElement;\n        if (!element) return;\n        \n        try {\n            this.isSettingValue = true;\n            this.isProcessingEvent = true;\n            \n            // Derive adaptiveFormatActive from Model state instead of maintaining separate flag\n            const adaptiveModeEnabled = this.shouldUseAdaptiveFormat();\n            const hasSelectedDateTime = !!this.model.getSelectedDateTime();\n            \n            // Get current DOM value for diffing\n            const currentDomValue = element.value || '';\n            \n            // Determine what value should be displayed\n            let newValue: string = '';\n            let shouldUpdatePlaceholder = false;\n            let placeholderValue: string | null = null;\n            \n            if (\n                adaptiveModeEnabled &&\n                !hasSelectedDateTime &&\n                this.model.isActivatePlaceholder() &&\n                !this.adaptiveFormatActive\n            ) {\n                this.adaptiveFormatActive = false;\n            }\n\n            if (adaptiveModeEnabled && !hasSelectedDateTime && !this.adaptiveFormatActive) {\n                const configuredPlaceholder = this.optionHandler.getPlaceholder();\n                this.adaptiveFormatActive = false;\n                newValue = '';\n                placeholderValue = configuredPlaceholder ?? null;\n                shouldUpdatePlaceholder = true;\n            } else if(!this.model.getSelectedDateTime() && this.optionHandler.shouldShowFormatAsPlaceholder()){\n                const format = this.placeholderManager.getFormattedValue();\n                newValue = format;\n                placeholderValue = format;\n                shouldUpdatePlaceholder = true;\n            } else if(!this.model.getSelectedDateTime() && !this.optionHandler.shouldShowFormatAsPlaceholder()){\n                newValue = '';\n            } else if(this.model.isActivatePlaceholder()){\n                if(this.optionHandler.shouldShowFormatAsPlaceholder()){\n                    const format = this.placeholderManager.getPlaceholder();\n                    newValue = format;\n                    placeholderValue = format ?? null;\n                    shouldUpdatePlaceholder = true;\n                } else {\n                    placeholderValue = this.optionHandler.getPlaceholder() ?? null;\n                    shouldUpdatePlaceholder = true;\n                    // Don't set value, just placeholder\n                    if (placeholderValue === null) {\n                        element.removeAttribute('placeholder');\n                    } else if (placeholderValue) {\n                        element.setAttribute('placeholder', placeholderValue);\n                    }\n                    this.datePickerInteractor.setDate();\n                    return;\n                }\n            } else {\n                // Model has a value - get it from Model (single source of truth)\n                const modelValue = this.model.getValue();\n                if(modelValue === 'Invalid Date'){\n                    newValue = '';\n                } else {\n                    newValue = String(modelValue);\n                }\n            }\n            \n            // Value diffing - only update DOM if value changed\n            if (newValue !== currentDomValue || newValue !== this.lastRenderedValue) {\n                element.value = newValue;\n                this.lastRenderedValue = newValue;\n            }\n            \n            // Update placeholder if needed\n            if (shouldUpdatePlaceholder) {\n                if (placeholderValue === null || placeholderValue === undefined || placeholderValue === '') {\n                    element.removeAttribute('placeholder');\n                } else {\n                    element.setAttribute('placeholder', placeholderValue);\n                }\n            }\n            \n            this.datePickerInteractor.setDate();\n            \n            // Validate state synchronization\n            this.validateStateSync();\n        } catch (error) {\n            console.error('Error in setValue:', error);\n            // Fallback: try to reset to safe state\n            try {\n                const element = this.comp.getElement() as HTMLInputElement;\n                if (element) {\n                    const modelValue = this.model.getValue();\n                    if (modelValue && modelValue !== 'Invalid Date') {\n                        element.value = String(modelValue);\n                    }\n                }\n            } catch (fallbackError) {\n                console.error('Error in setValue fallback:', fallbackError);\n            }\n        } finally {\n            this.isSettingValue = false;\n            this.isProcessingEvent = false;\n        }\n    }\n    \n    /**\n     * Validates that DOM value matches Model value\n     */\n    private validateStateSync(): void {\n        const element = this.comp.getElement() as HTMLInputElement;\n        if (!element) return;\n        \n        try {\n            const domValue = element.value || '';\n            const modelValue = this.model.getValue();\n            const modelValueStr = modelValue && modelValue !== 'Invalid Date' ? String(modelValue) : '';\n            \n            // If Model has a value, DOM should match (unless placeholder is active)\n            if (this.model.getSelectedDateTime() && !this.model.isActivatePlaceholder()) {\n                if (domValue !== modelValueStr && modelValueStr !== '') {\n                    console.warn('State desync detected: DOM value does not match Model value', {\n                        domValue,\n                        modelValue: modelValueStr\n                    });\n                }\n            }\n        } catch (error) {\n            console.error('Error validating state sync:', error);\n        }\n    }\n\n    private shouldUseAdaptiveFormat(): boolean {\n        const placeholder = this.optionHandler.getPlaceholder();\n        const hasPlaceholder = placeholder !== null && placeholder !== undefined && placeholder !== '';\n        const allowManualInput = this.optionHandler.isAllowManualInput();\n        // return this.optionHandler.shouldAutoFillFormatOnFirstInput() \n        //     && this.optionHandler.shouldShowFormatAsPlaceholder()\n        //     && hasPlaceholder;\n        return this.optionHandler.shouldAutoFillFormatOnFirstInput() \n            && this.optionHandler.shouldShowFormatAsPlaceholder()\n            && hasPlaceholder\n            && !allowManualInput;\n    }\n    private setValueOnDatePicker() : void {\n        const element = this.comp.getElement() as HTMLInputElement;\n        const value = this.model.getValue();\n        if(String(value) ===element.value ){\n            return\n        }\n        \n        const params : HooksParams = {\n            type: 'onChange',\n            event : {},\n            value : this.model.getDateObject(),\n            source : 'ui'\n        }\n\n        this.optionHandler.onChange(params);\n        element.value = String(value);\n      \n    }\n\n\n    private registerAdjusterEventHandler() {\n        const element = this.comp.getElement();\n\n        this.dateAdjusterRef = this.adjusterEventHandler.registerElement(element);\n\n        this.addDestroyFunc(() => {\n            this.dateAdjusterRef && this.dateAdjusterRef.destroyFunc()\n            this.dateAdjusterRef = null;\n        })\n    }\n\n    destroy(): void {\n        super.destroy();\n    }\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateTimeInputController } from \"./date-time-input-controller\";\nimport { DateTimeInputCompType } from \"./date-time-input.type\";\n\nconst daetTimeInputTemplate = () => {\n    const input = document.createElement(\"input\");\n    input.type = \"text\";\n    return input;\n}\n\nexport class DateTimeInputComponent extends Component {\n\n    constructor() {\n        super();\n        this.setTemplate(daetTimeInputTemplate())\n    }\n\n    @PostConstruct()\n    init() {\n        const comp : DateTimeInputCompType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new DateTimeInputController());\n        controller.setComp(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        if (!element) return;\n        \n        // Split by spaces to handle multiple classes\n        const classesToAdd = className.trim().split(/\\s+/).filter(cls => cls.length > 0);\n        \n        // Remove all existing classes first\n        element.className = '';\n        \n        // Add new classes\n        classesToAdd.forEach(cls => {\n            if (cls) {\n                element.classList.add(cls);\n            }\n        });\n    }\n\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeColour, DateTimeConfiguration, DateTimeVariantType, DateType, FieldType, HooksParams, IRenderer ,ICustomFormat} from \"../../date-time-configuration.types\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class DateTimeOptionHandler extends EventEmitter {\n\n    private domKey = `_DG_${Math.random().toString()}`;\n\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_CONFIGURATION) configuration!: DateTimeConfiguration;\n\n    getDomKey(): string {\n\t\treturn this.domKey;\n\t}\n\n\n    getDomData(element: Node | null, key: string): any {\n\t\tconst domData = (element as any)[this.getDomKey()];\n\t\treturn domData ? domData[key] : undefined;\n\t}\n\n\tsetDomData(element: Element, key: string, value: any): any {\n\t\tconst domKey = this.getDomKey();\n\t\tlet domData = (element as any)[domKey];\n\n\t\tif (!domData) {\n\t\t\tdomData = {};\n\t\t\t(element as any)[domKey] = domData;\n\t\t}\n\n\t\tdomData[key] = value;\n\t}\n\n    getInstanceID(): string | undefined {\n        return this.configuration.instanceID;\n    }\n\n    shouldIgnoreEmptyDOM() : boolean {\n       return this.configuration?.ignoreEmptyDOM !== undefined\n? !this.configuration.ignoreEmptyDOM\n: false;\n    }\n\n    getId(): string {\n        return this.configuration.id ??'';\n    }\n\n    getFormat(): string |null {\n        return this.configuration.format ?? null;\n    }\n\n    getLocale(): string {\n        return this.configuration.locale ?? '';\n    }\n\n    getDefaultValue(): DateType |null{\n        return this.configuration.value ?? null;\n    }\n\n    getMax(): DateType {\n        return this.configuration.maxValue ?? '';\n    }\n\n    getMin(): DateType {\n        return this.configuration.minValue ?? '';\n    }\n\n    getLabel(): string {\n        return this.configuration.label ?? '';\n    }\n\n    getAriaLabelledby(): string {\n\t\treturn this.configuration.ariaLabelledby ?? 'number';\n\t}\n\n\tgetAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? 'numberHelper';\n\t}\n\n    getName(): string {\n        return this.configuration.name ?? '';\n    }\n\n    getTimezone(): string {\n        return this.configuration.timezone ?? '';\n    }\n\n    getDescriptionRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.descriptionRenderer;\n    }\n\n    getDescriptionRendererParams(): object | undefined {\n        return this.configuration.descriptionRendererParams;\n    }\n\n    getValidationMessageRenderer(): (new() => IRenderer) | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n    getDescription(): string | undefined {\n        return this.configuration.description;\n    }\n\n\n    getValidationMessage(): string |null {\n        return this.configuration.validationMessage ?? null;\n    }\n\n    getTemplate(props:any)              :any{\n        return this.configuration.template && this.configuration.template(props);\n    }\n\n    getSpinButton(): string {\n        return this.configuration.spinButton ?? 'none';\n    }\n\n    enableStepperButtons(): boolean {\n\t\treturn this.configuration.enableStepperButtons ?? false;\n\t}\n    \n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n\n    isReadonly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n    isAutoFocus(): boolean {\n        return this.configuration.autoFocus ?? false;\n    }\n\n    isClearable(): boolean {\n        return this.configuration.clearable ?? false;\n    }\n\n    isDisablePast(): boolean {\n        return this.configuration.disablePast ?? false;\n    }\n\n    isDisableFuture(): boolean {\n        return this.configuration.disableFuture ?? false;\n    }\n\n    isFocused(): boolean {\n        return this.configuration.focused ?? false;\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n\n    getColor(): DateTimeColour | null  {\n        return this.configuration.color ?? null;\n    }\n\n    getSize(): string | undefined {\n        return this.configuration.size;\n    }\n\n    getVariant(): DateTimeVariantType |  null  {\n        return this.configuration.variant ?? null;\n    }\n\n    getAppendTo(): HTMLElement | null  {\n        return this.configuration.appendTo ?? null ;\n    }\n\n    onChange(params:HooksParams): void {\n        if(typeof this.configuration.onChange === 'function') {\n            this.configuration.onChange(params);\n        }\n\n    }\n    onPickerOpen(): void {\n        if(typeof this.configuration.onPickerOpen === 'function') {\n            this.configuration.onPickerOpen();\n        }\n\n    }\n\n    onError(value:string): void {\n        this.configuration.onError && this.configuration.onError(value);\n    }\n    getDecrementButtonSVGIconId(): string  {\n        return this.configuration.decrementButtonSVGIconId ?? \"icon-down-arrow\";\n    }\n\n    getIncrementButtonSVGIconId(): string  {\n        return this.configuration.incrementButtonSVGIconId ?? \"icon-up-arrow\";\n    }\n\n\tgetIncrementButtonRenderer():  { new(...args: any[]): IRenderer } | undefined {\n\t\treturn this.configuration.decrementRenderer;\n\t}\n   \n\tgetIncrementRendererParams(): any {\n\t\treturn this.configuration.incrementRendererParams;\n\t}\n\n\tgetDecrementButtonRenderer(): { new(...args: any[]): IRenderer } | undefined {\n\t\treturn this.configuration.incrementButtonRenderer;\n\t}\n\n\tgetDecrementRendererParams(): any {\n\t\treturn this.configuration.decrementRendererParams;\n\t}\n\n    updateConfiguration(config: DateTimeConfiguration): void {\n        this.configuration = config;\n        this.dispatchEvent({ type: 'PROPERTY_CHANGED' });\n    }\n\n    getAriaLabel(){\n        return this.configuration.ariaLabel?? 'date';\n    }\n\n    getType(): FieldType{\n        return this.configuration.type ?? 'datetimefield';\n    }\n\n    getDatePickerAppendTo():HTMLElement{\n        return this.configuration.datePickerAppendTo?? document.body;\n    }\n    getShowTimePicker(): boolean {\n        return this.configuration.showTimePicker ?? false;\n    }\n\n    // getHourCycle(): IHourCycle{\n    //     const val = Number(this.configuration.hourCycle);\n    //     const isNum = typeof val == 'number';\n    //     return isNum ? (val as  IHourCycle) : undefined\n    // }\n\n    getHourCycle(): IHourCycle{\n        const type = this.getType();\n        if(type  == 'datetimepicker'){\n           const displayFormat = this.getFormat();\n            if(displayFormat){\n                const hasMeridian = /A/i.test(displayFormat) || /P/i.test(displayFormat);\n                return hasMeridian ? 12 as IHourCycle : 24 as IHourCycle;\n            }\n            const valueFormat = this.getValueFormat();\n            if(valueFormat){\n                const splitArray = valueFormat.split(' ');\n                if(splitArray.includes('A') || splitArray.includes('P')){\n                    return 12 as IHourCycle;\n                }else{\n                    return 24 as IHourCycle;\n                }\n            }\n            const val = Number(this.configuration.hourCycle);\n            const isNum = typeof val == 'number';\n            return isNum ? (val as  IHourCycle) : undefined\n        }\n\n        const val = Number(this.configuration.hourCycle);\n        const isNum = typeof val == 'number';\n        return isNum ? (val as  IHourCycle) : undefined\n    }\n\n    getHorizontalSpacing(): number {\n        return this.configuration.horizontalSpacing ?? 0;\n    }\n\n    getVerticalSpacing(): number {\n        return this.configuration.verticalSpacing ?? 0;\n    }\n\n    getTimestamp():number |  null{\n        return this.configuration.timestamp ?? null\n\n    }\n\n    getEventKey(): string{\n        return this.configuration.eventKey ?? '';\n    }\n\n    getPlaceholder(): string | undefined{\n        return this.configuration.placeholder;\n    }\n\n    shouldShowFormatAsPlaceholder(): boolean {\n        return this.configuration.showFormatAsPlaceholder ?? false;\n    }\n\n    shouldAutoFillFormatOnFirstInput(): boolean {\n        return this.configuration.autoFillFormatOnFirstInput ?? false;\n    }\n\n\n    getMinuteInterval(): number {\n        return this.configuration.minuteInterval ?? 1;\n    }\n\n    getCalendarIcon() : boolean {\n        return this.configuration.showDatePicker?? true;\n    }\n\n    getCustomFormats(): ICustomFormat | undefined {\n        return this.configuration.customFormat;\n    }\n\n    getMinDate(): DateType {\n        return this.configuration.maxValue;\n    }\n\n    getMaxDate(): DateType {\n        return this.configuration.minValue;\n    }\n\n    shouldOpenPickerOnFocus(): boolean {\n        return this.configuration.openPickerOnFocus ?? false;\n    }\n    onFocus(params:HooksParams): void {\n        if(typeof this.configuration.onFocus === 'function') {\n            this.configuration.onFocus(params);\n        }\n    }\n\n    onBlur(params:HooksParams): void {\n        if(typeof this.configuration.onBlur === 'function') {\n            this.configuration.onBlur(params);\n        }\n    }\n\n    showErrorState() : boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n    isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type : \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n\n    getValueFormat(): string | undefined {\n        return this.configuration.valueFormat ?? undefined;\n    }\n\n    isAllowManualInput(): boolean | undefined {\n        return this.configuration.allowManualInput ?? false;\n    }\n    \n}\n\nexport type IHourCycle = 12 | 24 |undefined","\n\nimport {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeOptionHandlerType } from \"./date-time-options-handler.types\";\n\n\n@Bean('stateManager')\nexport class DateTimeStateManager extends EventEmitter {\n    isInValid() : boolean {\n        return (this.optionsHandler as DateTimeOptionHandlerType).isValid();\n    }\n}","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeControllerHandlerType } from \"./date-time-controller.type\";\n// import { DateTimeRootControllerType } from \"../date-time-root/date-time-root-controller.type\";\n\n\n@Bean(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER)\nexport class DateTimeControllerHandler extends EventEmitter implements DateTimeControllerHandlerType{\n\tprivate dateTimeCtrl!: any;\n\n\tregisterDateTimeFieldController(dateTimeCtrl: any): void {\n\t\tthis.dateTimeCtrl = dateTimeCtrl;\n\t}\n\tgetDateTimeFieldController(): any {\n\t\treturn this.dateTimeCtrl;\n\t}\n}","import { composeClasses } from \"@dg/utils\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { DateTimeButtonComponentType } from \"./date-time-button.type\";\nimport { getDateTimeRootUtilityClass } from \"../date-time-root/date-time-root-classes\";\n\nconst useUtilityClasses = (ownerState : any) => {\n    const {disabled, role} = ownerState;\n\tconst slots = {\n\t\troot    : {\n            slot     : role,\n            modifiers: [\n                disabled && 'disabled'\n            ]\n        }\n\t};\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass);\n};\n\nexport class DateTimeButtonController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: any;\n    \n    private comp !: DateTimeButtonComponentType;\n\n    private ownerState : any = {disabled : null,enableStepperButtons:false};\n    setComp(comp : DateTimeButtonComponentType) : void {\n        this.comp = comp;\n        this.applyState();\n        \n\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.applyState.bind(this));\n    }\n\n    private applyState() : void {\n\n        const ownerState = this.getOwnerState();\n\n        if(this.ownerState.disabled === ownerState.disabled) {\n            return;\n        }\n\n        // if(this.ownerState.enableStepperButtons === ownerState.enableStepperButtons) {\n        //     return\n\n        // }\n\n        this.ownerState = ownerState;\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCssClass(classes.root, true);\n        this.setRendererDetails();\n    }\n\n    private setRendererDetails() : void {\n        \n        const params          = this.createRendererParams();\n        const rendererWrapper = this.createRendererWrapper();\n        const compDetails     = this.userComponentHandler.getButtonRendererDetails(rendererWrapper, params);\n\n        this.comp.setRendererDetails(compDetails);\n    }\n\n    private createRendererWrapper() {\n        const {getRenderer, getRendererParams} = this.comp.getParams() ?? {};\n        return {\n\t\t\tgetRenderer          : () => getRenderer ? getRenderer() : undefined,\n\t\t\tgetUserRendererParams: () => getRendererParams ? getRendererParams() : undefined\n\t\t}\n    } \n\n    private getOwnerState() {\n        const { isDisabled, getRole , getSpinButton} = this.comp.getParams() ?? {};\n        return {\n            disabled : isDisabled(),\n            role : getRole(),\n            spinButton : getSpinButton()\n        }\n    }\n\n    private createRendererParams() {\n        const params = this.comp.getParams() ?? {};\n        return {\n            parentElement: this.comp.getElement(),\n            callback     : (event:any) => params.callback && params.callback(event),\n            icon         : params.getIcon(),\n            showIcon     : true,\n            showText     : false,\n            disabled     : params.isDisabled(),\n            readonly     : params.isReadonly(),\n            ariaLabel    : params.getRole(),\n            classes      : params.getClasses(),\n            getSvgClasses: params.getSvgClasses,\n\n\t\t};\n    }\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateTimeButtonController } from \"./date-time-button-controller\";\nimport { DateTimeButtonComponentType } from \"./date-time-button.type\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\n\nconst  DateTimeButtonTemplate = (_params : any) => {\n\t// const div = document.createElement(\"div\");\n    // div.innerHTML = '<div></div>';\n    // return div.firstChild as HTMLElement;\n\treturn document.createElement(\"div\");\n}\n\n\nexport class DateTimeButtonComponent extends Component {\n\tprivate renderer: any;\n\tprivate rendererElement: any;\n    private params : any;\n\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.setTemplate(DateTimeButtonTemplate(this.params));\n\t\tconst comp : DateTimeButtonComponentType = {\n            addOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n            setRendererDetails : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getElement         : () => this.getGui(),\n            getParams          : () => this.params\n\t\t};\n\n\t\tconst controller = this.createBean(new DateTimeButtonController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tthis.setTemplate(this.rendererElement);\n\t\t\tparentElement.replaceWith(this.rendererElement);\n\t\t}\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className;\n\t}\n}","import { Button } from \"../../../../button/src/button\";\nimport { IButtonConfiguration } from \"../../../../button/src/button-configuration.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nexport class ButtonRenderer implements ICustomRenderer{\n    private params : any;\n    private button !: Button|null;\n    \n    init(params : any) {\n        this.params = params;\n        const configuration = this.createConfiguration();\n        this.button = new Button(configuration);\n    }\n\n    getElement(): HTMLElement {\n        return this.button?.api?.getElement() as HTMLElement;\n    }\n\n    private createConfiguration() : IButtonConfiguration {\n        return {\n            text    : this.params.label,\n            callback: this.params.callback,\n            icon    : this.params.icon,\n            showIcon: this.params.showIcon,\n            showText: this.params.showText,\n            disabled: this.params.disabled,\n            readonly : this.params.readonly,\n            ariaLabel : this.params.ariaLabel,\n            classes : this.params.classes,\n            getSvgClasses : this.params.getSvgClasses\n        }\n    }\n\n    destroy() : void {\n        this.button?.api?.destroy();\n        this.button = null;\n        this.params = null;\n    }\n}\n","\nimport { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\n\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeEventHandlerType } from \"./date-time-event-handler.types\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeModel } from \"./date-time-model\";\nimport { DateTimeOptionHandlerType } from \"./date-time-options-handler.types\";\nimport { DATE_TIME_CUSTOM_EVENTS, INTERNAL_EVENTS } from \"../../constant/event-name\";\nimport {DateTimePlaceholderManagerIntegration} from \"./placeholder-engine-integration\";\n\n@Bean(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER)\nexport class DateTimeEventHandler extends EventEmitter implements DateTimeEventHandlerType {\n\t@AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) model!: DateTimeModel;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) optionHandler!: DateTimeOptionHandlerType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PLACEHOLDER_MANAGER) protected placeholderManager !: DateTimePlaceholderManagerIntegration;\n\n\n    private  allowedKeys = [ \n        'Backspace', 'Enter', 'Tab', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',\n        'Home', 'End', 'Delete', 'e', '-', '+', 'Control', 'Meta','.'\n    ];\n\n    private combinationAllowedKeys = ['a', 'c', 'x', 'v'];\n\n\tonInput(_value : string): void {\n\n    //    const selectedField = this.model.getSelectedField();\n\t}\n\n\tonKeyDown(event: KeyboardEvent): void {\n        const key = event.key;\n        const char = event.key;\n        if(key === 'Tab'){\n            return\n\n        }\n        const parsedKey = parseInt(key);\n\n       \n    \n\n        if((event.ctrlKey || event.metaKey) && char === \"a\"){\n            event.stopPropagation();\n            (event.target as HTMLInputElement).select();\n        }\n       \n\n        if (event.ctrlKey || event.metaKey  || ['Control', 'Meta', 'Shift'].includes(char)) {\n            if (['c', 'v', 'x', 'z', 'a', 'y','r'].includes(char.toLowerCase())) {\n                return; // Allow common browser shortcuts\n            }\n            event.stopPropagation();\n        }\n        if(event.shiftKey && !['Tab'].includes(char)){\n            event.stopPropagation();\n        }\n        if (event.ctrlKey || event.metaKey) {\n                return;\n        }\n\n        const allowSpecialKeys = this.model.isAllowSpecialKeys(event);\n\n        if (this.checkAllowedKeys(event) && !allowSpecialKeys) {\n                return;\n        }\n\n        if (isNaN(parsedKey) && !allowSpecialKeys) {\n                event.preventDefault();\n        }\n        \n\t}    \n\n\tonFocus(event?: FocusEvent): void {\n    //    this.numberModel.setFocus(true);\n       this.dispatchEvent({\n\t\t\ttype: INTERNAL_EVENTS.FOCUS_IN,\n\t\t\tevent,\n\t\t});\n\t}\n\n\tonFocusOut(event: FocusEvent): void {\n        // this.numberModel.setFocus(false);\n        this.dispatchEvent({\n\t\t\ttype: INTERNAL_EVENTS.FOCUS_OUT,\n            event\n\t\t});\n\t}\n\n\tonIncrement(event ?:KeyboardEvent): void {\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n\t\tconst isIncremented =  this.model.increment();\n        if(!isIncremented){\n            return\n        }\n        \n\n        const selectedDate = this.model.getSelectedDateTime();\n\n        if(!selectedDate){\n            this.placeholderManager.change();\n            // this.placeholderManager.syncModelToEngine();\n        }\n\n        this.dispatchEvent({type: INTERNAL_EVENTS.INCREMENT_UPDATED});\n        // this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n\n        this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n        setTimeout(() => {\n            this.dispatchEvent({type: INTERNAL_EVENTS.MAKE_SELECTION});\n        }, 0);\n        this.optionHandler.onChange({\n            event: {},\n            source: \"ui\",\n            type: \"onChange\",\n            value:this.model.getDateObject() });\n        \n        event && event.preventDefault()\n\n            \n\t}\n\n\tonDecrement(event ?:KeyboardEvent): void {\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n\t\tconst isDecremented =  this.model.decrement();\n        if(!isDecremented){\n            return\n        }\n        const selectedDate = this.model.getSelectedDateTime();\n\n        if(!selectedDate){\n            this.placeholderManager.change();\n        }\n        this.dispatchEvent({type: INTERNAL_EVENTS.DECREMENT_UPDATED});\n        this.dispatchEvent({type: INTERNAL_EVENTS.VALUE_UPDATE});\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n\n\n        setTimeout(() => {\n            this.dispatchEvent({type: INTERNAL_EVENTS.MAKE_SELECTION});\n        }, 0);\n        this.optionHandler.onChange({\n            event: {},\n            source: \"ui\",\n            type: \"onChange\",\n            value:this.model.getDateObject() });\n        event && event.preventDefault()\n\n\t}\n\n    onChangeSelectionToForward(event?:KeyboardEvent): void{\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n        this.model.changeSelectionToForward();\n        \n        // Sync current input value with placeholder engine after arrow key navigation\n        // This ensures engine state matches current input value when selection changes\n        // Dispatch SYNC_PLACEHOLDER event which the integration class listens to\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        \n        this.dispatchEvent({type: INTERNAL_EVENTS.MAKE_SELECTION});\n        event && event.preventDefault()\n\n\n    }\n    onChangeSelectionToBackward(event?:KeyboardEvent): void{\n        const readonly = this.optionHandler.isReadonly();\n        if(readonly){\n            return\n        }\n        this.model.changeSelectionToBackward();\n        \n        // Sync current input value with placeholder engine after arrow key navigation\n        // This ensures engine state matches current input value when selection changes\n        // Dispatch SYNC_PLACEHOLDER event which the integration class listens to\n        this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.SYNC_PLACEHOLDER });\n        \n        this.dispatchEvent({type: INTERNAL_EVENTS.MAKE_SELECTION});\n        event && event.preventDefault()\n\n    }\n\n    onClosePicker(event ?: KeyboardEvent)  : void {\n        event && event.preventDefault();\n        event && event?.stopPropagation();\n        this.dispatchEvent( {type : DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR, event})\n    } \n\n\tonBlur(): void {\n        // this.numberModel.blur();\n\t}\n\n    onIncrementByLongStep() : void {\n        // this.numberModel.incrementByLongStep();\n    }\n\n    onDecrementByLongStep() : void {\n        // this.numberModel.decrementByLongStep();\n    }\n\n    onIncrementByShortStep() : void {\n        // this.numberModel.incrementByShortStep();\n    }\n\n    onDecrementByShortStep() : void {\n        // this.numberModel.decrementByShortStep();\n    }\n\n    protected checkAllowedKeys(event: KeyboardEvent){\n        for (let i = 0; i < this.allowedKeys.length; i++) {\n           if(this.allowedKeys[i]===event.key){\n               return true\n           }\n        }\n        for (let i = 0; i < this.combinationAllowedKeys.length; i++) {\n            if(this.combinationAllowedKeys[i]===event.key){\n                if(event.ctrlKey || event.metaKey){\n                    return true\n                }\n               \n            }\n         }\n         return false\n    }\n}\n","\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarIconViewType } from './datefield-icon-view.types';\nimport { CalendarIconController } from './calendar-icon-controller';\nimport { getSvgIcon } from '../../../../utility/create-svg-template';\n\n\n\nfunction CalendarIconViewTemplate(props: any): HTMLElement {\n    const {type} = props;\n    \n    // Create container\n    const container = document.createElement('button');\n    \n    if (type === 'timepicker') {\n        // Create time picker icon structure\n        const timeIcon = getSvgIcon('dg__svg--time-picker', {svg : 'dg-date-picker__time-icon', icon : 'dg-date-picker__time-icon'});\n        const tempDOM = document.createElement('div');\n        tempDOM.innerHTML = timeIcon;\n        container.appendChild(tempDOM.firstChild as HTMLElement);\n        \n    } else {\n        // Create date picker icon structure\n        const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n        svg.setAttribute(\"viewBox\", \"0 0 20 20\");\n        svg.setAttribute(\"class\", \"dg-datepicker__icon-svg\");\n        \n        // Create group elements\n        const g1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n        g1.setAttribute(\"data-name\", \"Layer 2\");\n        \n        const g2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n        g2.setAttribute(\"data-name\", \"Fill Icon\");\n        \n        // Create path and rect elements\n        const path1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n        path1.setAttribute(\"d\", \"M14.38 2.25H5.62a3.37 3.37 0 0 0-3.37 3.37v8.76a3.37 3.37 0 0 0 3.37 3.37h8.76a3.37 3.37 0 0 0 3.37-3.37V5.62a3.37 3.37 0 0 0-3.37-3.37Zm0 14H5.62a1.87 1.87 0 0 1-1.87-1.87V5.62a1.87 1.87 0 0 1 1.87-1.87h8.76a1.88 1.88 0 0 1 1.84 1.54.78.78 0 0 0-.22 0H6a.75.75 0 0 0 0 1.5h10a.7.7 0 0 0 .25 0v7.68a1.87 1.87 0 0 1-1.87 1.78Z\");\n        \n        const rect1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        rect1.setAttribute(\"x\", \"10.55\");\n        rect1.setAttribute(\"y\", \"12.56\");\n        rect1.setAttribute(\"width\", \"2\");\n        rect1.setAttribute(\"height\", \"2\");\n        rect1.setAttribute(\"rx\", \".38\");\n        \n        const rect2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        rect2.setAttribute(\"x\", \"7.55\");\n        rect2.setAttribute(\"y\", \"12.56\");\n        rect2.setAttribute(\"width\", \"2\");\n        rect2.setAttribute(\"height\", \"2\");\n        rect2.setAttribute(\"rx\", \".38\");\n        \n        const rect3 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        rect3.setAttribute(\"x\", \"10.55\");\n        rect3.setAttribute(\"y\", \"9.56\");\n        rect3.setAttribute(\"width\", \"2\");\n        rect3.setAttribute(\"height\", \"2\");\n        rect3.setAttribute(\"rx\", \".38\");\n        \n        const rect4 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        rect4.setAttribute(\"x\", \"7.55\");\n        rect4.setAttribute(\"y\", \"9.56\");\n        rect4.setAttribute(\"width\", \"2\");\n        rect4.setAttribute(\"height\", \"2\");\n        rect4.setAttribute(\"rx\", \".38\");\n        \n        const path2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n        path2.setAttribute(\"fill\", \"none\");\n        path2.setAttribute(\"d\", \"M0 0h20v20H0z\");\n        \n        // Assemble elements\n        g2.appendChild(path1);\n        g2.appendChild(rect1);\n        g2.appendChild(rect2);\n        g2.appendChild(rect3);\n        g2.appendChild(rect4);\n        g2.appendChild(path2);\n        \n        g1.appendChild(g2);\n        svg.appendChild(g1);\n        container.appendChild(svg);\n    }\n    \n    return container;\n}\n\nexport class CalendarIconView extends Component {\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:CalendarIconViewType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new CalendarIconController());\n\t\tconst props = controller.getProperties()\n        const template = CalendarIconViewTemplate(props)\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprotected destroy(): void {\n        super.destroy();\n\t\tthis.getGui().remove();\n    }\n\n}","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DATE_TIME__BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimePickerStateManagerType } from \"./date-picker-state-manager.types\";\n\n\n\n\n@Bean(DATE_TIME__BEAN_NAME.DATE_TIME_PICKER_STATE_MANAGER)\nexport class DateTimePickerStateManager extends EventEmitter implements DateTimePickerStateManagerType{\n\n    private dateOpenState : boolean = false;\n\n    setState(force : boolean){\n        this.dateOpenState = force\n    }\n\n    getState(): boolean{\n        return this.dateOpenState;\n    }\n\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateTimeReadonlyInputCompType } from \"./date-time-readonly-input.type\";\nimport { AutoWired, BEAN_NAME, setAriaLabel, setAriaRequired } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getDateTimeRootUtilityClass } from \"../date-time-root/date-time-root-classes\";\nimport { DateTimeOptionHandlerType } from \"../model/date-time-options-handler.types\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeModel } from \"../model/date-time-model\";\nimport { DateTimeEventHandlerType } from \"../model/date-time-event-handler.types\";\nimport { DateTimeKeyBoardShortCuts } from \"../model/date-time-keyboard-shorcuts\";\nimport { DateTimeInputHandler } from \"../model/date-time-input-handler\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateTimePlaceholderManagerIntegration } from \"../model/placeholder-engine-integration\";\n\n\nconst useUtilityClasses = (ownerState : any) => {\n\tconst { invalid, disabled, readonly,focus } = ownerState;\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'input',\n\t\t\tmodifiers: [\n\t\t\t\tinvalid && 'error',\n\t\t\t\tdisabled && 'disabled',\n\t\t\t\treadonly && 'readonly',\n                focus && 'focus'\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass);\n};\nexport class DateTimeReadonlyInputController extends EventEmitter {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: DateTimeOptionHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) protected model !: DateTimeModel;\n    @AutoWired(DATETIME_BEAN_NAME.KEYBOARD_SHORTCUT_HANDLER) adjusterEventHandler !: DateTimeKeyBoardShortCuts;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !: DateTimeEventHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_INPUT_HANDLER) inputHandler !: DateTimeInputHandler;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PLACEHOLDER_MANAGER) protected placeholderManager !: DateTimePlaceholderManagerIntegration;\n\n\n    private comp !: DateTimeReadonlyInputCompType;\n\n    // private dateAdjusterRef : IDestroyAdjuster | null = null;\n    private focus !:boolean;\n    \n    setComp(comp : DateTimeReadonlyInputCompType ) {\n        this.comp = comp;\n\n        this.applyClasses();\n        this.setValue();\n        this.setAriaAttributes();\n        this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.VALUE_CHANGED, this.setValue.bind(this));\n\n        // this.registerEventHandler();\n        // this.registerAdjusterEventHandler();\n    }\n\n    private applyClasses() : void {\n        const ownerState = this.getOwnerState();\n        const classes = useUtilityClasses(ownerState);\n        this.comp.addOrRemoveCSSClass(classes.root);\n        this.comp.getElement().classList.add(\"dg-field__input\")\n    }\n\n    // private refresh() : void {\n    //     this.applyClasses();\n\n    // }\n\n    private getOwnerState() {\n\t\treturn {\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadonly(),\n            focus : this.focus\n\t\t}\n\t}\n\n    // private registerEventHandler() {\n    //     const ownerState = this.getOwnerState();\n    //     const element = this.comp.getElement();\n\n    //     const type = this.optionHandler.getType();\n    //     if(type === 'datetimepicker'){\n    //         this.addListener(element, 'click', (_event) => {\n    //             this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.CREATE_CALENDAR})\n    //         })\n    //         this.addListener(element, 'keydown', (event) => {\n    //             if(event.key === 'Enter'){\n    //             this.dispatchEvent({ type: DATE_TIME_CUSTOM_EVENTS.CREATE_CALENDAR})\n\n    //             }\n    //         })\n\n    //     }\n        \n\n\n    //     if(ownerState.readonly || ownerState.disabled) {\n    //         if(ownerState.readonly){\n    //             this.addListener(element, 'focusin', (_event) => {\n    //                 this.focus = true\n    //                 this.refresh()\n    \n    //             })\n    //             this.addListener(element, 'focusout', (_event) => {\n\n    //                 this.focus = false\n    //                 this.refresh()\n    \n    //             })\n    //         }\n    //         return \n    //     }\n\n    //     this.inputHandler.registerElement(this.comp.getElement() as HTMLInputElement)\n        \n        \n    //     this.addListener(element, 'focusin', (event) => {\n    //         this.focus = true\n    //         this.refresh()\n    //         this.makeSelection()\n\n    //         this.dateTimeEventHandler.onFocus(event);\n    //     });\n    \n    //     this.addListener(element, 'focusout', (event) => {\n    //         this.focus = false\n    //         this.refresh()\n    //         this.dateTimeEventHandler.onFocusOut(event);\n    //     });\n\n    //     this.addListener(element, 'keydown', (event) => {\n    //         this.dateTimeEventHandler.onKeyDown(event);\n    //     });\n\n    //     this.addListener(element, 'input', (event : InputEvent) => {\n    //         event.preventDefault()\n\n    //         const value = (event.target as HTMLInputElement).value;\n    //         this.dateTimeEventHandler.onInput(value);\n    //     });\n\n    //     // this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.setValue.bind(this));\n    //     // this.addListener(this.eventHandler, 'EVENT_FOCUS_IN', this.setValue.bind(this));\n        \n    //     this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.setValue.bind(this));\n    //     this.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.refresh.bind(this));\n\t// \tthis.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.refresh.bind(this));\n    //     this.addListener(this.eventHandler, 'EVENT_MAKE_SELCTION_ONCLICK', this.makeOnClickSelection.bind(this));\n    //     this.addListener(this.eventHandler, 'EVENT_MAKE_SELCTION', this.makeSelection.bind(this));\n    //     this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE_BY_DATEPICKER', this.setValueOnDatePicker.bind(this));\n\n        \n\n    //     element.addEventListener(\"click\", (_event)=>{\n    //         this.dispatchEvent({ type: \"EVENT_MAKE_SELCTION_ONCLICK\" });\n    //     })\n\n    // }\n\n    // private makeOnClickSelection(): void {\n    //     const element = this.comp.getElement() as HTMLInputElement;\n    //     const cursorPosition = element.selectionStart as number;\n    //             const dateTimeParts = this.model.getSelectionPattern();\n    //             let selectedField = '';\n    //             let start = 0;\n    //             let end = 1;\n    //             for (const part of dateTimeParts) {\n    //                 if (cursorPosition >= part.start && cursorPosition <= part.end) {\n    //                     start = part.start\n    //                     end = part.end\n    //                     selectedField = part.type;\n    //                     break;\n    //                 }\n    //             }\n    //             this.model.setSelectedField(selectedField);\n    //             element.setSelectionRange(start,end);\n    // }\n\n    // private makeSelection():void{\n    //     const element        = this.comp.getElement() as HTMLInputElement;\n    //     const selectionField = this.model.getSelectedField();\n    //     const dateTimeParts  = this.model.getSelectionPattern();\n    //       // element.focus();  \n    //     let start = 0;\n    //     let end   = 1;\n    //     for (const part of dateTimeParts){\n    //         if(selectionField === part.type){\n    //             start = part.start\n    //             end   = part.end\n    //             break;\n    //         }\n    //     }\n    //     element.setSelectionRange(start,end);\n    // }\n    \n\n    private setAriaAttributes() : void {\n        const element = this.comp.getElement();\n        element.setAttribute('value',this.model.getValue())\n        setAriaRequired(element, this.optionHandler.isRequired());\n        setAriaLabel(element, this.optionHandler.getAriaLabel());\n        this.optionHandler.isDisabled() ? element.setAttribute(\"disabled\",\"\") : element.removeAttribute(\"disabled\");\n        this.optionHandler.isReadonly() ? element.setAttribute(\"readonly\",\"\") : element.removeAttribute(\"readonly\");\n    }\n\n    private setValue() : void {\n        const element = this.comp.getElement() as HTMLInputElement;\n        if(!this.model.getSelectedDateTime() && this.optionHandler.shouldShowFormatAsPlaceholder()){\n            const format = this.placeholderManager.getPlaceholder();\n            element.value = format;\n            element.innerText = String(format);\n            return\n        }\n        \n\n\n        if(this.model.isActivatePlaceholder()){\n            const placeHolder = this.optionHandler.getPlaceholder();\n            if(placeHolder === null){\n                element.removeAttribute('placeholder');\n            }\n            placeHolder  && element.setAttribute('placeholder',placeHolder) \n            element.innerText = '';\n            return\n        }\n        \n\n        const value = this.model.getValue();\n        const params = {\n            type: 'onChange',\n            event : {},\n            value : this.model.getDateObject()\n        }\n        this.optionHandler.onChange(params);\n        element.value = String(value);\n        element.innerText = String(value);\n        this.dispatchEvent({\n            type : DATE_TIME_CUSTOM_EVENTS.UPDATE_CALENDAR\n        })\n    }\n    // private setValueOnDatePicker() : void {\n    //     const value = this.model.getValue();\n    //     this.optionHandler.onChange(value);\n    //     const element = this.comp.getElement() as HTMLInputElement;\n    //     element.value = String(value);\n      \n    // }\n\n\n    // private registerAdjusterEventHandler() {\n    //     const element = this.comp.getElement();\n\n    //     this.dateAdjusterRef = this.adjusterEventHandler.registerElement(element);\n\n    //     this.addDestroyFunc(() => {\n    //         this.dateAdjusterRef && this.dateAdjusterRef.destroyFunc()\n    //         this.dateAdjusterRef = null;\n    //     })\n    // }\n\n    destroy(): void {\n        super.destroy();\n    }\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateTimeReadonlyInputController } from \"./date-time-readony-input-controller\";\nimport { DateTimeReadonlyInputCompType } from \"./date-time-readonly-input.type\";\n\nconst daetTimeInputTemplate = () => {\n    // const div = document.createElement(\"div\");\n    // div.innerHTML = `<span></span>`;\n    // return div.firstChild as HTMLElement;\n    return document.createElement(\"span\");\n}\n\nexport class DateTimeReadonlyInputComponent extends Component {\n\n    constructor() {\n        super();\n        this.setTemplate(daetTimeInputTemplate())\n    }\n\n    @PostConstruct()\n    init() {\n        const comp : DateTimeReadonlyInputCompType = {\n            getElement : () => this.getGui(),\n            addOrRemoveCSSClass : (className: string) => this.addOrRemoveCSSClass(className)\n        }\n\n        const controller = this.createBean(new DateTimeReadonlyInputController());\n        controller.setComp(comp);\n    }\n\n\n    private  addOrRemoveCSSClass(className: string) : void {\n        const element = this.getGui();\n        element && (element.className = className);\n    }\n\n}","\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport {  CalendarIconReadOnlyViewType } from \"./datefield-icon-view.types\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { PopupHandler } from \"../model/popup-handler\";\nimport { DATE_TIME__BEAN_NAME, DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimePickerStateManagerType } from \"../model/date-picker-state-manager.types\";\nimport { DateTimeModelType } from \"../model/date-time-model.types\";\nimport { DateTimeControllerHandlerType } from \"../model/date-time-controller.type\";\n\nexport class CalendarIconReadonlyController extends AbstractController<CalendarIconReadOnlyViewType>{\n\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_MODEL) protected model !: DateTimeModelType;\n    @AutoWired(DATE_TIME__BEAN_NAME.DATE_TIME_PICKER_STATE_MANAGER) protected stateManager !: DateTimePickerStateManagerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER) controllerHandler !: DateTimeControllerHandlerType;\n\n    \n   init(){\n    this.registerListeners();\n    this.applyClassNames();\n    this.setTabindex();\n    // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.UPDATE_CALENDAR, this.setDate.bind(this));\n    // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR, (params : any) => this.destroyCalendar(params.event));\n    // this.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.CREATE_CALENDAR, this.createCalendar.bind(this));\n    }\n\n    private setTabindex(){\n        const element = this.component?.getElement() as HTMLElement;\n        element.setAttribute('tabindex','0');\n    }\n\n    private applyClassNames(){\n        this.component?.addOrRemoveCssClass(\"dg-datepicker__icon\");\n    }\n\n\n    private registerListeners(){\n        const element = this.component?.getElement() as HTMLElement;\n\n            this.addListener(element, \"click\",()=>{\n\n\n                this.optionsHandler.onPickerOpen();\n                // if(this.stateManager.getState()){\n                //     this.destroyCalendar()\n                //     return\n                    \n                // }else{\n                //     this.createCalendar();\n                // }\n               \n            })\n\n    }\n\n    // private  createCalendar():void{\n    //     if (this.calendar) {\n    //         // this.destroyCalendar();\n    //         return\n    //     } \n    //     else {\n    //         const calendarParams :ICalendarConfiguration = { \n    //             appendTo      : this.optionsHandler.getDatePickerAppendTo(),\n    //             initialDate   : this.model.getValue(),\n    //             monthFormat   : 'MMM',\n    //             format        : this.optionsHandler.getFormat(),\n    //             ariaLabelledby: this.optionsHandler.getAriaLabelledby(),\n    //               // className     : this.optionsHandler.getClassName(),\n    //               // pickerType :  this.optionsHandler.getPickerType(),\n    //             hourCycle        : this.optionsHandler.getHourCycle(),\n    //             showAdjacentDates: false,\n    //             showTimePicker   : this.optionsHandler.getShowTimePicker(),\n    //             onChange         : (value:any)=>{\n    //                                 this.model.setValue(value);\n    //                                 this.dispatchEvent({type: 'EVENT_VALUE_UPDATE_BY_DATEPICKER'});\n    //                                 const inputElement =  this.controllerHandler.getDateTimeFieldController().getInputElement();\n    //                                 inputElement.focus();\n    //                                 this.dispatchEvent({\n    //                                     type : 'EVENT_MAKE_SELCTION'\n    //                                 })\n\n\n\n    //                             },\n    //             onClick : (_event :MouseEvent)=>{\n    //                                 const type = this.optionsHandler.getType();\n    //                                 if(type !== 'datetimepicker'){\n    //                                     this.destroyCalendar();\n    //                                 }\n\n    //                         }         \n    //         }\n\n\n    //         this.calendar = new Calendar(calendarParams);\n    \n    //         const calendarElement = this.calendar.api.getElement();\n    //         const sourceElement = this.controllerHandler.getDateTimeFieldController().getElement() as HTMLElement;\n            \n    //         const positionParams: PopupComponentPositionParams = {\n    //             popUpElement    : calendarElement,\n    //             // sourceElement : this.optionsHandler.getAppendTo(),\n    //             sourceElement,\n    //             position        : Position.bottomLeft,\n    //             keepWithinBounds : true,\n    //             gapX : this.optionsHandler.getHorizontalSpacing(),\n    //             gapY : this.optionsHandler.getVerticalSpacing(),\n    //         };\n    \n    //         const positionCallback = this.popupHandler.positionPopupByComponent.bind(this.popupHandler, positionParams,this.optionsHandler.getDatePickerAppendTo());\n    \n    //         const addPopup = this.popupHandler.addPopup({\n    //                             childElement   : calendarElement,\n    //                             anchorToElement:sourceElement,\n    //                             // anchorToElement: this.component?.getElement() as HTMLElement,\n    //                             popupParentElement: this.optionsHandler.getDatePickerAppendTo(),\n    //                             positionCallback,\n    //                             ariaLabel : ''\n    //                         });\n    //         this.popupDestroy = addPopup.hideFunction;\n\n    //     }\n    //     this.stateManager.setState(true);\n\n\n    // };\n\n    // setDate(){\n    //     const date = this.model.getDateAsDayjs();\n    //     this.calendar && this.calendar.api.setDate(date)\n    // }\n\n    // destroyCalendar(event ?: Event){\n    //     if(this.calendar){\n    //         this.calendar.api.destroy();\n    //         this.popupDestroy();\n    //         this.calendar = null;\n    //         this.stateManager.setState(false);\n    //         if(event) { // need to check with implementation\n    //             // event.preventDefault();\n    //             // event.stopPropagation();\n    //         }\n\n    //     }\n      \n\n    // }\n    \n\n\n}","\nimport { PostConstruct } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { CalendarIconReadOnlyViewType } from './datefield-icon-view.types';\nimport { CalendarIconReadonlyController } from './calendar-icon-controller';\n\n\n\nfunction CalendarIconViewTemplate(): HTMLElement {\n    const div = document.createElement('div');\n\n    const svgNS = \"http://www.w3.org/2000/svg\";\n    const svg = document.createElementNS(svgNS, \"svg\");\n    svg.setAttribute(\"viewBox\", \"0 0 20 20\");\n    svg.classList.add(\"dg-datepicker__icon-svg\");\n\n    const gLayer = document.createElementNS(svgNS, \"g\");\n    gLayer.setAttribute(\"data-name\", \"Layer 2\");\n\n    const gFill = document.createElementNS(svgNS, \"g\");\n    gFill.setAttribute(\"data-name\", \"Fill Icon\");\n\n    const path1 = document.createElementNS(svgNS, \"path\");\n    path1.setAttribute(\"d\", \"M14.38 2.25H5.62a3.37 3.37 0 0 0-3.37 3.37v8.76a3.37 3.37 0 0 0 3.37 3.37h8.76a3.37 3.37 0 0 0 3.37-3.37V5.62a3.37 3.37 0 0 0-3.37-3.37Zm0 14H5.62a1.87 1.87 0 0 1-1.87-1.87V5.62a1.87 1.87 0 0 1 1.87-1.87h8.76a1.88 1.88 0 0 1 1.84 1.54.78.78 0 0 0-.22 0H6a.75.75 0 0 0 0 1.5h10a.7.7 0 0 0 .25 0v7.68a1.87 1.87 0 0 1-1.87 1.78Z\");\n\n    const rect1 = document.createElementNS(svgNS, \"rect\");\n    rect1.setAttribute(\"x\", \"10.55\");\n    rect1.setAttribute(\"y\", \"12.56\");\n    rect1.setAttribute(\"width\", \"2\");\n    rect1.setAttribute(\"height\", \"2\");\n    rect1.setAttribute(\"rx\", \".38\");\n\n    const rect2 = rect1.cloneNode() as SVGRectElement;\n    rect2.setAttribute(\"x\", \"7.55\");\n\n    const rect3 = rect1.cloneNode() as SVGRectElement;\n    rect3.setAttribute(\"y\", \"9.56\");\n\n    const rect4 = rect3.cloneNode() as SVGRectElement;\n    rect4.setAttribute(\"x\", \"7.55\");\n\n    const path2 = document.createElementNS(svgNS, \"path\");\n    path2.setAttribute(\"fill\", \"none\");\n    path2.setAttribute(\"d\", \"M0 0h20v20H0z\");\n\n    gFill.append(path1, rect1, rect2, rect3, rect4, path2);\n    gLayer.appendChild(gFill);\n    svg.appendChild(gLayer);\n    div.appendChild(svg);\n\n    return div;\n}\n\n\nexport class CalendarIconReadOnlyView extends Component {\n    \n\t@PostConstruct()\n\tinit(): void {\n\n\t\tconst component:CalendarIconReadOnlyViewType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string) => this.addOrRemoveCSSClass(className),\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new CalendarIconReadonlyController());\n\n        const template = CalendarIconViewTemplate()\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprotected destroy(): void {\n        super.destroy();\n\t\tthis.getGui().remove();\n    }\n\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../../utility/user-params.types\";\nimport { DateTimeConfiguration } from \"./date-time-configuration.types\";\nimport { ComponentsRegistry, ComponentMeta } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { DateTimeUserComponentHandler } from \"./core/model/date-time-user-component-handler\";\nimport { DateTimeApi } from \"./core/model/date-time-api\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { Label } from \"../../label/label-view\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { SpinButtonComponent } from \"./core/date-time-spin-button/spin-button-view\";\nimport { DateTimeInputComponent } from \"./core/date-time-input/date-time-input-view\";\nimport { DateTimeOptionHandler } from \"./core/model/date-time-options-handler\";\nimport { DateTimeStateManager } from \"./core/model/date-time-state-manager\";\nimport { DateTimeControllerHandler } from \"./core/model/date-time-controller\";\nimport { DateTimeModel } from \"./core/model/date-time-model\";\nimport { DateTimeButtonComponent } from \"./core/date-time-button/date-time-button-view\";\nimport { ButtonRenderer } from \"./core/user-component/buttonRenderer\";\nimport { DateTimeEventHandler } from \"./core/model/date-time-event-handler\";\nimport { DateTimeKeyBoardShortCuts } from \"./core/model/date-time-keyboard-shorcuts\";\nimport { DateTimeInputHandler } from \"./core/model/date-time-input-handler\";\nimport { CalendarIconView } from \"./core/calendar-icon/calendar-icon-view\";\nimport { PopupHandler } from \"./core/model/popup-handler\";\nimport { DateTimePickerStateManager } from \"./core/model/date-picker-state-manager\";\nimport { DateTimeReadonlyInputComponent } from \"./core/date-time-readonly-input/date-time-readonly-input-view\";\nimport { CalendarIconReadOnlyView } from \"./core/calendar-icon-readonly/calendar-icon-view\";\n// import { DateTimePlaceholderManager } from \"./core/model/date-time-placeholder-hanlder\";\nimport { DateTimePlaceholderManagerIntegration } from \"./core/model/placeholder-engine-integration\";\nimport { DateTimeSelectionService } from \"./core/model/date-time-selection-service\";\nimport { DatePickerInteractor } from \"./core/model/date-picker-interacter\";\nimport { ErrorComponent } from \"../../error/error-view\";\n\n\nlet nextInstanceId = 1;\n\n\nexport class DateTimeCoreComponent {\n\tinitialize( configuration: DateTimeConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\t\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n        // Model classes\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n\t\tthis.registerCoreComponent(context);\n        // Default user compoent registry\n\t\tthis.registerDefaultUserComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tlet beanList = [\n            DateTimeApi,\n            DateTimeOptionHandler,\n            DateTimeUserComponentHandler,\n\n\t\t\tComponentsRegistry,\n\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n\t\t\tEventHandler,\n            DateTimeStateManager,\n            DateTimeControllerHandler,\n            DateTimeModel,\n            DateTimeEventHandler,\n            DateTimeKeyBoardShortCuts,\n\t\t\tDateTimeInputHandler,\n\t\t\tPopupHandler,\n\t\t\tDateTimePickerStateManager,\n\t\t\t// DateTimePlaceholderManager,\n\t\t\tDatePickerInteractor,\n\t\t\tDateTimePlaceholderManagerIntegration,\n\t\t\tDateTimeSelectionService\n\n            \n\t\t];\n\t\treturn new Set(beanList);\n\t}\n\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): {\n\t\tconfiguration: any;\n\t\tframeWorkOverrides: IFrameworkOverrides | null;\n\t\tglobalEventListener: Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t\tinstanceID : string;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n            buttonRenderer : ButtonRenderer\n\n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'date-time-helper-text',\n\t\t\tcomponentClass: DescriptionComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'date-time-label',\n\t\t\tcomponentClass: Label,\n\t\t},\n        {\n\t\t\tcomponentName: 'date-time-spin-button',\n\t\t\tcomponentClass: SpinButtonComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'date-time-input',\n\t\t\tcomponentClass: DateTimeInputComponent,\n\t\t},\n        {\n\t\t\tcomponentName: 'date-time-increment',\n\t\t\tcomponentClass: DateTimeButtonComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: 'date-time-decrement',\n\t\t\tcomponentClass: DateTimeButtonComponent,\n\t\t},\n\t\t{\n            componentName :'date-picker-icon',\n            componentClass : CalendarIconView\n        },\n\t\t{\n            componentName :'date-time-readonly-input',\n            componentClass : DateTimeReadonlyInputComponent\n        },\n\t\t{\n\t\t\tcomponentName : 'date-picker-icon-readonly',\n\t\t\tcomponentClass : CalendarIconReadOnlyView\n\t\t},\n\t\t{\n\t\t\tcomponentName : 'date-error',\n\t\t\tcomponentClass : ErrorComponent\n\t\t}\n\t\t\n    ];\n\n\treturn components;\n}\n\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getDateTimeRootUtilityClass } from \"./date-time-root-classes\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DateTimeComponentType } from \"./date-time-root.types\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeOptionHandlerType, HookInitiator } from \"../model/date-time-options-handler.types\";\nimport { DateTimeControllerHandler } from \"../model/date-time-controller\";\nimport { DateTimeEventHandlerType } from \"../model/date-time-event-handler.types\";\nimport { DateTimeRootControllerType } from \"./date-time-root-controller.type\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DatePickerInteractor } from \"../model/date-picker-interacter\";\nimport { DateTimeModel } from \"../model/date-time-model\";\nimport { subElement } from \"../model/date-time-api.type\";\n\nconst useUtilityClasses = (ownerState : any) => {\n\tconst { invalid, disabled, readonly } = ownerState;\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'root',\n\t\t\tmodifiers: [\n\t\t\t\tinvalid && 'error',\n\t\t\t\tdisabled && 'disabled',\n\t\t\t\treadonly && 'readonly',\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass);\n};\n\n\n\n// const useUtilityClassesForComponent = (ownerState : any) => {\n// \tconst { invalid, disabled, readonly } = ownerState;\n// \tconst slots = {\n// \t\troot: {\n// \t\t\tslot: 'spinbutton-panel',\n// \t\t\tmodifiers: [\n// \t\t\t\tinvalid && 'error',\n// \t\t\t\tdisabled && 'disabled',\n// \t\t\t\treadonly && 'readonly',\n// \t\t\t],\n// \t\t},\n// \t};\n\n// \treturn composeClasses(slots, getDateTimeRootUtilityClass);\n// };\n\n\n\nexport class DateTimeRootController extends AbstractController<DateTimeComponentType> implements DateTimeRootControllerType {\n    \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: DateTimeOptionHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !: DateTimeEventHandlerType;\n\t@AutoWired(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER) controllerHandler !: DateTimeControllerHandler;\n    @AutoWired(DATETIME_BEAN_NAME.DATE_PICKER_INTERACTOR) protected datePickerInteractor !: DatePickerInteractor;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_MODEL) protected model !: DateTimeModel;\n\n\n\tprivate isElementIsFocused: boolean = false;\n\n\n    init(){\n        this.registerEvents();\n\t\tthis.applyClassNames();\n\t\tthis.controllerHandler.registerDateTimeFieldController(this);\n\t\t// this.setTabindex();\n\n    }\n\n    private registerEvents() {\n\t\tconst element = this.component?.getGui() as HTMLElement\n        this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.applyClassNames.bind(this));\n        this.addListener(this.eventHandler, 'SET_FOCUS_OUT', this.setFocusOut.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler, DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR, this.focus.bind(this));\n\t\tthis.addListener(this.eventHandler,'FOCUS_INPUT_ELEMENT',this.focusInputElement.bind(this));\n\t\tthis.addListener(this.eventHandler,'FOCUS_CONTAINER',this.focus.bind(this));\n\t\tthis.addListener(this.eventHandler,'PROPERTY_CHANGED',this.applyClassNames.bind(this));\n\t\tthis.addListener(this.eventHandler,'EVENT_VALUE_UPDATE',this.applyClassNames.bind(this));\n\n\n\n\t\t// this.addListener(this.eventHandler,, this.focus.bind(this));\n\t\telement.addEventListener('focusin', (_event)=>{\n\n\t\t\t// const ownerState = this.getOwnerState();\n\t\t\t\n\n\t\t\t// if( ownerState.readonly || ownerState.disabled) {\n\t\t\t// \treturn\n\t\t\t// }\n\t\t\t// const relatedTarget     = event.relatedTarget as HTMLElement;\n\t\t\t// const datePickerId      = this.datePickerInteractor.getId();\n\t\t\t// const datePickerElement = document.getElementById(datePickerId);\n\t\t\t// const timeDropDown      = document.getElementById('dg-dropdown__body-container');\n\t\t\t\n\t\t\t// if (!datePickerElement || !this.isElementWithinDateField(relatedTarget)) {\n\t\t\t// \tthis.isElementIsFocused = true;\n\t\t\t// \tthis.applyClassNames();\n\t\t\t// \tthis.focus('ui', event)\n\t\t\t// \treturn\n\t\t\t// }\n\t\t\t// const isTimeDropDown     = timeDropDown ? timeDropDown.contains(relatedTarget):false;\n\t\t\t// const isWithinDatePicker = datePickerElement === relatedTarget || datePickerElement.contains(relatedTarget) || isTimeDropDown;\n\t\t\t\n\t\t\t// if (!isWithinDatePicker) {\n\t\t\t// \tthis.isElementIsFocused = true;\n\t\t\t// \tthis.applyClassNames();\n\t\t\t// \tthis.focus('ui', event)\n\t\t\t// }\n\t\t});\n\n\t\telement.addEventListener('focusout', (event)=>{\n\t\t\tconst ownerState = this.getOwnerState();\n\t\t\t\n\t\t\tif( ownerState.readonly || ownerState.disabled) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\t\t\tconst relatedTarget = event.relatedTarget as HTMLElement;\n\n\t\t\t\t\t\tif (element.contains(relatedTarget)) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n                        const datePickerId = this.datePickerInteractor.getId();\n                        const datePickerElement = document.getElementById(datePickerId);\n                        const timeDropDown = document.querySelector('.dg-dropdown__container');\n\n\n\t\t\t\t\t\tif(!datePickerElement || !relatedTarget){\n\t\t\t\t\t\t\t// const params = {\n\t\t\t\t\t\t\t// \ttype: 'On_Blur',\n\t\t\t\t\t\t\t// \tevent,\n\t\t\t\t\t\t\t// \tvalue : this.model.getDateObject(),\n\t\t\t\t\t\t\t// \tsource :'ui' as HookInitiator\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t// this.optionHandler.onBlur(params)\n\t\t\t\t\t\t\tif(document.hasFocus()) {\n\t\t\t\t\t\t\t\tthis.isElementIsFocused = false;\n\t\t\t\t\t\t\t\tthis.applyClassNames();\n\t\t\t\t\t\t\t\tthis.blur('ui', event)\n\t\t\t\t\t\t\t\tthis.datePickerInteractor.destroyCalendar();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\treturn\n\n\t\t\t\t\t\t}\n                        // Close if either element is not in document\n                        const isTimeDropDown = timeDropDown ? timeDropDown.contains(relatedTarget):false;\n                        // Check if the related target is within either element\n                        const isWithinDatePicker = datePickerElement === relatedTarget || \n                                                 datePickerElement.contains(relatedTarget) || isTimeDropDown;\n                        \n                        if (!isWithinDatePicker  ) {\n\t\t\t\t\t\t\t// const params = {\n\t\t\t\t\t\t\t// \ttype: 'On_Blur',\n\t\t\t\t\t\t\t// \tevent,\n\t\t\t\t\t\t\t// \tvalue : this.model.getDateObject(),\n\t\t\t\t\t\t\t// \tsource :'ui' as HookInitiator\n\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t// this.optionHandler.onBlur(params)\n\t\t\t\t\t\t\tif(document.hasFocus()) {\n\t\t\t\t\t\t\t\tthis.isElementIsFocused = false;\n\t\t\t\t\t\t\t\tthis.applyClassNames();\n\t\t\t\t\t\t\t\tthis.blur('ui', event)\n\t\t\t\t\t\t\t\tthis.datePickerInteractor.destroyCalendar();\n\t\t\t\t\t\t\t}\n\n                        }\n\t\t\t\n\t\t\t\n\n\t\t});\n    }\n\n\t// private isElementWithinDateField(element: HTMLElement): boolean {\n    //     let pointer: HTMLElement | null = element;\n        \n    //     while (pointer) {\n    //         if (pointer === this.component?.getGui()) {\n    //             return true;\n    //         }\n    //         pointer = pointer.parentElement;\n    //     }\n\n    //     return false;\n    // }\n\t\n\n\t// private setTabindex(){\n\t// \tconst element = this.component?.getGui() as HTMLElement;\n\t// \telement.setAttribute('tabindex','0');\n\t// }\n\n\tprivate addErrorState() : void {\n        const isValid = this.optionHandler.isValid();\n\n        this.component!.getGui().classList.toggle('dg-input__status--error', isValid);\n    }\n\n\tprivate setFocusOut():void{\n\t\tthis.isElementIsFocused = !this.isElementIsFocused\n\t}\n\n\n\tprivate applyClassNames(){\n\t\tconst ownerState = this.getOwnerState();\n\t\tconst classes = useUtilityClasses(ownerState);\n\t\tthis.component?.addOrRemoveCssClass(classes.root, true);\n\t\tthis.component?.getGui().classList.add(\"dg-field__root\");\n\t\tconst type = this.optionHandler.getType();\n\t\tif(type === 'datetimepicker' || type === 'datepicker'){\n\t\t\tthis.component?.getGui().classList.add(\"dg-date-picker__root\");\n\t\t}\n\n\t\townerState.disabled &&  this.component?.getGui().classList.add(\"dg-input__status--disabled\")\n\t\townerState.readonly &&  this.component?.getGui().classList.add(\"dg-input__status--readonly\")\n\t\townerState.focus &&  this.component?.getGui().classList.add(\"dg-input__status--focus\")\n\t\tthis.addErrorState();\n\t}\n\n\tprivate getOwnerState() {\n\t\treturn {\n\t\t\t// invalid : !this.numberModel.isValid(),\n\t\t\tdisabled: this.optionHandler.isDisabled(),\n\t\t\treadonly: this.optionHandler.isReadonly(),\n\t\t\tfocus   : this.isElementIsFocused,\n\t\t\t\n\t\t}\n\t}\n\n    getProperty() : any {\n        return {\n\t\t\t// onInput          : this.onInput.bind(this),\n\t\t\t// onKeyDown        : this.onKeyDown.bind(this),\n\t\t\t// onFocusIn        : this.onFocusIn.bind(this),\n\t\t\t// onFocusOut       : this.onFocusOut.bind(this),\n\t\t\t// isvalid          : this.numberModel.isValid(),\n\t\t\t// focused          : this.numberModel.isFocused(),\n\t\t\tlabel      : this.optionHandler.getLabel(),\n\t\t\tdescription: this.optionHandler.getDescription(),\n\t\t\tgenerateEmptyDom : this.optionHandler.shouldIgnoreEmptyDOM(),\n\t\t\ttype       : this.optionHandler.getType(),\n\t\t\thtmlFor    : 'number',\n\t\t\tid         : 'number',\n\t\t\trequired   : this.optionHandler.isRequired(),\n\t\t\treadOnly   : this.optionHandler.isReadonly(),\n\t\t\tdisabled   : this.optionHandler.isDisabled(),\n\t\t\t// onIncrement      : () => this.numberEventHandler.onIncrement(),\n\t\t\t// onDecrement      : () => this.numberEventHandler.onDecrement(),\n\t\t\t// incrementDisabled: this.numberModel.isIncrementDisabled(),\n\t\t\t// decrementDisabled: this.numberModel.isDecrementDisabled(),\n\t\t\tspinButton  : this.optionHandler.getSpinButton(),\n\t\t\tgetTemplate : (props: any) => this.optionHandler.getTemplate(props),\n\t\t\tcalendarIcon: this.optionHandler.getCalendarIcon(),\n\t\t\terror       : this.optionHandler.showErrorState()\n\t\t\t// registerAdjusterElement : (element : HTMLElement) => this.adjusterEventHandler.registerElement(element)\n\t\t};\n    }\n\n\tgetParamsProperty() {\n\n\t\treturn {\n\t\t\tincrementButton: {\n                getIcon          : () =>  this.optionsHandler.getIncrementButtonSVGIconId(),\n                getRenderer      : () => this.optionsHandler. getIncrementButtonRenderer(),\n                getRendererParams: () => this.optionsHandler. getIncrementButtonRendererParams(),\n                callback         : (event: any) => this.dateTimeEventHandler.onIncrement(event),\n                isDisabled    : () => false,\n\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole          : () => 'increment',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses : ()=> [\"dg-date-time__spinbutton\", \"dg-date-time__spin-downbtn\"],\n\t\t\t\tgetSvgClasses : ()=>\"dg-date-time__increment-svg\"\n\n\t\t\t},\n\t\t\tdecrementButton: {\n                getIcon       : () =>  this.optionsHandler.getDecrementButtonSVGIconId(),\n                renderer      : () => this.optionsHandler.getDecrementButtonRenderer(),\n                rendererParams: () => this.optionsHandler.getDecrementButtonRendererParams(),\n                callback      : (event : any) => this.dateTimeEventHandler.onDecrement(event),\n                isDisabled    : () => false,\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole       : () => 'decrement',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses    : ()=> [ \"dg-date-time__spinbutton\", \"dg-date-time__spin-downbtn\"],\n\t\t\t\tgetSvgClasses : ()=>\"dg-date-time__decrement-svg\"\n\n\t\t\t},\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> \"dg-date-time__label\",\n\t\t\t\tgetLabelTitleClasses :()=> \"dg-date-time__label-title\"\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-date-time__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-date-time__description\"\n\t\t\t}\n\t\t};\n    }\n\n\tgetElement() : HTMLElement {\n\t\treturn this.component?.getGui() as HTMLElement;\n\t}\n\n\tfocusInputElement(source:HookInitiator, event?:FocusEvent):void {\n\t\t\t\n\t\tconst elem = this.component?.getInputElement() as HTMLElement;\n\t\telem.focus();\n\t\tthis.focus(source, event)\n\t}\n\n\tfocus(source:HookInitiator, event?:FocusEvent):void {\n\t\t// this.component?.getGui().focus();\n\t\t\n\t\tconst inputElement = this.component?.getInputElement() as HTMLElement;\n\t\tinputElement.focus();\n\n\t\tthis.isElementIsFocused = true;\n\t\tthis.applyClassNames();\n\n\n\t\tconst params = {\n\t\t\ttype: 'On_Focus',\n\t\t\tevent,\n\t\t\tvalue : this.model.getDateObject(),\n\t\t\tsource \n\t\t}\n\t\tthis.optionHandler.onFocus(params);\n\n\t}\n\n\tblur(source:HookInitiator, event?:FocusEvent):void {\n\t\t// this.component?.getGui().blur();\n\n\t\n\t\tconst elem = this.component?.getInputElement() as HTMLElement;\n\t\telem.blur();\n\t\tconst params = {\n\t\t\ttype: 'On_Blur',\n\t\t\tevent,\n\t\t\tvalue : this.model.getDateObject(),\n\t\t\tsource\n\t\t}\n\t\tthis.optionHandler.onBlur(params);\n\n\t}\n\n\thide(subElement: subElement[]): void {\n\t\tif (!this.component?.getGui()) {\n\t\t\tconsole.warn('Component GUI not available');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subElement || subElement.length === 0) {\n\t\t\t// Hide the entire component\n\t\t\tconst elem = this.component.getGui();\n\t\t\telem.style.display = \"none\";\n\t\t\treturn;\n\t\t}\n\n\t\t// Hide specific elements\n\t\tsubElement.forEach(element => {\n\t\t\tlet elem: HTMLElement | null | undefined = null;\n\n\t\t\tswitch (element) {\n\t\t\t\tcase 'suffix':\n\t\t\t\t\telem = this.component?.getSuffixElement() ;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prefix':\n\t\t\t\t\telem = this.component?.getPrefixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'label':\n\t\t\t\t\telem = this.component?.getLabelElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'description':\n\t\t\t\t\telem = this.component?.getDescriptionElement();\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn(`Unknown element type to hide: ${element}`);\n\t\t\t}\n\n\t\t\tif (elem) {\n\t\t\t\telem.style.display = \"none\";\n\t\t\t}\n\t\t});\n\t}\n\n\tshow(subElement: subElement[]): void {\n\t\tif (!this.component?.getGui()) {\n\t\t\tconsole.warn('Component GUI not available');\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subElement || subElement.length === 0) {\n\t\t\t// Hide the entire component\n\t\t\tconst elem = this.component.getGui();\n\t\t\telem.style.display = \"block\";\n\t\t\treturn;\n\t\t}\n\n\t\t// Hide specific elements\n\t\tsubElement.forEach(element => {\n\t\t\tlet elem: HTMLElement | null | undefined = null;\n\n\t\t\tswitch (element) {\n\t\t\t\tcase 'suffix':\n\t\t\t\t\telem = this.component?.getSuffixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prefix':\n\t\t\t\t\telem = this.component?.getPrefixElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'label':\n\t\t\t\t\telem = this.component?.getLabelElement();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'description':\n\t\t\t\t\telem = this.component?.getDescriptionElement();\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn(`Unknown element type to hide: ${element}`);\n\t\t\t}\n\n\t\t\tif (elem) {\n\t\t\t\telem.style.display = \"flex\";\n\t\t\t}\n\t\t});\n\t}\n\n\n\tdestroy():void {\n\t\tsuper.destroy();\n\t\tthis.component?.getGui().remove();\n\n\t\t// this.component?.destroy();\n\t\t// this.dispatchEvent({\n\t\t// \ttype: DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR\n\t\t// })\n\t}\n\n\topenPicker():void {\n\t\tthis.datePickerInteractor.createCalendar()\n\t}\n\n\tclosePicker():void{\n\t\tthis.datePickerInteractor.destroyCalendar()\n\t\t\n\n\t}\n\tgetInputElement():HTMLElement{\n\t\treturn this.component?.getInputElement() as HTMLElement;\n\t}\n\n\tgetDateInputWrapper(): HTMLElement {\n\t\treturn this.component?.getDateInputWrapper() as HTMLElement;\n\t}\n}","import { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { composeClasses } from '@dg/utils';\nimport { getDateTimeRootUtilityClass } from './date-time-root-classes';\nimport { DateTimeRootController } from './date-time-root-controller';\nimport { DateTimeComponentType } from './date-time-root.types';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'container',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass)\n}\n\n// const splitButtonTemplate = (description:any, label:any ) => {\n// \treturn `<div>\n// \t\t${ label ? `<date-time-label ref=\"label\"></date-time-label>`:\"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-increment ref=\"incrementButton\"></date-time-increment>\n// \t\t\t\t<date-time-input ref=\"dateInput\"></date-time-input>\n// \t\t\t\t<date-time-decrement ref=\"decrementButton\"></date-time-decrement>\n// \t\t\t</div>\n// \t\t</div>\n// \t\t${ description ? `<date-time-helper-text ref = \"description\"></date-time-helper-text>`:\"\"}\n// \t</div>`\n// }\n\n// const spinButtonTogetherTemplate = (description: any, label:any ) => {\n// \treturn `<div>\n// \t${ label ? `<date-time-label ref=\"label\"></date-time-label>`:\"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-input ref=\"dateInput\"></date-time-input>\n// \t\t\t\t<date-time-spin-button ref=\"spinButton\"></date-time-spin-button>\n// \t\t\t</div>\n// \t\t</div>\n// \t\t${ description ? `<date-time-helper-text ref = \"description\"></date-time-helper-text>`:\"\"}\n// \t</div>`\n// }\n\n// const BasicTemplateWithoutButtons = ( description: any, label:any )=>{\n// \treturn `<div>\n// \t${ label ? `<date-time-label ref=\"label\"></date-time-label>`:\"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-input ref=\"dateInput\"></date-time-input>\n// \t\t\t</div>\n// \t\t</div>\t\n// \t\t${ description ? `<date-time-helper-text ref = \"description\"></date-time-helper-text>`:\"\"}\n// \t</div>`\n\n// }\n\n\n\n// const DatePickerTemplate = (label: any, description: any, calendarIcon: boolean,spinButton:string) => {\n// \treturn `<div>\n// \t\t${label ? `<date-time-label ref=\"label\"></date-time-label>` : \"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-input ref=\"dateInput\"></date-time-input>\n// \t\t\t\t${spinButton === 'together' ? `<date-time-spin-button ref=\"spinButton\"></date-time-spin-button>`:``}\n// \t\t\t\t${ spinButton ==='none' && calendarIcon ? `<date-picker-icon></date-picker-icon>` : \"\"}\n// \t\t\t</div>\n// \t\t</div>\t\n// \t\t${description ? `<date-time-helper-text ref=\"description\"></date-time-helper-text>` : \"\"}\n// \t</div>`;\n// };\n\nconst splitButtonTemplate = (description: boolean, label: boolean,generateEmptyDom: boolean, error : boolean): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (generateEmptyDom || label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main Container\n    const dateTimeContainer = document.createElement(\"div\");\n    dateTimeContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input Wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Increment Button\n    const incrementButton = document.createElement(\"date-time-increment\");\n    incrementButton.setAttribute(\"ref\", \"incrementButton\");\n    inputWrapper.appendChild(incrementButton);\n\n    // Date Input\n    const dateInput = document.createElement(\"date-time-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Decrement Button\n    const decrementButton = document.createElement(\"date-time-decrement\");\n    decrementButton.setAttribute(\"ref\", \"decrementButton\");\n    inputWrapper.appendChild(decrementButton);\n\n    // Append input wrapper to container\n    dateTimeContainer.appendChild(inputWrapper);\n    container.appendChild(dateTimeContainer);\n\n    // Description\n    if (generateEmptyDom || description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    if (generateEmptyDom || error) {\n        const errorElement = document.createElement(\"date-error\");\n        errorElement.setAttribute(\"ref\", \"error\");\n        container.appendChild(errorElement);\n    }\n\n    return container;\n};\n\nconst spinButtonTogetherTemplate = (description: boolean, label: boolean,generateEmptyDom: boolean, error : boolean): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (generateEmptyDom || label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main Container\n    const dateTimeContainer = document.createElement(\"div\");\n    dateTimeContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input Wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.setAttribute('ref', 'date-inpu-wrapper');\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Date Input\n    const dateInput = document.createElement(\"date-time-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Spin Button\n    const spinButton = document.createElement(\"date-time-spin-button\");\n    spinButton.setAttribute(\"ref\", \"spinButton\");\n    inputWrapper.appendChild(spinButton);\n\n    // Append input wrapper to container\n    dateTimeContainer.appendChild(inputWrapper);\n    container.appendChild(dateTimeContainer);\n\n    // Description\n    if (generateEmptyDom || description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    if (generateEmptyDom || error) {\n        const errorElement = document.createElement(\"date-error\");\n        errorElement.setAttribute(\"ref\", \"error\");\n        container.appendChild(errorElement);\n    }\n\n    return container;\n};\nconst BasicTemplateWithoutButtons = ( label: string ,description: string, generateEmptyDom: boolean, error : boolean): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (generateEmptyDom || label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main Container\n    const dateTimeContainer = document.createElement(\"div\");\n    dateTimeContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input Wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.setAttribute('ref', 'date-inpu-wrapper');\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Date Input\n    const dateInput = document.createElement(\"date-time-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Append input wrapper to container\n    dateTimeContainer.appendChild(inputWrapper);\n    container.appendChild(dateTimeContainer);\n\n    // Description\n    if (generateEmptyDom || description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    if (generateEmptyDom || error) {\n        const errorElement = document.createElement(\"date-error\");\n        errorElement.setAttribute(\"ref\", \"error\");\n        container.appendChild(errorElement);\n    }\n\n    return container;\n};\n\n\nconst DatePickerTemplate = (\n    label: boolean,\n    description: boolean,\n    calendarIcon: boolean,\n    spinButton: string,\n    generateEmptyDom: boolean,\n    error : boolean\n): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (generateEmptyDom || label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main Container\n    const dateTimeContainer = document.createElement(\"div\");\n    dateTimeContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input Wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.setAttribute('ref', 'date-inpu-wrapper');\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Date Input\n    const dateInput = document.createElement(\"date-time-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Spin Button\n    if (spinButton === \"together\") {\n        const spinBtn = document.createElement(\"date-time-spin-button\");\n        spinBtn.setAttribute(\"ref\", \"spinButton\");\n        inputWrapper.appendChild(spinBtn);\n    }\n\n    // Calendar Icon (if spinButton is 'none' and calendarIcon is true)\n    if (spinButton === \"none\" && calendarIcon) {\n        const calendarIconElement = document.createElement(\"date-picker-icon\");\n        inputWrapper.appendChild(calendarIconElement);\n    }\n\n    // Append input wrapper to container\n    dateTimeContainer.appendChild(inputWrapper);\n    container.appendChild(dateTimeContainer);\n\n    // Description\n    if (generateEmptyDom || description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    if (generateEmptyDom || error) {\n        const errorElement = document.createElement(\"date-error\");\n        errorElement.setAttribute(\"ref\", \"error\");\n        container.appendChild(errorElement);\n    }\n\n    return container;\n};\n\n\n\n\nfunction RootTemplate(props : any): HTMLElement {\n\tconst { spinButton, getTemplate, label, description, type,calendarIcon,generateEmptyDom, error } = props;\n\tconst classes = useUtilityClasses();\n\tconst div = document.createElement('div');\n\tconst customTemplate = getTemplate(classes);\n\n\tif(type === 'datetimepicker' || type === 'datepicker' || type === 'timepicker') {\n\t\tconst template = DatePickerTemplate(label,description,calendarIcon,spinButton, generateEmptyDom, error);\n\t\tdiv.appendChild(template);\n\t\treturn div.firstChild as HTMLElement;\n\t}\n\n\tconst template = customTemplate ? customTemplate : (spinButton === \"together\" ? spinButtonTogetherTemplate(label,description,generateEmptyDom, error):(spinButton === \"split\" ? splitButtonTemplate(label,description, generateEmptyDom, error) : BasicTemplateWithoutButtons( label, description,generateEmptyDom, error)))\n\n\t// const template = spinButton === 'together' ? (customTemplate ? customTemplate : spinButton ? spinButtonTogetherTemplate(classes,label,helperText) : splitButtonTemplate(classes, label,helperText)): BasicTemplateWithoutButtons(classes, label, helperText);\n\tdiv.appendChild(template);\n\treturn div.firstChild as HTMLElement;\n}\n\nexport class DateTimeRootView extends Component {\n\t@queryAssignedNodes('dateInput') dateInputElement !      : any;\n    @queryAssignedNodes('prefix') prefixElement \t\t\t !: any;\n\t@queryAssignedNodes('suffix') suffixElement \t\t\t !: any;\n\t@queryAssignedNodes('label') LabelElement \t\t\t !: any;\n\t@queryAssignedNodes('description') descriptionElement \t\t\t !: any;\n    @queryAssignedNodes('date-inpu-wrapper') dateInputWrapper !: HTMLElement;\n\n\tprivate appendTo: HTMLElement | undefined;\n\tconstructor(appendTo: HTMLElement | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: DateTimeComponentType = {\n\t\t\tgetGui             : () => this.getGui(),\n\t\t\t// getElement             : () => this.getElement(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tgetInputElement  :  ()=>this.getInputElement(),\n\t\t\tdestroy: () => this.destroy(),\n            getSuffixElement : ()=> this.getSuffixElement(),\n\t\t\tgetPrefixElement : ()=> this.getPrefixElement(),\n\t\t\tgetLabelElement : ()=> this.getLabelElement(),\n\t\t\tgetDescriptionElement : ()=> this.getDescriptionElement(),\n            getDateInputWrapper : () => this.dateInputWrapper\n\t\t};\n\n        // change createMangedBean to createWire\n\t\tconst controller = this.createManagedBean(new DateTimeRootController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = RootTemplate(props);\n\n\t\tconst properties = controller.getParamsProperty();\n\t\t\n\t\tthis.setTemplate(template, {\n            incrementButton: properties.incrementButton,\n            decrementButton: properties.decrementButton,\n            spinButton     : properties,\n            label          : properties.label,\n            description    : properties.description,\n            error          : properties.description\n\t\t});\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tgetElement(){\n\t\treturn this.getGui();\n\t}\n\n    getSuffixElement():any{\n\t\treturn this.suffixElement ? this.suffixElement.eGui  : null; \n\t}\n\n\t getLabelElement():any{\n\t\treturn this.LabelElement ? this.LabelElement.eGui  : null\n\t}\n\n\t getDescriptionElement():any{\n\t\treturn this.descriptionElement ? this.descriptionElement.eGui : null;\n\t}\n\n\t getPrefixElement():any{\n\t\treturn this.prefixElement ? this.prefixElement.eGui : null\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = undefined;\n\t\t});\n\t}\n\n\tprivate getInputElement(): HTMLInputElement{\n\t\treturn this.dateInputElement.eGui;\n\t}\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\nexport function getDateTimeRootUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('date-time', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getDateTimeRootUtilityClass } from \"./date-time-readonly-root-classes\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DateTimeComponentType } from \"./date-time-readonly-root.types\";\nimport { DATETIME_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateTimeOptionHandlerType } from \"../model/date-time-options-handler.types\";\nimport { DateTimeControllerHandler } from \"../model/date-time-controller\";\nimport { DateTimeEventHandlerType } from \"../model/date-time-event-handler.types\";\nimport { DateTimeReadonlyRootControllerType } from \"./date-time-readonly-root-controller.type\";\nimport { DATE_TIME_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\nconst useUtilityClasses = (ownerState : any) => {\n\tconst { invalid, disabled, readonly } = ownerState;\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'root',\n\t\t\tmodifiers: [\n\t\t\t\tinvalid && 'error',\n\t\t\t\tdisabled && 'disabled',\n\t\t\t\treadonly && 'readonly',\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass);\n};\n\n\n\n// const useUtilityClassesForComponent = (ownerState : any) => {\n// \tconst { invalid, disabled, readonly } = ownerState;\n// \tconst slots = {\n// \t\troot: {\n// \t\t\tslot: 'spinbutton-panel',\n// \t\t\tmodifiers: [\n// \t\t\t\tinvalid && 'error',\n// \t\t\t\tdisabled && 'disabled',\n// \t\t\t\treadonly && 'readonly',\n// \t\t\t],\n// \t\t},\n// \t};\n\n// \treturn composeClasses(slots, getDateTimeRootUtilityClass);\n// };\n\n\n\nexport class DateTimeReadonlyRootController extends AbstractController<DateTimeComponentType> implements DateTimeReadonlyRootControllerType {\n\tgetInputElement(): HTMLElement {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n    \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: DateTimeOptionHandlerType;\n    @AutoWired(DATETIME_BEAN_NAME.DATETIME_EVENT_HANDLER) dateTimeEventHandler !: DateTimeEventHandlerType;\n\t@AutoWired(DATETIME_BEAN_NAME.DATETIME_CONTROLLER_HANDLER) controllerHandler !: DateTimeControllerHandler;\n\n    init(){\n        // this.registerEvents();\n\t\tthis.applyClassNames();\n\t\tthis.controllerHandler.registerDateTimeFieldController(this);\n    }\n\n\n    // private registerEvents() {\n    //     this.addListener(this.eventHandler, 'EVENT_FOCUS_OUT', this.applyClassNames.bind(this));\n\t// \tthis.addListener(this.eventHandler, 'EVENT_INCREMENT_UPDATED', this.applyClassNames.bind(this));\n\t// \tthis.addListener(this.eventHandler, 'EVENT_DECREMENT_UPDATED', this.applyClassNames.bind(this));\n    // }\n\n\tprivate applyClassNames(){\n\t\tconst ownerState = this.getOwnerState();\n\t\tconst classes = useUtilityClasses(ownerState);\n\t\tthis.component?.addOrRemoveCssClass(classes.root, true);\n\t\tthis.component?.getElement().classList.add(\"dg-field__root\");\n\t\tconst type = this.optionHandler.getType();\n\t\tif(type === 'datetimepicker'){\n\t\t\tthis.component?.getElement().classList.add(\"dg-date-picker__root\");\n\t\t}\n\n\t}\n\n\tprivate getOwnerState() {\n\t\treturn {\n\t\t\t// invalid : !this.numberModel.isValid(),\n\t\t\tdisabled : this.optionHandler.isDisabled(),\n\t\t\treadonly : this.optionHandler.isReadonly()\n\t\t}\n\t}\n\n    getProperty() : any {\n        return {\n\t\t\t// onInput          : this.onInput.bind(this),\n\t\t\t// onKeyDown        : this.onKeyDown.bind(this),\n\t\t\t// onFocusIn        : this.onFocusIn.bind(this),\n\t\t\t// onFocusOut       : this.onFocusOut.bind(this),\n\t\t\t// isvalid          : this.numberModel.isValid(),\n\t\t\t// focused          : this.numberModel.isFocused(),\n\t\t\tlabel            : this.optionHandler.getLabel(),\n\t\t\tdescription : this.optionHandler.getDescription(),\n\t\t\ttype :  this.optionHandler.getType(),\n\t\t\thtmlFor          : 'number',\n\t\t\tid               : 'number',\n\t\t\trequired         : this.optionHandler.isRequired(),\n\t\t\treadOnly         : this.optionHandler.isReadonly(),\n\t\t\tdisabled         : this.optionHandler.isDisabled(),\n\t\t\t// onIncrement      : () => this.numberEventHandler.onIncrement(),\n\t\t\t// onDecrement      : () => this.numberEventHandler.onDecrement(),\n\t\t\t// incrementDisabled: this.numberModel.isIncrementDisabled(),\n\t\t\t// decrementDisabled: this.numberModel.isDecrementDisabled(),\n\t\t\tspinButton       : this.optionHandler.getSpinButton(),\n\t\t\tgetTemplate            : (props: any) => this.optionHandler.getTemplate(props),\n\t\t\tcalendarIcon      : this.optionHandler.getCalendarIcon()\n\n\t\t\t// registerAdjusterElement : (element : HTMLElement) => this.adjusterEventHandler.registerElement(element)\n\t\t};\n    }\n\n\tgetParamsProperty() {\n\n\t\treturn {\n\t\t\tincrementButton: {\n                getIcon          : () =>  this.optionsHandler.getIncrementButtonSVGIconId(),\n                getRenderer      : () => this.optionsHandler. getIncrementButtonRenderer(),\n                getRendererParams: () => this.optionsHandler. getIncrementButtonRendererParams(),\n                callback         : (event: any) => this.dateTimeEventHandler.onIncrement(event),\n                isDisabled    : () => false,\n\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole          : () => 'increment',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses : ()=> [\"dg-date-time__spinbutton\", \"dg-date-time__spin-downbtn\"],\n\t\t\t\tgetSvgClasses : ()=>\"dg-date-time__increment-svg\"\n\n\t\t\t},\n\t\t\tdecrementButton: {\n                getIcon       : () =>  this.optionsHandler.getDecrementButtonSVGIconId(),\n                renderer      : () => this.optionsHandler.getDecrementButtonRenderer(),\n                rendererParams: () => this.optionsHandler.getDecrementButtonRendererParams(),\n                callback      : (event : any) => this.dateTimeEventHandler.onDecrement(event),\n                isDisabled    : () => false,\n\t\t\t\tisReadonly : () => this.optionHandler.isReadonly(),\n                getRole       : () => 'decrement',\n\t\t\t\tgetSpinButton : () =>(this.optionsHandler.getSpinButton() === 'split' ? true : false),\n\t\t\t\tgetClasses    : ()=> [ \"dg-date-time__spinbutton\", \"dg-date-time__spin-downbtn\"],\n\t\t\t\tgetSvgClasses : ()=>\"dg-date-time__decrement-svg\"\n\n\t\t\t},\n\t\t\tlabel : {\n\t\t\t\tgetLabelClasses :()=> \"dg-date-time__label\",\n\t\t\t\tgetLabelTitleClasses :()=> \"dg-date-time__label-title\"\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-date-time__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-date-time__description\"\n\t\t\t}\n\t\t};\n    }\n\n\tgetElement() : HTMLElement {\n\t\treturn this.component?.getElement() as HTMLElement;\n\t}\n\n\tfocus():void {\n\t\tconst elem = this.component?.getInputElement() as HTMLElement;\n\t\telem.focus();\n\t}\n\n\thide():void {\n\t\t// const elem = this.component?.getInputElement() as HTMLElement;\n\t\t// elem.focus();\n\t}\n\n\tshow():void {\n\t\t//const elem = this.component?.getInputElement() as HTMLElement;\n\t\t//elem.focus();\n\t}\n\n\tdestroy():void {\n\t\tsuper.destroy();\n\t\t// this.component?.destroy();\n\t\tthis.dispatchEvent({\n\t\t\ttype: DATE_TIME_CUSTOM_EVENTS.DESTROY_CALENDAR\n\t\t})\n\t}\n\n}","import { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport {Component} from '@dg/corecomponent/Component.js'\nimport { composeClasses } from '@dg/utils';\nimport { getDateTimeRootUtilityClass } from './date-time-readonly-root-classes';\nimport { DateTimeReadonlyRootController } from './date-time-readonly-root-controller';\nimport { DateTimeComponentType } from './date-time-readonly-root.types';\n\nconst useUtilityClasses = () => {\n\tconst slots = {\n\t\tcontainer : {\n\t\t\tslot : 'container',\n\t\t\tmodifiers : []\n\t\t}\n\t}\n\n\treturn composeClasses(slots, getDateTimeRootUtilityClass)\n}\n\n// const splitButtonTemplate = (description:any, label:any ) => {\n// \treturn `<div>\n// \t\t${ label ? `<date-time-label ref=\"label\"></date-time-label>`:\"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-increment ref=\"incrementButton\"></date-time-increment>\n// \t\t\t\t<date-time-readonly-input ref=\"dateInput\"></date-time-readonly-input>\n// \t\t\t\t<date-time-decrement ref=\"decrementButton\"></date-time-decrement>\n// \t\t\t</div>\n// \t\t</div>\n// \t\t${ description ? `<date-time-helper-text ref = \"description\"></date-time-helper-text>`:\"\"}\n// \t</div>`\n// }\n\n// const spinButtonTogetherTemplate = (description: any, label:any ) => {\n// \treturn `<div>\n// \t${ label ? `<date-time-label ref=\"label\"></date-time-label>`:\"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-readonly-input ref=\"dateInput\"></date-time-readonly-input>\n// \t\t\t\t<date-time-spin-button ref=\"spinButton\"></date-time-spin-button>\n// \t\t\t</div>\n// \t\t</div>\n// \t\t${ description ? `<date-time-helper-text ref = \"description\"></date-time-helper-text>`:\"\"}\n// \t</div>`\n// }\n\n\n// const BasicTemplateWithoutButtons = ( description: any, label:any )=>{\n// \treturn `<div>\n// \t${ label ? `<date-time-label ref=\"label\"></date-time-label>`:\"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-readonly-input ref=\"dateInput\"></date-time-readonly-input>\n// \t\t\t</div>\n// \t\t</div>\t\n// \t\t${ description ? `<date-time-helper-text ref = \"description\"></date-time-helper-text>`:\"\"}\n// \t</div>`\n\n// }\n\n\n// const DatePickerTemplate = (description: any, label: any, calendarIcon: boolean) => {\n// \treturn `<div>\n// \t\t${label ? `<date-time-label ref=\"label\"></date-time-label>` : \"\"}\n// \t\t<div class=\"dg-date-time__container dg-field__container\">\n// \t\t\t<div class=\"dg-date-time__input-wrapper dg-field__input-wrapper\">\n// \t\t\t\t<date-time-readonly-input ref=\"dateInput\"></date-time-readonly-input>\n// \t\t\t\t${calendarIcon ? `<date-picker-icon-readonly ref=\"pickericon\"></date-picker-icon-readonly>` : \"\"}\n// \t\t\t</div>\n// \t\t</div>\t\n// \t\t${description ? `<date-time-helper-text ref=\"description\"></date-time-helper-text>` : \"\"}\n// \t</div>`;\n// };\n\n\nconst splitButtonTemplate = (description: any, label: any): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main container\n    const dateContainer = document.createElement(\"div\");\n    dateContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Increment button\n    const incrementButton = document.createElement(\"date-time-increment\");\n    incrementButton.setAttribute(\"ref\", \"incrementButton\");\n    inputWrapper.appendChild(incrementButton);\n\n    // Readonly input\n    const dateInput = document.createElement(\"date-time-readonly-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Decrement button\n    const decrementButton = document.createElement(\"date-time-decrement\");\n    decrementButton.setAttribute(\"ref\", \"decrementButton\");\n    inputWrapper.appendChild(decrementButton);\n\n    // Append input wrapper to main container\n    dateContainer.appendChild(inputWrapper);\n    container.appendChild(dateContainer);\n\n    // Helper text\n    if (description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    return container;\n};\n\nconst spinButtonTogetherTemplate = (description: any, label: any): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main container\n    const dateContainer = document.createElement(\"div\");\n    dateContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Readonly input\n    const dateInput = document.createElement(\"date-time-readonly-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Spin button\n    const spinButton = document.createElement(\"date-time-spin-button\");\n    spinButton.setAttribute(\"ref\", \"spinButton\");\n    inputWrapper.appendChild(spinButton);\n\n    // Append input wrapper to main container\n    dateContainer.appendChild(inputWrapper);\n    container.appendChild(dateContainer);\n\n    // Helper text\n    if (description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    return container;\n};\n\nconst BasicTemplateWithoutButtons = (description: any, label: any): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main container\n    const dateContainer = document.createElement(\"div\");\n    dateContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Readonly input\n    const dateInput = document.createElement(\"date-time-readonly-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Append input wrapper to main container\n    dateContainer.appendChild(inputWrapper);\n    container.appendChild(dateContainer);\n\n    // Helper text\n    if (description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    return container;\n};\n\nconst DatePickerTemplate = (description: any, label: any, calendarIcon: boolean): HTMLDivElement => {\n    const container = document.createElement(\"div\");\n\n    // Label\n    if (label) {\n        const labelElement = document.createElement(\"date-time-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n    // Main container\n    const dateContainer = document.createElement(\"div\");\n    dateContainer.classList.add(\"dg-date-time__container\", \"dg-field__container\");\n\n    // Input wrapper\n    const inputWrapper = document.createElement(\"div\");\n    inputWrapper.classList.add(\"dg-date-time__input-wrapper\", \"dg-field__input-wrapper\");\n\n    // Readonly input\n    const dateInput = document.createElement(\"date-time-readonly-input\");\n    dateInput.setAttribute(\"ref\", \"dateInput\");\n    inputWrapper.appendChild(dateInput);\n\n    // Calendar icon\n    if (calendarIcon) {\n        const icon = document.createElement(\"date-picker-icon-readonly\");\n        icon.setAttribute(\"ref\", \"pickericon\");\n        inputWrapper.appendChild(icon);\n    }\n\n    // Append input wrapper to main container\n    dateContainer.appendChild(inputWrapper);\n    container.appendChild(dateContainer);\n\n    // Helper text\n    if (description) {\n        const helperText = document.createElement(\"date-time-helper-text\");\n        helperText.setAttribute(\"ref\", \"description\");\n        container.appendChild(helperText);\n    }\n\n    return container;\n};\n\n\nfunction RootTemplate(props: any): HTMLElement {\n    const { spinButton, getTemplate, label, description, type, calendarIcon } = props;\n    const classes = useUtilityClasses();\n    const div = document.createElement('div');\n    const customTemplate = getTemplate(classes);\n\n    let templateElement;\n\n    if (type === 'datetimepicker' || type === 'datepicker') {\n        templateElement = DatePickerTemplate(label, description, calendarIcon);\n    } else if (customTemplate) {\n        templateElement = customTemplate;\n    } else {\n        switch (spinButton) {\n            case \"together\":\n                templateElement = spinButtonTogetherTemplate(label, description);\n                break;\n            case \"split\":\n                templateElement = splitButtonTemplate(label, description);\n                break;\n            default:\n                templateElement = BasicTemplateWithoutButtons(label, description);\n        }\n    }\n\n    div.appendChild(templateElement);\n    return div.firstChild as HTMLElement;\n}\n\n\nexport class DateTimeReadonlyRootView extends Component {\n\t@queryAssignedNodes('dateInput') dateInputElement !      : any;\n\tprivate appendTo: HTMLElement | undefined;\n\tconstructor(appendTo: HTMLElement | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: DateTimeComponentType = {\n\t\t\tgetElement             : () => this.getElement(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tgetInputElement  :  ()=>this.getInputElement(),\n\t\t\tdestroy: () => this.destroy(),\n\t\t};\n\n        // change createMangedBean to createWire\n\t\tconst controller = this.createManagedBean(new DateTimeReadonlyRootController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = RootTemplate(props);\n\n\t\tconst properties = controller.getParamsProperty();\n\t\t\n\t\tthis.setTemplate(template, {\n\t\t\tincrementButton: properties.incrementButton,\n\t\t\tdecrementButton: properties.decrementButton,\n\t\t\tspinButton     : properties,\n\t\t\tlabel : properties.label,\n\t\t\tdescription : properties.description\n\t\t});\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tgetElement(){\n\t\treturn this.getGui();\n\t}\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = undefined;\n\t\t});\n\t}\n\n\tprivate getInputElement(): HTMLInputElement{\n\t\treturn this.dateInputElement.eGui;\n\t}\n}","export const TOKEN_BEAN_NAME = {\n\tTOKEN_API                : 'tokenAPI',\n\tTOKEN_CONFIGURATION      : 'configuration',\n\tTOKEN_RENDERER_HANDLER   : 'tokenRendererHandler',\n\tTOKEN_DATA_STORE         : 'tokenDataStore',\n\tTOKEN_NAVIGATION         : 'tokenNavigation',\n\tTOKEN_CLASSNAME_GENERATOR: 'tokenClassNameGenerator',\n\tTOKEN_EDIT_HANDLER       : 'tokenEditHandler',\n\tHOOK_MANAGER             : 'hookManager',\n\tDROPDOWN                 : 'dropDown',\n\tPOSITION_HANDLER         : 'positionHandler',\n\tDROPDOWN_MODEL           : 'dropdownModel'\n};\n\n","import { ITokenDataMapping } from \"../../token-configuration.types\";\n\nexport const DefaultDataMapping : ITokenDataMapping = {\n    id       : 'id',\n    color    : 'color',\n    imageURL : 'imageURL',\n    value    : 'value',\n    removable: 'removable',\n    type     : 'type',\n    editable : 'editable',\n    disabled : 'disabled'\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITokenOptionHandler, TokenEditorSelector, TokenRendererSelector, TokenTooltipRenderer, TokenTooltipSelector } from \"./token-option-handler.types\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { ITokenData, ITokenDataMapping, TokenConfigurations, TokenContentType } from \"../../token-configuration.types\";\nimport { DefaultDataMapping } from \"../constants/data-mapping\";\nimport { TokenEditorParams, TokenRendererParams, TokenTooltipParams } from \"../core/token-item/token-item.types\";\nimport { EventsType } from \"../../../List/List-configuration\";\n\nconst DEFAULT_TOOLTIP_HIDE_DELAY = 5000;\nconst DEFAULT_TOOLTIP_SHOW_DELAY = 100;\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class TokenOptionHandler extends EventEmitter implements ITokenOptionHandler {\n    private domKey = `_DG_${Math.random().toString()}`;\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_CONFIGURATION) configuration!: TokenConfigurations;\n\t@AutoWired('element') private \telement !: HTMLElement;\n\n\n    getDomKey(): string {\n\t\treturn this.domKey;\n\t}\n\n\tgetDomData(element: Node | null, key: string): any {\n\t\tconst domData = (element as any)[this.getDomKey()];\n\t\treturn domData ? domData[key] : undefined;\n\t}\n\n\tsetDomData(element: Element, key: string, value: any): any {\n\t\tconst domKey = this.getDomKey();\n        let domData = (element as any)[domKey];\n\n\t\tif (!domData) {\n\t\t\tdomData = {};\n\t\t\t(element as any)[domKey] = domData;\n\t\t}\n\n\t\tdomData[key] = value;\n\t}\n\n    getData() : ITokenData[] {\n        return this.configuration.data ?? []\n    }\n\n    getDataMapping() : ITokenDataMapping {\n        return { ...DefaultDataMapping, ...this.configuration?.dataMapping };\n    }\n\n    getMaxAllowedValues() : number {\n        return this.configuration?.maxAllowedValues ?? Infinity;\n    }\n\n    getTokenRenderer(): ((params: TokenRendererParams) => TokenRendererSelector) | undefined {\n        return this.configuration?.tokenRenderer ?? undefined;\n    }\n\n    getTokenEditor(): ((params: TokenEditorParams) => TokenEditorSelector) | undefined {\n        return this.configuration?.tokenEditor ?? undefined;\n    }\n\n    getDataByValue(): ((value: string) => ITokenData) | undefined {\n        return this.configuration?.getDataByValue ?? undefined;\n    }\n\n    getDefaultColor(): string {\n        return this.configuration?.defaultColor ?? 'grey';\n    }\n\n    getDefaultImageURL(): string {\n        return this.configuration?.defaultImageURL ?? '';\n    }\n\n    getSeparators(): string[] {\n        return this.configuration?.separators ?? [','];\n    }\n\n    shouldStopPropagation(event: Event): boolean {\n        if(this.configuration.shouldStopPropagation) {\n            return this.configuration.shouldStopPropagation(event) ?? false;\n        }\n\n        return true;\n    }\n\n    getDocument(): Document {\n        let result: Document | null = null;\n        if (this.element) {\n\t\t\tresult = this.element.ownerDocument;\n\t\t}\n\n        if (result) {\n            return result;\n        }\n\n        return document;\n    }\n\n    getTooltipRenderer(): (new (...args: any[]) => TokenTooltipRenderer<TokenTooltipParams>) | undefined {\n        return this.configuration?.tooltipRenderer ?? undefined;\n    }\n\n    getTooltipRendererParams(): Record<string, any> {\n        return this.configuration?.tooltipRendererParams ?? {}\n    }\n\n    getTooltipSelector(): ((params: any) => TokenTooltipSelector) | undefined {\n        return this.configuration?.tooltipSelector ?? undefined;\n    }\n\n    getPopupParent(): HTMLElement | null {\n        return this.configuration?.popupParent ?? document.body;\n    }\n\n    getTooltipHideDelay(): number {\n        return this.configuration.tooltipHideDelay ?? DEFAULT_TOOLTIP_HIDE_DELAY;\n    }\n\n    getTooltopShowDelay(): number {\n        return this.configuration.tooltipShowDelay ?? DEFAULT_TOOLTIP_SHOW_DELAY;\n    }\n\n    isTooltipTrackMosue(): boolean {\n        return this.configuration.tooltipTrackMouse ?? false;\n    }\n\n    getPattern(): RegExp | undefined {\n        return this.configuration.pattern ?? undefined\n    }\n\n    isCreateTokenOnInValidData(): boolean {\n        return this.configuration?.createTokenOnInValidData ?? true;\n    }\n\n    getSearchValue(): string {\n        return this.configuration.searchValue ?? '';\n    }\n\n    isAutoFocus(): boolean {\n        return this.configuration.autoFocus ?? false;\n    }\n\n    getPlaceHolder(): string | undefined {\n        return this.configuration.placeHolder ?? undefined;\n    }\n\n    isTokenEditable() : boolean {\n        return this.configuration.tokens?.editable ?? true;\n    }\n\n    getTokenContentType() : TokenContentType {\n        return this.configuration.tokens?.type ?? 'text';\n    }\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n\n    getDropdownEvents(): EventsType {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.events) ?? {}\n    }\n\n    getEvents() : any {\n        return this.configuration.events ?? {}\n    }\n\n    isDropdownNeeded(): boolean {\n        return this.configuration.dropdown ?? false;\n    }\n\n    updateDisable(disable: boolean): void {\n        this.configuration.disabled = disable;\n    }\n\n    getSearchMinKeyword(): number {\n        return this.configuration.search?.minKeywordLength ?? 0;\n    }\n\n    getSearchHighlightKeyword(): boolean {\n        return this.configuration.search?.highlightKeyword ?? false;\n    }\n\n    isCloseOnSelect(): boolean {\n        return this.configuration.dropdownList?.closeOnSelect ?? true;\n    }\n\n    isAcceptNewValues(): boolean {\n        return this.configuration.acceptNewValues ?? false;\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        this.configuration.onKeydown?.(event);\n    }\n}","export const TOKEN_OPTION_EVENT = {\n    DATA_UPDATE : 'data-update'\n}\n\nexport const TOKEN_EVENT = {\n    MODEL_UPDATE    : 'tokenModelUpdate',\n    PROPERTY_CHANGED: 'propertyChanged'\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITokenAPI } from \"./token-api.types\";\nimport { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName, Optional } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { ITokenData, TokenHookInitiator } from \"../../token-configuration.types\";\nimport { ITokenDataStore } from \"./token-data-store.types\";\nimport { TokenControllerHandlerType } from \"./token-controller.types\";\nimport { ITokenOptionHandler } from \"./token-option-handler.types\";\nimport { TOKEN_EVENT } from \"../constants/event\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { DropdownType } from \"../core/dropdown/Dropdown.types\";\n\n@Bean(TOKEN_BEAN_NAME.TOKEN_API)\nexport class TokenAPI extends EventEmitter implements ITokenAPI {\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) private tokenDataStore !: ITokenDataStore;\n    @AutoWired('tokenControllerHandler') private tokenControllerHandler !: TokenControllerHandlerType;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ITokenOptionHandler;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    @Optional(TOKEN_BEAN_NAME.DROPDOWN) private dropdown !: DropdownType\n    getSelectedValueAsString(): string {\n        this.dispatchEvent({\n            type : \"EVENT_INPUT_DATA_UPDATE\"\n        })\n        return this.tokenDataStore.getSelectedTokenAsValue();\n    }\n    getSelectedToken(): ITokenData[] {\n        this.dispatchEvent({\n            type : \"EVENT_INPUT_DATA_UPDATE\"\n        })\n        return this.tokenDataStore.getSelectedTokenData();\n    }\n\n    focus() : void {\n        this.dispatchEvent({\n            type : 'tokenFocused'\n        })\n    }\n\n    getElement() : HTMLElement {\n        const tokenRootController = this.tokenControllerHandler.get('tokenRootController');\n        return tokenRootController.getElement();\n    }\n\n    addTokens(data : ITokenData[], initiator : TokenHookInitiator = 'api') : void {\n        this.tokenDataStore.setTokenData(data,this.optionsHandler.getDataMapping(), null, 'none', initiator, false);\n    }\n\n    removeTokens(ids : string[], initiator : TokenHookInitiator = 'api') : void {\n        this.tokenDataStore.removeTokenOptions(ids, initiator);\n    }\n\n    clearAllTokens() : void {\n        this.tokenDataStore.clearAllTokens('api');\n    }\n\n    getTokenCount(): number {\n        return this.getSelectedToken().length;\n    }\n\n    getValidTokens(): ITokenData[] {\n        this.dispatchEvent({\n            type : \"EVENT_INPUT_DATA_UPDATE\"\n        })\n        return this.tokenDataStore.getValidTokens();\n    }\n\n    updateTokens(data: ITokenData[]): void {\n        this.tokenDataStore.updateTokens(data, 'api');\n    }\n\n    enable(): void {\n        this.optionHandler.updateDisable(false);\n        this.dispatchPropertyChangedEvent();\n    }\n\n    disable(): void {\n        this.optionHandler.updateDisable(true);\n        this.dispatchPropertyChangedEvent();\n    }\n\n    destroyToken(): void {\n        const tokenRootController = this.tokenControllerHandler.get('tokenRootController');\n        tokenRootController.destroyToken();\n\n        const context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT) as Context;\n        context.destroy();\n    }\n\n    getToken(id: string): ITokenData | null {\n        const tokenOption = this.tokenDataStore.getTokenOption(id)\n        return tokenOption ? tokenOption.getData() : null;\n    }\n\n    openDropdown(event : Event) : void {\n        this.dropdown && this.dropdown.openDropdown(event);\n    }\n\n    closeDropdown(event : Event) : void {\n        this.dropdown && this.dropdown.closeDropdown(event);\n    }\n\n    isDropdownOpened() : boolean {\n        return this.dropdown ? this.dropdown.isDropdownOpened() : false;\n    }\n\n    blur() : void {\n        this.dispatchEvent({\n            type : \"TOKEN_FOCUSOUT\"\n        })\n    }\n\n    setDataSource(data : Object[]) : void {\n        this.dropdown && this.dropdown.setDataSource(data);\n    }\n\n    private dispatchPropertyChangedEvent() : void {\n        this.dispatchEvent({\n            type : TOKEN_EVENT.PROPERTY_CHANGED\n        })\n    }\n    \n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITokenRendererHandler } from \"./token-renderer-handler.types\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { PostConstruct } from \"@dg/corecomponent\";\n\n@Bean(TOKEN_BEAN_NAME.TOKEN_RENDERER_HANDLER)\nexport class TokenRendererHandler extends EventEmitter implements ITokenRendererHandler {\n\n    private tokenControllers : any[] = [];\n    @PostConstruct()\n    init() : void {\n\n    }\n\n    refreshAfterModelUpdate() : void {\n\n    }\n\n    getControllers() : any[] {\n        return this.tokenControllers;\n    }\n}","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n    // find the complete implementation of crypto (msCrypto) on IE11.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || new Array(16);\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n\n  if (node == null || clockseq == null) {\n    var seedBytes = options.random || (options.rng || rng)();\n\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n    }\n\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n  var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n\n\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n  if (nsecs >= 10000) {\n    throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n  msecs += 12219292800000; // `time_low`\n\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff; // `time_mid`\n\n  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff; // `time_high_and_version`\n\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n  b[i++] = clockseq & 0xff; // `node`\n\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf || stringify(b);\n}\n\nexport default v1;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import { DGEvent, EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITokenOption } from \"./token-option.types\";\nimport { ITokenData, ITokenDataMapping, TokenContentType } from \"../../token-configuration.types\";\nimport { v1 as uuid1 } from \"uuid\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { TOKEN_OPTION_EVENT } from \"../constants/event\";\nimport { BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ITokenOptionHandler } from \"./token-option-handler.types\";\n\nlet instanceIdSequence = 0;\nexport class TokenOption extends EventEmitter implements ITokenOption {\n    private   id             : string;\n    private   data           : ITokenData;\n    private   dataMapping    : ITokenDataMapping;\n    protected eventHandler  !: EventHandler;\n    private   width          : number = 0;\n    private   instanceID     : number = instanceIdSequence++;\n    private   validationState: boolean = true;\n\n    private getBeanInstanceByBeanName  : getBeanInstanceByBeanName;\n\n    constructor(data : ITokenData, dataMapping : ITokenDataMapping, getBeanInstanceByBeanName : getBeanInstanceByBeanName) {\n        super();\n        this.data                      = data;\n        this.dataMapping               = dataMapping;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n        this.id                        = this.getIDFromMapping() ?? uuid1()\n    }\n\n    public getID() : string {\n        return this.id\n    }   \n\n    public getInstanceId() : number {\n        return this.instanceID;\n    }\n    public getValue() : string {\n        return this.getMappedValue('value');\n    }\n\n    public getColor() : string {\n        return this.getMappedValue('color') ?? this.getDefaultColor();\n    }\n\n    public getImageURL() : string {\n        return this.getMappedValue('imageURL') ?? this.getDefaultImageURL();\n    }\n\n    public isEditable() : boolean {\n        return this.getMappedValue('editable')  ?? this.isTokenEditable();\n    }\n\n    public isDisabled() : boolean {\n        return this.getMappedValue('disabled') ?? this.isTokenDisabled();\n    }\n\n    public getTokenContentType() : TokenContentType {\n        return this.getMappedValue('type') ?? this.getDefaultTokenContentType();\n    }\n\n    private isTokenEditable() : boolean {\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler\n        return optionHandler.isTokenEditable();\n    }\n\n    private isTokenDisabled() : boolean {\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler\n        return optionHandler.isDisabled();\n    }\n\n    private getDefaultImageURL() : string {\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler\n        return optionHandler.getDefaultImageURL();\n    }\n\n    private getDefaultColor() : string {\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler\n        return optionHandler.getDefaultColor();\n    }\n\n    private getDefaultTokenContentType() : TokenContentType {\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler\n        return optionHandler.getTokenContentType();\n    }\n\n    public updateData(data : ITokenData) : boolean {\n        this.data = data;\n\n        this.dispatchEvent({\n            type : TOKEN_OPTION_EVENT.DATA_UPDATE\n        })\n\n        return true;\n    }\n\n    public updateValue(value : string) : boolean {\n        const mappedKey = this.dataMapping['value']!\n        this.data[mappedKey] = value;\n\n        this.dispatchEvent({\n            type : TOKEN_OPTION_EVENT.DATA_UPDATE\n        })\n\n        return true;\n    }\n\n    public getUpdatedData(value : string) : {data : ITokenData, changed : boolean } {\n        const data = {...{}, ...this.data} as ITokenData;\n        const mappedKey = this.dataMapping['value']!\n        data[mappedKey] = value;\n        return {data, changed : true};\n    }\n\n    public dispatchEvent(event : DGEvent) : void {\n        if (this.eventHandler) {\n            this.eventHandler.dispatchEvent(event);\n        }\n    }\n\n    public addEventListener(eventType: string, listener: EventListener, async?: boolean, _options?: AddEventListenerOptions ): void {\n        if(!this.eventHandler) {\n            this.eventHandler = new EventHandler();\n        }\n        this.eventHandler.addEventListener(eventType, listener, async);\n    }\n    public removeEventListener(eventType: string, listener: EventListener, async?: boolean, _options?: AddEventListenerOptions ): void {\n        if(!this.eventHandler) {\n            this.eventHandler = new EventHandler();\n        }\n        this.eventHandler.removeEventListener(eventType, listener, async);\n    }\n\n    public updateWidth(width: number) : void {\n        this.width = width;\n    }\n\n    public getWidth() : number {\n        return this.width;\n    }\n\n    private getMappedValue(key:  keyof ITokenDataMapping): any {\n        const mappedKey = this.dataMapping[key] as string;\n        return this.data[mappedKey];\n    }\n\n    private getIDFromMapping() : string {\n        return this.getMappedValue('id')\n    }\n\n    public getData(): ITokenData {\n        return this.data;\n    }\n\n    public isValidated(): boolean {\n        return this.validationState;\n    }\n\n    public setValidationState(value: boolean): void {\n        this.validationState = value;\n        this.dispatchEvent({\n            type : 'EVENT_VALIDATION_UPDATED'\n        })\n    }\n\n    public isTokenRemovable() : boolean {\n        return this.getMappedValue('removable') ?? true;\n    }\n}","import { IGenericDataStore } from \"./generic-data-store.types\";\n\nexport class GenericDataStore<T> implements IGenericDataStore<T> {\n    private dataMap: Map<string, T>;\n    private order: string[];\n  \n    constructor() {\n      this.dataMap = new Map();\n      this.order = [];\n    }\n  \n    /**\n     * Add a new data item to the store.\n     * @param id - Unique identifier for the data item.\n     * @param data - Data item to store.\n     */\n    addData(id: string, data: T): void {\n      if (!this.dataMap.has(id)) {\n        this.dataMap.set(id, data);\n        this.order.push(id);\n      }\n    }\n  \n    /**\n     * Retrieve a data item by its ID.\n     * @param id - The ID of the data item.\n     */\n    getData(id: string): T | undefined {\n      return this.dataMap.get(id);\n    }\n  \n    /**\n     * Remove a data item by its ID.\n     * @param id - The ID of the data item to remove.\n     * @returns True if the data was removed, false otherwise.\n     */\n    removeData(id: string): boolean {\n      if (this.dataMap.has(id)) {\n        this.dataMap.delete(id);\n        this.order = this.order.filter((orderId) => orderId !== id);\n        return true;\n      }\n      return false;\n    }\n  \n    /**\n     * Check if a data item exists in the store.\n     * @param id - The ID to check.\n     */\n    hasData(id: string): boolean {\n      return this.dataMap.has(id);\n    }\n  \n    /**\n     * Get all data items in order.\n     */\n    getAllData(): T[] {\n      return this.order.map((id) => this.dataMap.get(id)!) as T[];\n    }\n  \n    /**\n     * Insert a new data item after an existing one.\n     * @param existingId - The ID of the existing data item.\n     * @param newId - The ID of the new data item.\n     * @param newData - The new data item.\n     */\n    insertDataAfterId(existingId: string, newId: string, newData: T): boolean {\n      const index = this.order.indexOf(existingId);\n      if (index === -1 || this.dataMap.has(newId)) {\n        return false;\n      }\n  \n      this.order.splice(index + 1, 0, newId);\n      this.dataMap.set(newId, newData);\n      return true;\n    }\n  \n    /**\n     * Insert a new data item before an existing one.\n     * @param existingId - The ID of the existing data item.\n     * @param newId - The ID of the new data item.\n     * @param newData - The new data item.\n     */\n    insertDataBeforeId(existingId: string, newId: string, newData: T): boolean {\n      const index = this.order.indexOf(existingId);\n      if (index === -1 || this.dataMap.has(newId)) {\n        return false;\n      }\n  \n      this.order.splice(index, 0, newId);\n      this.dataMap.set(newId, newData);\n      return true;\n    }\n  \n    /**\n     * Delete all data items after a specific ID.\n     * @param id - The ID after which data items should be deleted.\n     */\n    deleteDataAfterId(id: string): void {\n      const index = this.order.indexOf(id);\n      if (index !== -1 && index < this.order.length - 1) {\n        const idsToDelete = this.order.splice(index + 1);\n        idsToDelete.forEach((deleteId) => this.dataMap.delete(deleteId));\n      }\n    }\n  \n    /**\n     * Delete all data items before a specific ID.\n     * @param id - The ID before which data items should be deleted.\n     */\n    deleteDataBeforeId(id: string): void {\n      const index = this.order.indexOf(id);\n      if (index !== -1 && index > 0) {\n        const idsToDelete = this.order.splice(0, index);\n        idsToDelete.forEach((deleteId) => this.dataMap.delete(deleteId));\n      }\n    }\n  \n    /**\n     * Retrieve data items within a range of indices.\n     * @param fromIndex - The start index (inclusive).\n     * @param toIndex - The end index (inclusive).\n     */\n    getDataInRange(fromIndex: number, toIndex: number): T[] {\n      if (fromIndex < 0 || toIndex >= this.order.length || fromIndex > toIndex) {\n        return [];\n      }\n  \n      const idsInRange = this.order.slice(fromIndex, toIndex + 1);\n      return idsInRange.map((id) => this.dataMap.get(id)!) as T[];\n    }\n\n    getNextId(id: string): string | null {\n        let index = this.order.findIndex((existingId) => existingId === id);\n    \n        if (index !== -1) {\n            \n            if (index + 1 < this.order.length) {\n                return this.order[index + 1]; \n            }\n        }\n    \n        return null; \n    }\n\n    getPreviousId(id: string): string | null {\n        let index = this.order.findIndex((existingId) => existingId === id);\n    \n        if (index > 0) {\n            return this.order[index - 1]; \n        }\n    \n        return null; \n    }\n\n    getFirstId(): string | null {\n        if (this.order.length > 0) {\n            return this.order[0]; \n        }\n    \n        return null; \n    }\n\n    getLastId(): string | null {\n        if (this.order.length > 0) {\n            return this.order[this.order.length - 1]; \n        }\n    \n        return null; \n    }\n\n    getOrders(): string[] {\n      return this.order ?? [];\n    }\n  }\n  ","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\nimport { ITokenDataStore } from './token-data-store.types';\nimport { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName } from '@dg/corecomponent';\nimport { TOKEN_BEAN_NAME } from '../constants/beanname-constant';\nimport { ITokenData, ITokenDataMapping, TokenAddParams, TokenHookInitiator, TokenRemoveParams, TokenUpdateParams, ValueChangeHookParams } from '../../token-configuration.types';\nimport { ITokenOption } from './token-option.types';\nimport { TokenOption } from './token-option';\nimport { GenericDataStore } from './generic-data-store';\nimport { TOKEN_EVENT } from '../constants/event';\nimport { TokenValueHandlerType } from './token-value-handler.types';\nimport { HookManagerType } from './hook-manager.types';\nimport { HookEventsName } from '../constants/HookEventNames';\n\n@Bean(TOKEN_BEAN_NAME.TOKEN_DATA_STORE)\nexport class TokenDataStore extends EventEmitter implements ITokenDataStore {\n\tprivate tokenOptions: GenericDataStore<ITokenOption> = new GenericDataStore<ITokenOption>();\n    @AutoWired('TokenValueHandler') private tokenValueHandler !: TokenValueHandlerType ;\n    @AutoWired(TOKEN_BEAN_NAME.HOOK_MANAGER) private hookManager !: HookManagerType;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\tpublic setTokenData(data: ITokenData[], dataMapping : ITokenDataMapping, targetId?: string | null , position: 'before' | 'after' | 'none' = 'none',initiator : TokenHookInitiator = 'api', firstLoad : boolean = false): void {\n        const isMaxAllowedValuesReached = this.isMaxAllowedValuesReached();\n\n        if (isMaxAllowedValuesReached) {\n            return;\n        }\n\n        const callBack = () => {\n            data.forEach((optionData) => {\n                const tokenOption = new TokenOption(optionData, dataMapping, this.getBeanInstanceByBeanName);\n                if (targetId !== undefined && targetId !== null && position !== 'none') {\n                    const allTokens = this.tokenOptions.getAllData();\n                    const targetIndex = allTokens.findIndex((token) => token.getID() === targetId);\n            \n                    if (targetIndex === -1) {\n                        this.tokenOptions.addData(tokenOption.getID(), tokenOption);\n                    } else {\n                        if(position === 'before') {\n                            this.tokenOptions.insertDataBeforeId(targetId, tokenOption.getID(), tokenOption);\n                        }else if(position === 'after') {\n                            this.tokenOptions.insertDataAfterId(targetId, tokenOption.getID(), tokenOption);\n                        }\n                    }\n                } else {\n                    this.tokenOptions.addData(tokenOption.getID(), tokenOption);\n                }\n        \n                const isValidData = this.tokenValueHandler.validateValue(tokenOption.getValue());\n                tokenOption.setValidationState(isValidData);\n            })\n            \n    \n            this.triggerHook(initiator)\n            this.dispatchEvent({\n                type : TOKEN_EVENT.MODEL_UPDATE,\n                initiator,\n                remove : false\n            })\n        }\n\n        const tokenAddParams  : TokenAddParams =  {\n            data     : data,\n            initiator: initiator === 'dropdown-ui' ? 'ui' : initiator\n        }\n\n        data.length > 0 && (firstLoad ? callBack() :this.hookManager.executeHook(HookEventsName.onBeforeTokenAdd, HookEventsName.onAfterTokenAdd, callBack, tokenAddParams))\n    }\n\n    private triggerHook(hookInitiator : TokenHookInitiator) : void {\n        const hookParams : ValueChangeHookParams = {\n            value : this.getSelectedTokenData(),\n            initiator : hookInitiator === 'dropdown-ui' ? 'ui' : hookInitiator\n        }\n        this.hookManager.executeOnHookWithoutCallback(HookEventsName.onChange, hookParams)\n    }\n\n\tpublic getTokenOption(id: string): ITokenOption | undefined {\n\t\treturn this.tokenOptions.getData(id);\n\t}\n\n\tpublic getAllTokenOptions(): ITokenOption[] {\n\t\treturn this.tokenOptions.getAllData();\n\t}\n\n    public removeTokenOptions(ids: string[], initiator : TokenHookInitiator = 'api'): void {\n        const tokenOptions : ITokenOption[] = [];\n        const filteredIDs = ids.filter((id) => {\n            const tokenOption = this.tokenOptions.getData(id);\n            tokenOption && tokenOptions.push(tokenOption);\n            return tokenOption ? tokenOption.isTokenRemovable() : false;\n        })\n\n        const callBack = () => {\n            this.dispatchEvent({\n                type : \"EVENT_TOKEN_REMOVE_BEFORE\",\n                ids\n            })\n            filteredIDs.forEach((id) => {\n                this.tokenOptions.removeData(id);\n            })\n    \n            this.triggerHook(initiator);\n            this.dispatchEvent({\n                type : TOKEN_EVENT.MODEL_UPDATE,\n                initiator,\n                remove: true,\n                values: filteredIDs\n            })\n        }\n        \n\n        const tokenRemoveParams : TokenRemoveParams = {\n            ids : filteredIDs,\n            option   : tokenOptions,\n            initiator: initiator === 'dropdown-ui' ? 'ui' : initiator\n        }\n\n        filteredIDs.length > 0 && (this.hookManager.executeHook(HookEventsName.onBeforeTokenRemove, HookEventsName.onAfterTokenRemove, callBack, tokenRemoveParams))\n    }\n\n    public clearAllTokens(initiator : TokenHookInitiator = 'api') : void {\n        this.removeTokenOptions(this.tokenOptions.getOrders(), initiator);\n    }\n\n    public getValidTokens(): ITokenData[] {\n        return this.tokenOptions.getAllData().filter((token) => token.isValidated())\n    }\n\n    public updateTokens(datas: ITokenData[] = [], initiator: TokenHookInitiator = 'api'): void {\n        const dataMapping = this.optionsHandler.getDataMapping() as ITokenDataMapping;\n        datas.forEach((data) => {\n            const id = data[dataMapping.id ?? 'id'];\n            this.updateTokenOption(id, data, initiator);\n        })\n    }\n\n    public updateTokenOption(id: string, data : ITokenData, initiator : TokenHookInitiator = 'api') : void {\n        const tokenOption = this.tokenOptions.getData(id);\n        if(tokenOption) {\n            const callBack = () => {\n                tokenOption.updateData(data);\n                const isValidData = this.tokenValueHandler.validateValue(tokenOption.getValue());\n                tokenOption.setValidationState(isValidData);\n            }\n\n            const tokenUpdateParams : TokenUpdateParams = {\n                id,\n                option   : tokenOption,\n                initiator: initiator,\n                data     : data\n            }\n\n            this.hookManager.executeHook(HookEventsName.onBeforeTokenUpdate, HookEventsName.onAfterTokenUpdate, callBack, tokenUpdateParams);\n        }\n    }\n\n    public getTotalToken() : number {\n        return this.tokenOptions.getAllData().length\n    }\n\n    public getNextTokenId(id : string) : string | null {\n        return this.tokenOptions.getNextId(id);\n    }\n\n    public getPreviousTokenId(id : string) : string | null {\n        return this.tokenOptions.getPreviousId(id);\n    }\n\n    public getFirstId() : string | null {\n        return this.tokenOptions.getFirstId();\n    }\n\n    public getLastId() : string | null {\n        return this.tokenOptions.getLastId();\n    }\n\n    public getSelectedTokenData(): ITokenData[] {\n        return this.tokenOptions.getAllData().map(token => token.getData())\n    }\n\n    public getSelectedTokenAsValue(): string {\n        return this.tokenOptions.getAllData().map(token => token.getValue()).join(',');\n    }\n\n    public isMaxAllowedValuesReached() : boolean {\n        const  allTokens          = this.tokenOptions.getAllData();\n        const  maxAllowedValues   = this.optionsHandler.getMaxAllowedValues();\n\n        return allTokens.length >= maxAllowedValues;\n    }\n\n\n    public getSelectedTokenIds(): string[] {\n        return this.tokenOptions.getAllData().map(token => token.getID());\n    }\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITokenNavigationHandler } from \"./token-navigation.types\";\nimport { AutoWired, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { ITokenDataStore } from \"./token-data-store.types\";\n\n@Bean(TOKEN_BEAN_NAME.TOKEN_NAVIGATION)\nexport class TokenNavigationHandler extends EventEmitter implements ITokenNavigationHandler {\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) private tokenDataStore !: ITokenDataStore;\n    private focusedId : string | null = null;\n    private lastFocusedId : string | null = null;\n\n    private selectedIds : string[] = [];\n\n    @PostConstruct()\n    init() {\n        this.addListener(this.eventHandler, \"EVENT_TOKEN_REMOVE_BEFORE\", (params) => {\n            const ids = params.ids as string[];\n            ids.forEach((id : string) => {\n                const selectedID = this.getFocusedToken();\n\n                if(selectedID === id) {\n                    this.navigateToToken(id, \"previous\" , true, false);\n                }\n            })\n\n            this.dispatchFocusEvent();\n        })\n    }\n\n    public navigateToNextToken(id : string, isTab : boolean) : void {\n        this.navigateToToken(id, 'next', isTab);\n    }\n\n    public navigateToPreviousToken(id : string, isTab : boolean) : void {\n        this.navigateToToken(id, 'previous', isTab);\n\n    }\n\n    private navigateToToken(id: string, direction: 'next' | 'previous', isTab: boolean, triggerEvent : boolean = true): void {\n        let focusedId = null;\n    \n        if (direction === 'next') {\n            focusedId = this.tokenDataStore.getNextTokenId(id);\n        } else {\n            const previousId = this.tokenDataStore.getPreviousTokenId(id);\n            focusedId = isTab ? previousId : (previousId ?? this.focusedId);\n        }\n\n        this.setFocusedToken(focusedId, triggerEvent);\n\n    }\n\n    public navigateToFirstToken() : void {\n        this.setFocusedToken(this.tokenDataStore.getFirstId());\n    }\n\n    public navigateToLastToken() : void {\n        this.setFocusedToken(this.tokenDataStore.getLastId());\n    }\n\n    public setFocusedToken(id : string | null, triggerEvent : boolean = true) : void {\n        this.lastFocusedId = this.focusedId;\n        this.focusedId = id;\n        this.deSelectAll();\n        triggerEvent && this.dispatchFocusEvent();   \n    }\n\n    public getFocusedToken() : string | null {\n        return this.focusedId;\n    }\n\n    public getLastFocusedToken() : string | null {\n        return this.lastFocusedId;\n    }\n\n    public isTokenFocused(id : string) : boolean {\n        return this.focusedId === id;\n    }\n\n    public clearFocus(): void {\n        this.focusedId = null;\n        this.deSelectAll();\n        this.dispatchFocusEvent();\n    }\n\n    private dispatchFocusEvent() : void {\n        this.dispatchEvent({\n            type : 'tokenFocused'\n        })\n    }\n\n    public selectAll() : void {\n        this.selectedIds = this.tokenDataStore.getAllTokenOptions().map((token) => token.getID());\n        this.dispatchEvent({\n            type : 'EVENT_TOKEN_SELECTED'\n        })\n    }\n\n    public deSelectAll() : void {\n        this.selectedIds = [];\n        this.dispatchEvent({\n            type : 'EVENT_TOKEN_SELECTED'\n        })\n    }\n\n    public isTokenSelected(id : string) : boolean {\n        return this.selectedIds.includes(id);\n    }\n\n    public getSelectedTokens() : string[] {\n        return this.selectedIds;\n    }\n\n\n\n}","import { IComponentMeta, UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { TokenUserComponentHandlerType } from \"./token-user-component-handler.types\";\nimport { TokenEditorParams, TokenRendererParams } from \"../core/token-item/token-item.types\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ITokenOptionHandler } from \"./token-option-handler.types\";\nimport { TokenContentType } from \"../../token-configuration.types\";\n\n\nexport const enum PropertyName {\n PREFIX_RENDERER = 'prefixRenderer',\n SUFFIX_RENDERER = 'suffixRenderer',\n TOKEN_RENDERER  = 'tokenRenderer',\n TOKEN_EDITOR    = 'tokenEditor',\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class TokenUserComponentHandler extends UserComponentHandler implements TokenUserComponentHandlerType {\n\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    public getTokenRendererDetails(tokenOptionHandler: ITokenOptionHandler, params: TokenRendererParams, defaultValue : TokenContentType): IComponentDetails | undefined {\n        return this.getComponentDetail(tokenOptionHandler, PropertyName.TOKEN_RENDERER, params, defaultValue);\n    }\n\n    public getTokenEditorDetails(tokenOptionHandler: ITokenOptionHandler, params: TokenEditorParams): IComponentDetails | undefined {\n        return this.getComponentDetail(tokenOptionHandler, PropertyName.TOKEN_EDITOR, params, PropertyName.TOKEN_EDITOR);\n    }\n\n    protected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n            let { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n            const looUpRegistry = (name: string) => {\n                const userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n                const item = userComponentRegistry.retrieve(name);\n                if (item) { \n                    jsComponent = !item.componentFrameWork ? item.component : undefined;\n                    frameworkComponent = item.componentFrameWork ? item.component : undefined; \n                }\n            };\n    \n            if (componentName != null) {\n                looUpRegistry(componentName);\n            }\n    \n            if ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n                looUpRegistry(defautName);\n            }\n    \n            if (!jsComponent && !frameworkComponent) {\n                return undefined;\n            }\n    \n            const componentFramework = jsComponent == null;\n            const componentClass = jsComponent ? jsComponent : frameworkComponent;\n    \n            const mergedParams = this.getMergeParams(item, propertyName, params);\n    \n            return {\n                componentFramework,\n                componentClass,\n                params : mergedParams,\n                propertyName,\n                newInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n            };\n        }\n        \n    \n        protected getComponentMeta( item: any, propertyName: PropertyName, params?: any, ): IComponentMeta {\n            let componentName: string | null = null;\n            let jsComponent: any = null;\n            let frameworkComponent: any = null;\n    \n            const assignComponentNameOrComponentClass = (component: any) => {\n                if (typeof component === 'string') {\n                    componentName = component;\n                } else if (component != null && component !== true) {\n                    const isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n                    if (isFrameworkComponent) {\n                        frameworkComponent = component;\n                    } else {\n                        jsComponent = component;\n                    }\n                }\n            };\n    \n            if(item) {\n                const definitionObject = item as any;\n    \n                const selectorFunction = this.getComponentSelector(definitionObject, propertyName);\n    \n                const selector = selectorFunction ? selectorFunction(params) : null;\n    \n                if(selector) {\n                    assignComponentNameOrComponentClass((selector).component);\n                }else {\n                    assignComponentNameOrComponentClass(this.getComponent(definitionObject, propertyName));\n                }\n            }\n    \n            return {\n                componentName,\n                frameworkComponent,\n                jsComponent,\n            };\n        }\n\n        private getComponentSelector(defintion : any, propertyName : PropertyName) : any {\n            switch(propertyName) {\n                case PropertyName.TOKEN_RENDERER:\n                    return defintion.getTokenRenderer && (defintion as ITokenOptionHandler)?.getTokenRenderer()\n                case PropertyName.TOKEN_EDITOR:\n                    return defintion.getTokenRenderer && (defintion as ITokenOptionHandler)?.getTokenRenderer()\n            }\n        }\n    \n        protected getComponent( _item: any, propertyName: PropertyName): any {\n            switch (propertyName) {\n            }\n        }\n        protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n            let instance: any;\n            const frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n            const componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n            if (!componentFrameWork) {\n                instance = new component();\n            } else { \n                const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n                instance = frameworkComponentWrapper.wrap(\n                    component,\n                    componentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n                    componentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n                );\n            }\n    \n            const initialise = this.initComponent(instance, params);\n            if (initialise == null) {\n                return Promise.resolve(instance);\n            }\n    \n            return initialise.then(() => instance);\n        }\n    \n        protected initComponent(instance: any, params: any): Promise<any> | any {\n            this.context.createBean(instance);\n            if (instance.init == null) {\n                return;\n            }\n            return instance.init(params);\n        }\n    \n        private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n            return {...params, ...this.getUserParams(item, propertyName, params)};\n        }\n    \n        private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n            switch(propertyName) {\n                case PropertyName.PREFIX_RENDERER:\n                    return this.getUserRendererParams(item, params);\n                default:\n                    return {};\n            }\n    \n        }\n    \n        private getUserRendererParams(item : any, params : any) : any {\n            const rendererParams = item.getUserRendererParams();\n    \n            let rendererParamsResult : any = {};\n    \n            if (typeof rendererParams == 'function') {\n                rendererParamsResult = rendererParams(params);\n            } else if (typeof rendererParams == 'object') {\n                rendererParamsResult = rendererParams;\n            }\n    \n            return rendererParamsResult;\n        }\n}","export class TokenCSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        TokenCSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return TokenCSSRegistry.nameSpaces;\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ClassNameGeneratorType } from \"./classname-generator.types\";\nimport { TokenCSSRegistry } from \"../Modules/CSSRegistry\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\n\n@Bean(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR)\nexport class TokenClassNameGenerator extends EventEmitter implements ClassNameGeneratorType {\n    getClassName( block?: string, element?: string | string[] | undefined, modifier?: string[] | { [key: string]: boolean } ): string {\n        const nameSpaces = TokenCSSRegistry.getNameSpaces();\n        const globalNameSpace: string[] = Array.isArray(nameSpaces) ? nameSpaces : [nameSpaces ?? \"dg\"];\n    \n        let className = globalNameSpace.join('-') + (block ? `-${block}` : \"\");\n    \n        if (element) {\n            const elements = Array.isArray(element) ? element : [element];\n            className += elements.map(el => `__${el}`).join('');\n        }\n    \n        if (modifier) {\n            if (Array.isArray(modifier)) {\n                className += modifier.map(mod => `--${mod}`).join('');\n            } else {\n                const modifierClasses = Object.entries(modifier)\n                    .filter(([_, isActive]) => isActive)\n                    .map(([key]) => `--${key}`);\n                className += modifierClasses.join('');\n            }\n        }\n    \n        return className;\n    }\n    \n}   ","import { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { TokenRendererParams } from \"../core/token-item/token-item.types\";\nimport { TokenRendererType } from \"../model/token-option-handler.types\";\nimport { ClassNameGeneratorType } from \"../model/classname-generator.types\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\n\nexport class TokenRenderer implements TokenRendererType<TokenRendererParams> {\n    private tokenElement: HTMLElement | null = null;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n    init(params: TokenRendererParams): void {\n        const outerContainer = document.createElement('div');\n        outerContainer.classList.add(this.getClassName('token-input'));\n    \n        const container = document.createElement('div');\n        container.className = this.getClassName('token-input', 'label');\n        container.textContent = params.value;\n    \n        const removeButton = document.createElement('button');\n        removeButton.className = this.getClassName('token-input', 'remove-icon');\n        removeButton.setAttribute('tabindex', '-1');\n    \n        // Create SVG element for the remove icon\n        const svgNS = \"http://www.w3.org/2000/svg\";\n        const svgElem = document.createElementNS(svgNS, \"svg\");\n        svgElem.setAttribute(\"width\", \"8\");\n        svgElem.setAttribute(\"height\", \"16\");\n        svgElem.setAttribute(\"viewBox\", \"0 0 20 20\");\n        svgElem.classList.add(this.getClassName('token-input', 'remove-svg'));\n    \n        const gElem = document.createElementNS(svgNS, \"g\");\n        gElem.setAttribute(\"id\", \"Layer_1-2\");\n        gElem.setAttribute(\"data-name\", \"Layer 1\");\n    \n        const path1 = document.createElementNS(svgNS, \"path\");\n        path1.setAttribute(\"d\", \"M1 20a1 1 0 0 1-.71-1.7l18-18.01A1 1 0 1 1 19.7 1.7L1.71 19.71c-.2.2-.45.29-.71.29Z\");\n    \n        const path2 = document.createElementNS(svgNS, \"path\");\n        path2.setAttribute(\"d\", \"M19 20c-.26 0-.51-.1-.71-.29l-18-18C-.1 1.32-.1.68.29.29s1.03-.39 1.42 0l18 18a1 1 0 0 1-.71 1.7Z\");\n    \n        gElem.appendChild(path1);\n        gElem.appendChild(path2);\n        svgElem.appendChild(gElem);\n        removeButton.appendChild(svgElem);\n    \n        outerContainer.appendChild(container);\n        outerContainer.appendChild(removeButton);\n    \n        params.registerRemoveElement(removeButton);\n        params.registerTooltip(container);\n    \n        this.tokenElement = outerContainer;\n    }\n    \n\n    private getClassName(block?: string, element?: string | string[], modifier?: string[] | { [key: string]: boolean; }) : string {\n        const classNameGenerator = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        return classNameGenerator.getClassName(block, element, modifier);\n    }\n\n    getElement(): HTMLElement {\n        return this.tokenElement!;\n    }\n\n    destroy(): void {\n        if (this.tokenElement) {\n            this.tokenElement.remove();\n            this.tokenElement = null;\n        }\n    }\n}\n\n","import { values } from \"@dg/corecomponent\";\nimport { IModule } from \"../../../core/modules.types\";\n// import { dependencyVersion, moduleName } from \"../version.js\";\ntype globalModuleMap = { [name: string]: IModule };\ntype instanceModulesMap = { [instanceID: string]: { [name: string]: IModule } };\n\nexport class ModuleRegistry {\n\n    private static globalModulesMap: globalModuleMap      = {};\n    private static instanceModulesMap: instanceModulesMap = {};\n\n    public static register(module: IModule): void {\n        ModuleRegistry.__register(module, undefined);\n    }\n\n    public static registerModules(modules: IModule[]): void {\n        ModuleRegistry.__registerModules(modules, undefined);\n    }\n\n    public static __registerModules(modules: IModule[], instanceID: string | undefined): void {\n        if (!modules) {\n            return;\n        }\n        modules.forEach(module => ModuleRegistry.__register(module, instanceID));\n    }\n\n    public static __unRegisterInstanceModules(instanceID: string): void {\n        delete ModuleRegistry.instanceModulesMap[instanceID];\n    }\n\n    public static __getRegisteredModules(instanceID: string): IModule[] {\n        return [...values(ModuleRegistry.globalModulesMap), ...values(ModuleRegistry.instanceModulesMap[instanceID] || {})];\n    }\n\n    public static __isRegistered(moduleName: string, instanceID: string): boolean {\n        return !!ModuleRegistry.globalModulesMap[moduleName] || !!ModuleRegistry.instanceModulesMap[instanceID]?.[moduleName];\n    }\n\n    public static __getInstanceRegisteredModules(instanceID: string): IModule[] {\n        return values(ModuleRegistry.instanceModulesMap[instanceID] ?? {}) || [];\n    }\n\n    public static __assertRegistered(moduleName: string, reason: string, instanceID: string): boolean {\n        if (this.__isRegistered(moduleName, instanceID)) {\n            return true;\n        }\n\n        console.error(reason);\n\n        return false;\n    }\n\n    public static __register(module: IModule, instanceID: string | undefined): void {\n        // ModuleRegistry.runVersionChecks(module);\n\n        if (instanceID !== undefined) {\n            if (ModuleRegistry.instanceModulesMap[instanceID] === undefined) {\n                ModuleRegistry.instanceModulesMap[instanceID] = {};\n            }\n            ModuleRegistry.instanceModulesMap[instanceID][module.moduleName] = module;\n        } else {\n            ModuleRegistry.globalModulesMap[module.moduleName] = module;\n        }\n    }\n\n    // private static runVersionChecks(module: IModule) : void {\n    //     // if (!module.version) {\n    //     //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is incompatible. Please update all modules to the same version.`);\n    //     // } else if (!ModuleRegistry.isValidModuleVersion(module.version, dependencyVersion[module.moduleName])) {\n    //     //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is version ${module.version} but the other modules are version ${dependencyVersion[module.moduleName]}. Please update all modules to the same version.`);\n    //     // }\n    // }\n\n    // private static isValidModuleVersion(version : string, dependencyVersion : string) : boolean {\n    //     return isValidModuleVersion(version, dependencyVersion);\n    // }\n}\n\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenEditHandlerType } from \"./token-edit-handler.types\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { TokenEditorParams, TokenItemComponentWrapperType, TokenItemControllerType } from \"../core/token-item/token-item.types\";\nimport { TokenUserComponentHandlerType } from \"./token-user-component-handler.types\";\nimport { ITokenOption } from \"./token-option.types\";\nimport { ClassNameGeneratorType } from \"./classname-generator.types\";\nimport { ITokenDataStore } from \"./token-data-store.types\";\n\n@Bean(TOKEN_BEAN_NAME.TOKEN_EDIT_HANDLER)\nexport class TokenEditHandler extends EventEmitter implements TokenEditHandlerType {\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) private userComponentHandler !: TokenUserComponentHandlerType;\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) private classNameGenerator !: ClassNameGeneratorType;\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) private tokenDataStore !: ITokenDataStore;\n\n    startEditing(controller : TokenItemControllerType, key : string | null = null, startedEdit : boolean = false, event : KeyboardEvent | MouseEvent | null) : void{\n        const tokenItem       = controller.getTokenItem();\n        const isRemovable     = tokenItem.isTokenRemovable();\n        const isTokenEditable = this.optionsHandler.isTokenEditable();\n\n        if ( !isTokenEditable || !isRemovable ) {\n            return;\n        }\n\n        const editorParams     = this.createEditorParams(controller, key, startedEdit, event);\n        const componentDetails = this.userComponentHandler.getTokenEditorDetails(this.optionsHandler, editorParams);\n        const component        = controller.getComponent();\n\n        this.toggleEditClassName(component, true);\n        controller.setEditing(true);\n        component.setEditorDetails(componentDetails);\n    }\n\n    stopEditing(controller : TokenItemControllerType,cancel: boolean) : boolean {\n        if(!controller.isEditing()) {\n            return false;\n        }\n\n        const component = controller.getComponent();\n        const { newValue, newValueExists } = this.takeValueFromEditor(cancel, component);\n        const token = controller.getTokenItem()\n        const oldValue =  token.getValue();\n        if (newValueExists && !cancel) {\n            this.saveNewValue(controller, oldValue, newValue, token);\n            const cellEditor = component.getEditor();\n            cellEditor?.submit?.();\n        }\n\n        controller.setEditing(false);\n        component.setEditorDetails();\n        this.toggleEditClassName(component, false);\n\n        controller.refreshToken({ force: true });\n        controller.onTokenFocused();\n        return false\n    }\n\n    stopEditingAndFocus(controller : TokenItemControllerType, cancel: boolean) : boolean {\n        return this.stopEditing(controller, cancel);\n    }\n\n    private toggleEditClassName(component : TokenItemComponentWrapperType,force : boolean) : void {\n        const editClassName = this.classNameGenerator.getClassName('token', undefined, ['edit']);\n        component.addOrRemoveCssClass(editClassName, force);\n    }\n\n    private saveNewValue( controller: TokenItemControllerType, oldValue: any, newValue: any, token : ITokenOption ): boolean {\n        if (newValue === '' || newValue === oldValue) {\n            return false;\n        }\n\n        controller.setSuppressRefresh(true);\n        const {data , changed} = token.getUpdatedData(newValue);\n        this.tokenDataStore.updateTokenOption(token.getID(), data, 'ui');\n        controller.setSuppressRefresh(false);\n\n        return changed;\n    }\n\n    private takeValueFromEditor(cancel: boolean, tokenComp: TokenItemComponentWrapperType): { newValue?: any; newValueExists: boolean } {\n        const noValueResult = { newValueExists: false };\n\n        if (cancel) {\n            return noValueResult;\n        }\n\n        const cellEditor = tokenComp.getEditor();\n\n        if (!cellEditor) {\n            return noValueResult;\n        }\n\n        const userWantsToCancel = cellEditor.isCancelAfterEnd && cellEditor.isCancelAfterEnd();\n\n        if (userWantsToCancel) {\n            return noValueResult;\n        }\n\n        const newValue = cellEditor.getValue();\n\n        return {\n            newValue: newValue,\n            newValueExists: true,\n        };\n    }\n\n    private createEditorParams(controller : TokenItemControllerType, key : string | null = null, startedEdit = false, event : KeyboardEvent | MouseEvent | null) : TokenEditorParams {\n        const token = controller.getTokenItem();\n        const component = controller.getComponent();\n        return {\n            value: token.getValue(),\n            key,\n            event,\n            startedEdit,\n            item         : token,\n            parentElement: component.getElement(),\n            stopEditing  : this.stopEditingAndFocus.bind(this, controller),\n            separators : this.optionsHandler.getSeparators()\n        }\n    }\n}","import { TokenEditorParams } from \"../core/token-item/token-item.types\";\nimport { TokenEditorType } from \"../model/token-option-handler.types\";\n\nexport class TokenEditor implements TokenEditorType<TokenEditorParams> {\n    private inputElement : HTMLInputElement | null = null;\n    focus(): void {\n        this.inputElement && this.inputElement.focus();\n    }\n    getElement(): HTMLElement {\n        return this.inputElement!;\n    }\n    destroy?(): void {\n        this.inputElement?.remove();\n        this.inputElement = null;\n    }\n    init?(params: TokenEditorParams): void {\n        let value = params.value;\n        if(params.key !== null && params.key.length == 1) {\n            value = params.key\n        }\n        this.inputElement = document.createElement('input') as HTMLInputElement;\n        this.inputElement.classList.add('dg-token-input')\n        this.inputElement.value = value;\n        this.updateInputWidth();\n\n        this.inputElement.addEventListener('keydown', (ev) => {\n            if(params.separators.includes(ev.key)) {\n                ev.preventDefault();\n                params.stopEditing(false);\n            }\n            if (ev.key !== 'Enter' && ev.key !== 'Tab' && !(ev.key === 'Tab' && ev.shiftKey) && ev.key !== 'Escape') {\n                ev.stopPropagation();\n            }\n        })\n    }\n    afterElementAttached?(): void {\n        this.focus();\n    }\n\n    getValue() {\n        return this.inputElement?.value;\n    }\n\n    private updateInputWidth () {\n        if (!this.inputElement) return;\n    \n        const value = this.inputElement.value || ' '; \n        const computedStyle = window.getComputedStyle(this.inputElement);\n    \n        const span                     = document.createElement('span');\n              span.style.visibility    = 'hidden';\n              span.style.position      = 'absolute';\n              span.style.whiteSpace    = 'pre';\n              span.style.font          = computedStyle.font;\n              span.style.letterSpacing = computedStyle.letterSpacing;\n              span.style.fontSize      = computedStyle.fontSize;\n    \n        span.textContent = value;\n    \n        document.body.appendChild(span);\n    \n        const textWidth = span.offsetWidth;\n    \n        document.body.removeChild(span);\n    \n        const padding = 10;\n    \n        this.inputElement.style.width = `${textWidth + padding}px`;\n    };\n    \n}","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { IActionRegistry } from \"./action-registry.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nexport interface ShortcutParams {\n    event: KeyboardEvent;\n    [key: string]: any;\n}\n\ninterface ShortcutAction {\n    action: string | ((params: ShortcutParams) => void);\n}\n\n@Bean('keyBoardShortCutRegistry')\nexport class KeyboardShortcutRegistry extends EventEmitter {\n    private registry: Map<string, ShortcutAction>;\n    @AutoWired('actionRegistry') private actionRegistry !: IActionRegistry<ShortcutParams>;\n\n    constructor() {\n        super();\n        this.registry = new Map();\n    }\n\n    /**\n     * Registers a new keyboard shortcut.\n     * @param keyCombo - The key combination for the shortcut (e.g., \"Ctrl+ArrowLeft\").\n     * @param action - The action to perform, either a string (action name) or a callback function.\n     */\n    registerShortcut(keyCombo: string, action: string | ((params: ShortcutParams) => void)): void {\n        this.registry.set(keyCombo.toUpperCase(), { action });\n    }\n\n    /**\n     * Unregisters a keyboard shortcut.\n     * @param keyCombo - The key combination for the shortcut to be removed.\n     */\n    unregisterShortcut(keyCombo: string): void {\n        this.registry.delete(keyCombo.toUpperCase());\n    }\n\n    /**\n     * Executes the action associated with a keyboard shortcut.\n     * @param keyCombo - The key combination for the shortcut to execute.\n     * @param params - Parameters to pass to the action callback, typically including the event.\n     */\n    executeShortcut(keyCombo: string, params: ShortcutParams): boolean {\n        const shortcutAction = this.registry.get(keyCombo.toUpperCase());\n        if (shortcutAction) {\n            const { action } = shortcutAction;\n            if (typeof action === 'string') {\n                this.actionRegistry.executeAction(action, params);\n                return true;\n            } else if (typeof action === 'function') {\n                action(params);\n                return true;\n            }\n        }\n        return false;\n    }\n}","import { Bean } from '@dg/corecomponent';\nimport { IActionRegistry } from './action-registry.types';\nimport { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\n\n@Bean('actionRegistry')\nexport class ActionRegistry<T = any> extends EventEmitter implements IActionRegistry<T> {\n  private actions: Record<string, (params : T) => void> = {};\n\n  /**\n   * Registers a new action.\n   * @param actionName - The name of the action.\n   * @param actionCallback - The function to execute for this action.\n   */\n  registerAction(actionName: string, actionCallback: (params : T) => void): void {\n    if (typeof actionCallback !== 'function') {\n      throw new Error('Action callback must be a function.');\n    }\n    this.actions[actionName] = actionCallback;\n  }\n\n  /**\n   * Unregisters an existing action.\n   * @param actionName - The name of the action to unregister.\n   */\n  unregisterAction(actionName: string): void {\n    if (this.actions[actionName]) {\n      delete this.actions[actionName];\n    } else {\n      console.warn(`Action ${actionName} not found.`);\n    }\n  }\n\n  /**\n   * Retrieves an action by its name.\n   * @param actionName - The name of the action to retrieve.\n   * @returns The action function, or undefined if not found.\n   */\n  getAction(actionName: string): ((params : T) => void) | undefined {\n    return this.actions[actionName];\n  }\n\n  /**\n   * Executes an action by its name.\n   * @param actionName - The name of the action to execute.\n   */\n  executeAction(actionName: string, params : T): void {\n    const action = this.getAction(actionName);\n    if (action) {\n      action(params);\n    } else {\n      console.error(`Action ${actionName} not found.`);\n    }\n  }\n}","import { ITokenOptionHandler } from \"../model/token-option-handler.types\";\n\nexport function _setDomChildOrder(eContainer: HTMLElement, orderedChildren: (HTMLElement | null)[]): void {\n    for (let i = 0; i < orderedChildren.length; i++) {\n        const correctDomAtIndex = orderedChildren[i];\n        const actualDomAtIndex  = eContainer.children[i];\n\n        if (actualDomAtIndex !== correctDomAtIndex) {\n            eContainer.insertBefore(correctDomAtIndex!, actualDomAtIndex);\n        }\n    }\n}\n\nexport function getControllerFromTargetElement<T>(optionHandler: ITokenOptionHandler, targetElement: EventTarget | null, type: string): T | null {\n    let sourceElement = targetElement as HTMLElement;\n\n    while (sourceElement) {\n        const component = optionHandler.getDomData(sourceElement, type);\n\n        if (component) {\n            return component as T;\n        }\n\n        sourceElement = sourceElement.parentElement!;\n    }\n\n    return null;\n}\n\nexport function _isEventFromPrintableCharacter(event: KeyboardEvent): boolean {\n    if (event.altKey || event.ctrlKey || event.metaKey) {\n        return false;\n    }\n    const printableCharacter = event.key.length === 1;\n\n    return printableCharacter;\n}\n\nexport function isPrintableCharacter(purePrintableCharacter : string) : boolean {\n    const PRINTABLE_CHAR_REGEX = /^[\\x20-\\x7E]$/;\n    return PRINTABLE_CHAR_REGEX.test(purePrintableCharacter);\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITokenOption } from \"../../model/token-option.types\";\nimport { TokenItemComponentWrapperType, TokenItemControllerType, TokenRendererParams } from \"./token-item.types\";\nimport { BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { TokenUserComponentHandlerType } from \"../../model/token-user-component-handler.types\";\nimport { TOKEN_OPTION_EVENT } from \"../../constants/event\";\nimport { ITokenOptionHandler } from \"../../model/token-option-handler.types\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ITokenDataStore } from \"../../model/token-data-store.types\";\nimport { TokenEditHandlerType } from \"../../model/token-edit-handler.types\";\nimport { isPrintableCharacter } from \"../../utilities/dom\";\nimport { ITokenNavigationHandler } from \"../../model/token-navigation.types\";\nimport { TokenClassNameGenerator } from \"../../model/classname-generator\";\nimport type { Tooltip } from \"../../../../Tooltip/src/Tooltip\";\nimport { TokenTooltipHandlerType } from \"../../model/token-tooltip-handler.types\";\n\nlet instanceIdSequence = 0;\n\nexport class TokenItemController extends EventEmitter implements TokenItemControllerType {\n\tstatic DOM_KEY_TOKEN_CTRL = 'tokenController';\n\n    private tokenItem!                  : ITokenOption;\n    private component!                  : TokenItemComponentWrapperType;\n    private getBeanInstanceByBeanName ! : getBeanInstanceByBeanName;\n    private instanceId                  : string;\n    private editing                    !: boolean;\n    private suppressRefreshToken        !: boolean;\n\n    private value : any;\n\n    private tokenTooltip : Tooltip | null = null;\n\n    constructor(tokenItem : ITokenOption, getBeanInstanceByBeanName : getBeanInstanceByBeanName) {\n        super();\n        this.tokenItem                 = tokenItem;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n        this.instanceId                = this.generateID(tokenItem);\n    }\n\n    private generateID(tokenItem: ITokenOption): string {\n\t\treturn `${tokenItem.getID()} - ${instanceIdSequence++}`;\n\t}\n\n    setComponent(component: TokenItemComponentWrapperType): void {\n        this.component = component;\n        this.refreshToken();\n        this.attachListener();\n        this.addDomData();\n        this.setTabIndex();\n        this.onTokenFocused();\n        this.addValidationClassName();\n        this.addRemovableClassName();\n        this.addDisabledClassName();\n        this.addColorProperty();\n        this.addEditableClassName();\n    }\n\n    setSuppressRefresh(suppress: boolean): void {\n        this.suppressRefreshToken = suppress;\n    }\n\n    isSuppressRefresh(): boolean {\n        return this.suppressRefreshToken;\n    }\n\n    refreshToken(params ?: { force?: boolean; newData?: boolean; }): void {\n        if (this.suppressRefreshToken || this.editing) {\n            return;\n        }\n\n        const newData = params != null && !!params.newData;\n\n        const forceRefresh = (params && params.force) || newData;\n\n        const valuesDifferent = this.updateAndFormatValue(true);\n        const dataNeedsUpdating = forceRefresh || valuesDifferent;\n\n        if(dataNeedsUpdating) {\n            this.updateValue();\n        }\n    }\n\n    public getInstanceId(): string {\n        return this.instanceId;\n    }\n\n    public destroy(): void {\n        super.destroy();\n    }\n    public afterGuiAttached(): void {\n        this.onTokenFocused();\n    }\n\n    public setEditing(editing: boolean): void {\n        if (this.editing === editing) {\n            return;\n        }\n\n        this.editing = editing;\n    }\n\n    public isEditing() : boolean {\n        return this.editing;\n    }\n\n    public getComponent(): TokenItemComponentWrapperType {\n        return this.component;\n    }\n\n    public getTokenItem(): ITokenOption {\n        return this.tokenItem;\n    }\n\n    public updateAndFormatValue(compareValues: boolean): boolean {\n        const oldValue = this.value;\n\n        this.value = this.tokenItem.getValue();\n\n        if (compareValues) {\n            return !(oldValue === this.value);\n        }\n        return true;\n    }\n\n    public processPrintableCharacter(event : KeyboardEvent) : void {\n\t\tconst eventTarget = event.target;\n\t\tconst isSameEventTarget = eventTarget === this.component.getElement();\n\n\t\tif(!isSameEventTarget || this.isEditing()) {\n\t\t\treturn;\n\t\t}  \n\n\t\tconst key             = event.key;\n\t\tconst isPrintableChar = isPrintableCharacter(key)\n\n        const editHandler = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_EDIT_HANDLER) as TokenEditHandlerType;\n\t\tif(isPrintableChar) {\n\t\t\teditHandler.startEditing(this, key, true, event);\n\t\t\tevent.preventDefault();\n\t\t}\n\t\telse {\n\t\t\teditHandler.stopEditing(this, false);\n\t\t}\n\t}\n\n    public onMouseEvent(eventName: string, event: MouseEvent): void {\n        const isDisabled    = this.tokenItem.isDisabled();\n\n        if(isDisabled) {\n            return;\n        }\n\t\tswitch (eventName) {\n\t\t\tcase 'mousedown':\n\t\t\tcase 'touchstart':\n\t\t\t\tthis.onMouseDown(event);\n\t\t\t\tbreak;\n\t\t\tcase 'dblclick':\n\t\t\t\tthis.onDoubleClick(event);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n    public onTokenFocused() : void {\n        const tokenNavigation = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) as ITokenNavigationHandler;\n        const classNameGenerator = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as TokenClassNameGenerator;\n        const isTokenFocused = tokenNavigation.isTokenFocused(this.tokenItem.getID());\n        const isTokenSelected = tokenNavigation.isTokenSelected(this.tokenItem.getID());\n\n        if(!isTokenFocused && this.isEditing()) {\n\t\t\tthis.stopEditing(false);\n\t\t}\n\n        if(isTokenFocused) {\n            const element = this.component.getElement();\n            element.focus();\n        }\n        const focusedClassName = classNameGenerator.getClassName('token', undefined, ['selected'] )\n        this.component.addOrRemoveCssClass(focusedClassName, (isTokenFocused || isTokenSelected));\n    }\n\n    private onMouseDown(_event: MouseEvent): void {\n        const tokenNavigation = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) as ITokenNavigationHandler;\n        const focusedID = tokenNavigation.getFocusedToken();\n        if(focusedID !== this.tokenItem.getID()) {\n            tokenNavigation.setFocusedToken(this.tokenItem.getID());\n        }\n    }\n\n    private onDoubleClick(event: MouseEvent): void {\n        const tokenEditHandler = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_EDIT_HANDLER) as TokenEditHandlerType;\n        tokenEditHandler.startEditing(this, null, false, event);\n    }\n\n    stopEditing(cancel: boolean): void {\n        const tokenEditHandler = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_EDIT_HANDLER) as TokenEditHandlerType;\n        tokenEditHandler.stopEditing(this, cancel);\n    }\n    private setTabIndex() : void {\n        const element = this.component.getElement();\n        element.setAttribute('tabindex', '-1');\n    }\n\n    private addDomData() : void {\n        const element       = this.component.getElement()\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n\n        optionHandler.setDomData( element, TokenItemController.DOM_KEY_TOKEN_CTRL, this);\n\t\tthis.addDestroyFunc(() => optionHandler.setDomData( element, TokenItemController.DOM_KEY_TOKEN_CTRL, null) );\n    }\n\n    private attachListener() : void {\n        const eventHandler = this.getBeanInstanceByBeanName(BEAN_NAME.EVENT_HANDLER) as EventHandler;\n        this.addListener(eventHandler, TOKEN_OPTION_EVENT.DATA_UPDATE, this.updateValue.bind(this));\n        this.addListener(this.tokenItem, 'EVENT_VALIDATION_UPDATED', this.addValidationClassName.bind(this));\n        this.addListener(eventHandler, 'EVENT_TOKEN_SELECTED', this.onTokenFocused.bind(this));\n    }\n\n    private updateValue() : void {\n        const params               = this.createTokenRendererParams();\n        const userComponentHandler = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_HANDLER) as TokenUserComponentHandlerType;\n        const optionHandler        = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        const componentDetails     = userComponentHandler.getTokenRendererDetails(optionHandler, params, this.tokenItem.getTokenContentType());\n        this.component.setRendererDetails(componentDetails);\n    }\n\n    private registerRemoveElement(element: HTMLElement): void {\n        element.addEventListener('click', (event : MouseEvent) => {\n            event.preventDefault();\n            event.stopPropagation();\n\n            const isDisabled    = this.tokenItem.isDisabled();\n\n            if(isDisabled) {\n                return;\n            }\n            const tokenDataStore = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) as ITokenDataStore;\n            tokenDataStore.removeTokenOptions([this.tokenItem.getID()], 'ui');\n        });\n    }\n\n    private createTokenRendererParams() : TokenRendererParams {\n        const tokenNavigation = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) as ITokenNavigationHandler;\n        const self = this;\n        return{\n            value                : this.tokenItem.getValue(),\n            item                 : this.tokenItem,\n            itemId               : this.tokenItem.getID(),\n            registerRemoveElement: this.registerRemoveElement.bind(this),\n            registerTooltip      : this.registerTooltip.bind(this),\n            get isValid() {\n                return self.tokenItem.isValidated();\n            },\n            get selected() {\n                return tokenNavigation.isTokenFocused(self.tokenItem.getID());\n            }\n        }\n    }\n\n    public disableTooltip() : void {\n        if (!this.tokenTooltip) { return; }\n\n        this.tokenTooltip.api.destroy();\n        this.tokenTooltip = null;\n    }\n\n    public enableTooltip(element ?: HTMLElement, value ?: string) : void {\n        const tokenTooltipHandler = this.getBeanInstanceByBeanName('tokenTooltipHandler') as TokenTooltipHandlerType\n        const tooltipElement = element !== null ? element : this.component.getElement();\n        this.tokenTooltip = tokenTooltipHandler.registerTooltip(this.tokenItem, tooltipElement!, value!);\n    }\n\n    public registerTooltip(element ?: HTMLElement, value ?: string) : void {\n        this.disableTooltip();\n        this.enableTooltip(element, value);\n        this.addDestroyFunc(() => this.disableTooltip());\n    }\n\n    public addValidationClassName() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as TokenClassNameGenerator;\n        const isValidated         = this.tokenItem.isValidated();\n        const validationClassName = classNameGenerator.getClassName('token', 'element', ['error'])\n        this.component.addOrRemoveCssClass(validationClassName, !isValidated);\n    }\n\n    public addRemovableClassName() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as TokenClassNameGenerator;\n        const isTokenRemovable    = this.tokenItem.isTokenRemovable();\n        const validationClassName = classNameGenerator.getClassName('token', 'element', ['readonly'])\n        this.component.addOrRemoveCssClass(validationClassName, !isTokenRemovable);\n    }\n\n    public addDisabledClassName() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as TokenClassNameGenerator;\n        const isToeknDisabled     = this.tokenItem.isDisabled();\n        const validationClassName = classNameGenerator.getClassName('token', 'element', ['disabled'])\n        this.component.addOrRemoveCssClass(validationClassName, isToeknDisabled);\n    }\n\n    public addEditableClassName() : void {\n        const classNameGenerator = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as TokenClassNameGenerator;\n        const isTokenEditable    = this.tokenItem.isEditable();\n        const isTokenRemovable   = this.tokenItem.isTokenRemovable();\n        const editClassName      = classNameGenerator.getClassName('token', 'element', ['editable'])\n        const nonEditClassName   = classNameGenerator.getClassName('token', 'element', ['not-editable'])\n\n        if (isTokenEditable && isTokenRemovable) {\n            this.component.addOrRemoveCssClass(editClassName, true);\n            this.component.addOrRemoveCssClass(nonEditClassName, false);\n        } else {\n            this.component.addOrRemoveCssClass(editClassName, false);\n            this.component.addOrRemoveCssClass(nonEditClassName, true);\n        }\n    }\n\n    public addColorProperty() : void {\n        const element = this.component.getElement();\n        const color = this.tokenItem.getColor();\n        color && element && element.style.setProperty('--ZG-token-color', color);\n    }\n}","import { AutoWired, Bean, PostConstruct } from '@dg/corecomponent';\nimport { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\nimport { IActionRegistry } from './action-registry.types';\nimport { ShortcutParams } from './key-board-shortcut-registry';\nimport { getControllerFromTargetElement } from '../utilities/dom';\nimport { TokenItemControllerType } from '../core/token-item/token-item.types';\nimport { TokenItemController } from '../core/token-item/token-item-controller';\nimport { TOKEN_BEAN_NAME } from '../constants/beanname-constant';\nimport { ITokenNavigationHandler } from './token-navigation.types';\nimport { TokenInputControllerType } from '../core/token-input/token-input.types';\nimport { ITokenDataStore } from './token-data-store.types';\nimport { TokenEditHandlerType } from './token-edit-handler.types';\n\n@Bean('TokenKeyBoardNavigation')\nexport class TokenKeyBoardNavigation extends EventEmitter {\n\t@AutoWired('actionRegistry') private actionRegistry!: IActionRegistry<any>;\n\t@AutoWired(TOKEN_BEAN_NAME.TOKEN_NAVIGATION)\n\tprivate tokenNavigation!: ITokenNavigationHandler;\n\t@AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE)\n\tprivate tokenDataStore!: ITokenDataStore;\n\t@AutoWired(TOKEN_BEAN_NAME.TOKEN_EDIT_HANDLER)\n\tprivate tokenEditHandler!: TokenEditHandlerType;\n\t@PostConstruct()\n\tinit() {\n\t\tthis.registerAction();\n\t}\n\n\tprivate registerAction(): void {\n\t\tthis.actionRegistry.registerAction(\n\t\t\t'navigateToLeft',\n\t\t\tthis.navigateToLeft.bind(this)\n\t\t);\n\t\tthis.actionRegistry.registerAction(\n\t\t\t'navigateToRight',\n\t\t\tthis.navigateToRight.bind(this)\n\t\t);\n\t\tthis.actionRegistry.registerAction(\n\t\t\t'navigateNextToFocus',\n\t\t\tthis.navigateNextToFocus.bind(this)\n\t\t);\n\t\tthis.actionRegistry.registerAction(\n\t\t\t'navigatePreviousToFocus',\n\t\t\tthis.navigatePreviousToFocus.bind(this)\n\t\t);\n\t\tthis.actionRegistry.registerAction(\n\t\t\t'dataClearOnBackspace',\n\t\t\tthis.dataClearOnBackspace.bind(this)\n\t\t);\n\t\tthis.actionRegistry.registerAction(\n\t\t\t'openEditor',\n\t\t\tthis.openEditor.bind(this)\n\t\t);\n\n\t\tthis.actionRegistry.registerAction('selectALL', this.selectALL.bind(this));\n\t\tthis.actionRegistry.registerAction('stopEditing', this.stopEditing.bind(this));\n\t}\n\n\tprivate selectALL({event } : ShortcutParams) : void {\n\t\tthis.tokenNavigation.selectAll();\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n\n\tprivate dataClearOnBackspace({ event }: ShortcutParams): void {\n\t\tconst inputController = this.getTokenInputControllersFromTargetElement( event.target );\n\n\t\tconst selectedTokens = this.tokenNavigation.getSelectedTokens();\n\n\t\tif(selectedTokens.length > 0) {\n\t\t\tthis.tokenDataStore.removeTokenOptions(selectedTokens, 'ui');\n\t\t\treturn;\n\t\t}\n\n\t\tif (inputController) {\n\t\t\tconst lastId = this.tokenDataStore.getLastId();\n\t\t\tlastId && this.tokenDataStore.removeTokenOptions([lastId], 'ui');\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif (controller && controller.isEditing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (controller) {\n\t\t\tconst tokenItem = controller.getTokenItem();\n\t\t\tconst tokenId = tokenItem.getID();\n\t\t\tthis.tokenDataStore.removeTokenOptions([tokenId], 'ui');\n\t\t}\n\t}\n\n\tprivate openEditor({ event }: ShortcutParams): void {\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\t\tif (controller.isEditing()) {\n\t\t\tthis.tokenEditHandler.stopEditing(controller, false);\n\t\t} else {\n\t\t\tif (controller) {\n\t\t\t\tthis.tokenEditHandler.startEditing( controller, event.key, true, event, );\n\t\t\t\tif (controller.isEditing()) {\n\t\t\t\t\tconst shouldStopPropagation = this.optionsHandler.shouldStopPropagation(event);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif(shouldStopPropagation) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate navigateToLeft({ event }: ShortcutParams): void {\n\t\tconst inputController = this.getTokenInputControllersFromTargetElement( event.target );\n\t\tif (this.tokenNavigation && inputController) {\n\t\t\tconst id = this.tokenDataStore.getLastId();\n\t\t\tif (id) this.tokenNavigation.setFocusedToken(id);\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif (controller && controller.isEditing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.tokenNavigation && controller) {\n\t\t\tconst tokenItem = controller.getTokenItem();\n\t\t\tconst id = tokenItem.getID();\n\t\t\tthis.tokenNavigation.navigateToPreviousToken(id, false);\n\t\t}\n\t\tconst shouldStopPropagation = this.optionsHandler.shouldStopPropagation(event);\n\t\tif(shouldStopPropagation) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tevent.preventDefault();\n\t}\n\n\tprivate navigateToRight({ event }: ShortcutParams): void {\n\t\tconst inputController = this.getTokenInputControllersFromTargetElement( event.target);\n\t\tif (this.tokenNavigation && inputController) {\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif (controller && controller.isEditing()) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.tokenNavigation && controller) {\n\t\t\tconst tokenItem = controller.getTokenItem();\n\t\t\tconst id = tokenItem.getID();\n\t\t\tthis.tokenNavigation.navigateToNextToken(id, false);\n\t\t}\n\t\tconst shouldStopPropagation = this.optionsHandler.shouldStopPropagation(event);\n\t\tif(shouldStopPropagation) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tevent.preventDefault();\n\t}\n\n\tprivate navigateNextToFocus({ event }: ShortcutParams): void {\n\t\tconst inputController = this.getTokenInputControllersFromTargetElement( event.target );\n\t\tif (this.tokenNavigation && inputController) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif (controller && controller.isEditing()) {\n\t\t\tcontroller.stopEditing(false);\n\t\t}\n\n\t\tif (this.tokenNavigation && controller) {\n\t\t\tconst tokenItem = controller.getTokenItem();\n\t\t\tconst id = tokenItem.getID();\n\t\t\tthis.tokenNavigation.navigateToNextToken(id, false);\n\t\t}\n\t\tconst shouldStopPropagation = this.optionsHandler.shouldStopPropagation(event);\n\t\tif(shouldStopPropagation) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tevent.preventDefault();\n\t}\n\n\tprivate navigatePreviousToFocus({ event }: ShortcutParams): void {\n\t\tconst inputController = this.getTokenInputControllersFromTargetElement( event.target );\n\t\tconst shouldStopPropagation = this.optionsHandler.shouldStopPropagation(event);\n\n\t\tif (this.tokenNavigation && inputController) {\n\t\t\tconst id = this.tokenDataStore.getLastId();\n\t\t\tif (!id) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.tokenNavigation.setFocusedToken(id);\n\t\t\tevent.preventDefault();\n\t\t\tif(shouldStopPropagation) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif (controller && controller.isEditing()) {\n\t\t\tcontroller.stopEditing(false);\n\t\t}\n\n\t\tif (this.tokenNavigation && controller) {\n\t\t\tconst tokenItem = controller.getTokenItem();\n\t\t\tconst id = tokenItem.getID();\n\t\t\tthis.tokenNavigation.navigateToPreviousToken(id, true);\n\n\t\t\tconst firstID = this.tokenDataStore.getFirstId();\n\n\t\t\tif (id !== firstID) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif(shouldStopPropagation) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\n\tprivate stopEditing({event} : ShortcutParams) : void {\n\t\tconst controller = this.getControllersFromTargetElement(event.target);\n\t\tif(controller && controller.isEditing()) {\n\t\t\tcontroller.stopEditing(true);\n\t\t}\n\t}\n\n\tprivate getControllersFromTargetElement( targetElement: EventTarget | null, ): TokenItemControllerType {\n\t\treturn getControllerFromTargetElement<TokenItemControllerType>( this.optionsHandler, targetElement, TokenItemController.DOM_KEY_TOKEN_CTRL, ) as TokenItemControllerType;\n\t}\n\n\tprivate getTokenInputControllersFromTargetElement( targetElement: EventTarget | null, ): TokenInputControllerType {\n\t\treturn getControllerFromTargetElement<TokenInputControllerType>( this.optionsHandler, targetElement, 'tokenInputController' ) as TokenInputControllerType;\n\t}\n}\n","export interface IKeyBoardShortcutsParams {\n\tshortcut: string;\n\taction: string | ((params: any) => void);\n}\n\nexport const KeyboardShortcuts: IKeyBoardShortcutsParams[] = [\n\t{ shortcut: 'arrowleft', action: 'navigateToLeft' },\n\t{ shortcut: 'arrowright', action: 'navigateToRight' },\n\t{ shortcut: 'tab', action: 'navigateNextToFocus' },\n\t{ shortcut: 'shift+tab', action: 'navigatePreviousToFocus' },\n\t{ shortcut: 'backspace', action: 'dataClearOnBackspace' },\n\t{ shortcut: 'delete', action: 'dataClearOnBackspace' },\n\t{ shortcut: 'enter', action: 'openEditor' },\n\t{ shortcut: 'ctrl+a', action: 'selectALL' },\n\t{ shortcut: 'ESCAPE', action: 'stopEditing' },\n];\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenValueHandlerType } from \"./token-value-handler.types\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { ITokenData } from \"../../token-configuration.types\";\nimport { ITokenOptionHandler } from \"./token-option-handler.types\";\nimport { DefaultDataMapping } from \"../constants/data-mapping\";\n\n@Bean('TokenValueHandler')\nexport class TokenValueHandler extends EventEmitter implements TokenValueHandlerType {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ITokenOptionHandler;\n    getDataByValue(value : string) : ITokenData {\n        const getDataByValueCallback = this.optionHandler.getDataByValue();\n        const dataMapping            = this.optionHandler.getDataMapping();\n        const defaultColor           = this.optionHandler.getDefaultColor();\n        const defaultImageURL        = this.optionHandler.getDefaultImageURL();\n        const valueKey               = (dataMapping.value ?? DefaultDataMapping.value) as string;\n        const imageURLKey            = (dataMapping.imageURL ?? DefaultDataMapping.imageURL) as string;\n        const colorKey               = (dataMapping.color ?? DefaultDataMapping.color) as string;\n\n        if(getDataByValueCallback) {\n            return getDataByValueCallback(value);\n        }\n\n       \n        return {\n            [valueKey]   : value,\n            [imageURLKey]: defaultImageURL,\n            [colorKey]   : defaultColor\n        };\n    }\n\n    validateValue(value : string) : boolean {\n        const pattern = this.optionHandler.getPattern();\n        return pattern ? pattern.test(value): true;\n    }\n}","export const TokenComponentName = {\n    TOKEN_INPUT_COMPONENT : 'TOKENINPUTCOMPONENT'\n}","import { AutoWired, PostConstruct, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenItemController } from \"../token-item/token-item-controller\";\nimport { TokenItemControllerType } from \"../token-item/token-item.types\";\nimport {_isEventFromPrintableCharacter, getControllerFromTargetElement} from \"../../utilities/dom\"\nimport { TokenInnerControllerType } from \"./token-inner.types\";\nimport { KeyboardShortcutRegistry } from \"../../model/key-board-shortcut-registry\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ITokenNavigationHandler } from \"../../model/token-navigation.types\";\nimport { KeyEventHandler } from \"../../utilities/KeyEventHandler\";\nimport { HookManagerType } from \"../../model/hook-manager.types\";\nimport { HookEventsName } from \"../../constants/HookEventNames\";\nimport { ITokenOptionHandler } from \"../../model/token-option-handler.types\";\n\nexport class TokenContainerEventHandler extends EventEmitter {\n    private element: HTMLElement;\n    private controller : TokenInnerControllerType;\n\n    @AutoWired('keyBoardShortCutRegistry') private keyBoardShortCutRegistry !: KeyboardShortcutRegistry;\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) private tokenNavigation !: ITokenNavigationHandler;\n    @AutoWired(TOKEN_BEAN_NAME.HOOK_MANAGER) private hookManager !: HookManagerType;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: ITokenOptionHandler;\n    \n\tconstructor(element: HTMLElement, controller : TokenInnerControllerType) {\n\t\tsuper();\n\t\tthis.element = element;\n        this.controller = controller;\n\t} \n\n    @PostConstruct()\n\tinit() : void {\n        this.addKeyBoardListener();\n        this.addMouseListener();\n        this.addFocusListener();\n    }\n\n    private addFocusListener() : void {\n        this.addListener(this.element, 'focusin', (event : FocusEvent) => {\n           const elementWithFocus = event.relatedTarget as HTMLElement;\n            if(!elementWithFocus || !this.isElementWithinCustomPopup(elementWithFocus)) {\n                this.hookManager.executeOnHookWithoutCallback(HookEventsName.onFocus, {event});\n            }\n        })\n\n        this.addListener(this.element, 'focusout', (event) => {\n            const elementWithFocus = event.relatedTarget as HTMLElement;\n\n            const closeCallback = () => {\n                this.hookManager.executeOnHookWithoutCallback(HookEventsName.onBlur, {event});\n            };\n\n            if (!this.isElementWithinCustomPopup(elementWithFocus)) {\n                closeCallback();\n            }\n        })\n    }\n    private isElementWithinCustomPopup(element: HTMLElement): boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            if (pointer.classList.contains('ZG-popup-dropdown')) {\n                return true;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n    private getControllersFromTargetElement(targetElement : EventTarget | null ) : TokenItemControllerType {\n        return getControllerFromTargetElement<TokenItemController>(this.optionsHandler,targetElement, TokenItemController.DOM_KEY_TOKEN_CTRL) as TokenItemControllerType\n    }\n\n    private addMouseListener() : void {\n        const eventNames = ['mousedown','dblclick', 'touchend', 'touchstart'];\n        eventNames.forEach(eventName => {\n            const listener = this.processMouseEvent.bind(this, eventName);\n            this.addListener(this.element, eventName, listener);\n        });\n    }\n\n    private addKeyBoardListener() : void {\n        const keyEventManager = new KeyEventHandler(this.element)\n        keyEventManager.addListener({\n            keyCombo : 'any' as any,\n            callback : (params : any) => {\n                const {event} = params;\n                const keyCombo = params.activeKeys.join('+');\n                const isActionExecuted = this.keyBoardShortCutRegistry.executeShortcut(keyCombo, {\n                    event\n                })\n\n\n                if(!isActionExecuted) {\n                    if(_isEventFromPrintableCharacter(event)) {\n                        const controller = this.getControllersFromTargetElement(event.target)\n                        controller && controller.processPrintableCharacter(event);\n                    }\n\t\t\t\t\tconst shouldStopPropagation = this.optionsHandler.shouldStopPropagation(event);\n                    if(shouldStopPropagation) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n                }\n\n                this.optionsHandler.onKeydown(event);\n\n            },\n            repeat : true\n        })\n    }  \n\n    private processMouseEvent(eventName : string , event : MouseEvent) : void {\n        const controller = this.getControllersFromTargetElement(event.target);\n\n        if(controller) {\n            controller.onMouseEvent(eventName, event);\n        }else {\n            event.preventDefault();\n            this.controller.stopEditing();\n            this.tokenNavigation.clearFocus();\n        }\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenInnerComponentType, TokenInnerControllerType } from \"./token-inner.types\";\nimport { TOKEN_EVENT } from \"../../constants/event\";\nimport { GenericDataStore } from \"../../model/generic-data-store\";\nimport { TokenItemControllerType } from \"../token-item/token-item.types\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ITokenDataStore } from \"../../model/token-data-store.types\";\nimport { TokenItemController } from \"../token-item/token-item-controller\";\nimport { IGenericDataStore } from \"../../model/generic-data-store.types\";\nimport { TokenInputComponentType } from \"../token-input/token-input.types\";\nimport { ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { TokenComponentName } from \"../../constants/component\";\nimport { TokenContainerEventHandler } from \"./token-container-event-handler\";\nimport { ClassNameGeneratorType } from \"../../model/classname-generator.types\";\n\nexport class TokenInnerController extends EventEmitter implements TokenInnerControllerType {\n    private component !: TokenInnerComponentType;\n    private controllers : IGenericDataStore<TokenItemControllerType> = new GenericDataStore<TokenItemControllerType>();\n\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) private tokenDataStore !: ITokenDataStore;\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) private tokenClassNameGenerator !: ClassNameGeneratorType;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    setComponent(component : TokenInnerComponentType) : void {\n        this.component = component;\n        this.attachListener();\n        this.createManagedBean(new TokenContainerEventHandler(this.component.getElement(), this));\n        this.setTabIndex();\n        this.addClassName();\n    }\n\n    private addClassName() : void {\n        const baseClassName = this.tokenClassNameGenerator.getClassName('selectbox', 'inner');\n        this.component.addOrRemoveCssClass(baseClassName, true);\n    }\n\n    public createInputComponent() : TokenInputComponentType | null {\n        const componentRegistry        = this.getBeanInstanceByBeanName(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const context                  = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n        const TokenInputComponentClass = componentRegistry.getComponentClass(TokenComponentName.TOKEN_INPUT_COMPONENT) as new (...args: any[]) => TokenInputComponentType;\n        if(TokenInputComponentClass) {\n            const tokenInputComponent = new TokenInputComponentClass();\n            context.createBean(tokenInputComponent);\n            return tokenInputComponent;\n        } \n        return null;\n    }\n\n    public stopEditing(): void {\n        this.controllers.getAllData().forEach((controller) => {\n            controller.stopEditing(false);\n        })\n    }\n\n    private attachListener() : void {\n        this.addListener(this.eventHandler, TOKEN_EVENT.MODEL_UPDATE, this.updateTokens.bind(this));\n        this.addListener(this.eventHandler, 'tokenFocused', this.onTokenFocused.bind(this));\n\n    }\n\n    private onTokenFocused() : void {   \n        this.controllers.getAllData().forEach((controller) => {\n            controller.onTokenFocused();\n        });\n    }\n\n    private setTabIndex() : void {\n        const element = this.component.getElement();\n        element.setAttribute('tabindex', '-1');\n    }\n\n    private updateTokens() : void {\n       this.controllers = this.createTokenControllers(this.controllers);\n       this.component.setTokenControllers(this.controllers.getAllData());\n    }\n\n    private createTokenControllers(prevControllers :  IGenericDataStore<TokenItemControllerType>) :  IGenericDataStore<TokenItemControllerType> {\n        const tokenControllers = new GenericDataStore<TokenItemControllerType>();\n        const tokenItems = this.tokenDataStore.getAllTokenOptions();\n\t\ttokenItems.forEach((tokenItem) => {\n\t\t\tconst tokenId              = `${tokenItem.getInstanceId()}`;\n\t\t\tconst tokenControllerExist = prevControllers.hasData(tokenId);\n            let tokenController = prevControllers.getData(tokenId)!;\n\t\t\tif(!tokenControllerExist) {\n\t\t\t\ttokenController = new TokenItemController( tokenItem, this.getBeanInstanceByBeanName);\n\t\t\t}\n\t\t\ttokenControllers.addData(tokenId ,tokenController);\n\n\t\t});\n\n        prevControllers.getAllData().forEach((previousController) => {\n            const tokenItem = previousController.getTokenItem();\n            const tokenCtrl = tokenControllers.hasData(`${tokenItem.getInstanceId()}`);\n            if (tokenCtrl) {\n                return;\n            }\n            previousController.destroy();\n        })\n\n        return tokenControllers;\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { TokenEditorParams, TokenItemComponentType, TokenItemComponentWrapperType, TokenItemControllerType, TokenRendererParams } from \"./token-item.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { TokenEditorType, TokenRendererType } from \"../../model/token-option-handler.types\";\nimport { BEAN_NAME, clearElement, getBeanInstanceByBeanName, removeFromParent } from \"@dg/corecomponent\";\n\nfunction getTemplate(): HTMLElement {\n\tconst div = document.createElement('div');\n    div.classList.add('dg-token__element');\n\treturn div;\n}\nexport class TokenItemComponent extends Component implements TokenItemComponentType {\n    private readonly tokenItemController !: TokenItemControllerType;\n    private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\tprivate tokenRenderer       !: TokenRendererType<TokenRendererParams>;\n\tprivate tokenRendererElement: HTMLElement | null = null;\n    private parentElement : HTMLElement | null = null;\n    private cellEditor : TokenEditorType<TokenEditorParams> | null = null;\n    private cellEditorGui : HTMLElement | null = null;\n    constructor(tokenItemController : TokenItemControllerType, getBeanInstanceByBeanName : getBeanInstanceByBeanName, parentElement : HTMLElement) {\n        super();\n        this.tokenItemController       = tokenItemController;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n        this.parentElement             = parentElement;\n        this.setTemplate(getTemplate());\n        this.init();\n    }\n\n    init() : void {\n        const component : TokenItemComponentWrapperType  = {\n            setRendererDetails : (component : IComponentDetails | undefined) => this.setRendererDetails(component),\n            getElement        : () => this.getGui(),\n            setEditorDetails : (component : IComponentDetails | undefined) => this.setEditorDetails(component),\n            getEditor        : () => this.cellEditor,\n            addOrRemoveCssClass      : (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n        } \n\n        this.tokenItemController.setComponent(component);\n    }\n\n    public destroy(): void {\n        super.destroy();\n    }\n\n    public detach() : void {\n        this.parentElement?.removeChild(this.getGui());\n        this.parentElement = null;\n    }\n\n    getInstanceId(): string {\n        return this.tokenItemController.getInstanceId();\n    }\n\n    getElement(): HTMLElement {\n        return this.getGui();\n    }\n\n    private setEditorDetails(component : IComponentDetails | undefined) : void {\n        if (component) {\n\t\t\tthis.createCellEditorInstance(component);\n\t\t} else {\n\t\t\tthis.destroyEditor();\n\t\t}\n    }\n\n    private destroyEditor() : void {\n        const context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n\n        this.cellEditor = context.destroyBean(this.cellEditor);\n\n        removeFromParent(this.cellEditorGui);\n        this.cellEditorGui = null;\n    }\n\n    createCellEditorInstance(component: IComponentDetails): void {\n        const cellEditor = component.newInstance();\n        if (!cellEditor) { return; } \n\t\tcellEditor.then(this.afterCellEditorCreated.bind(this));\n    }\n\n    private afterCellEditorCreated(cellEditor : TokenEditorType<TokenEditorParams>) : void {\n        const editingCancelledByUserComp = cellEditor.isCancelBeforeStart && cellEditor.isCancelBeforeStart();\n\t\tconst context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT)\n        if (editingCancelledByUserComp) {\n            context.destroyBean(cellEditor);\n            return;\n        }\n\n        if (!cellEditor.getElement) {\n            context.destroyBean(cellEditor);\n            return;\n        }\n\n        this.cellEditor = cellEditor;\n        this.cellEditorGui = cellEditor.getElement();\n\n        this.addInLineCellEditor();\n\t\n\n        if (cellEditor.afterElementAttached) {\n            cellEditor.afterElementAttached();\n        }\n    }\n\n\n    addInLineCellEditor() : void {\n\t\tthis.destroyRenderer();\n\n\t\tclearElement(this.getGui());\n\n\t\tconst parentValueElement = this.getGui();\n\n\t\tif(this.cellEditorGui) {\n\t\t\tparentValueElement.appendChild(this.cellEditorGui);\n\t\t\tthis.cellEditor?.focus && this.cellEditor.focus();\n\t\t}\n\t}\n\n    private setRendererDetails(component : IComponentDetails | undefined) : void {\n        if (component) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = component.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n    }\n\n    private destroyRenderer(): void {\n        const context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n\t\tthis.tokenRenderer = context.destroyBean(this.tokenRenderer);\n\t\tremoveFromParent(this.tokenRendererElement);\n\t\tthis.tokenRendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.tokenRenderer = renderer;\n\t\tthis.tokenRendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.tokenRendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.tokenRendererElement)\n\t\t}\n\t}\n}","import { AutoWired, BEAN_NAME, getBeanInstanceByBeanName, PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { TokenInnerController } from \"./token-inner-controller\";\nimport { TokenInnerComponentType, TokenInnerControllerType } from \"./token-inner.types\";\nimport { TokenItemComponentType, TokenItemControllerType } from \"../token-item/token-item.types\";\nimport { TokenItemComponent } from \"../token-item/token-item-view\";\nimport { _setDomChildOrder } from \"../../utilities/dom\";\nimport { TokenInputComponentType } from \"../token-input/token-input.types\";\n\nfunction rootTemplate(){\n\tconst root =  document.createElement(\"div\");\n\treturn root;\n}\n\nexport class TokenInnerComponent extends Component {\n\tprivate tokenComps : { [key: string]: TokenItemComponentType | null} = {};\n\tprivate controller !: TokenInnerControllerType;\n\tprivate tokenInputComponent : TokenInputComponentType | null = null;\n\n\t@AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    @PostConstruct()\n\tinit() : void {\n\t\tconst root = rootTemplate();\n\t\tthis.setTemplate(root);\n\n\t\tconst component : TokenInnerComponentType = {\n\t\t\tsetTokenControllers : (tokenControllers : TokenItemControllerType[]) => this.setTokenControllers(tokenControllers),\n\t\t\tgetElement : () => this.getGui(),\n\t\t\taddOrRemoveCssClass      : (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n\t\t}\n\t\tconst controller = this.createManagedBean(new TokenInnerController());\n\t\tcontroller.setComponent(component);\n\t\tthis.controller = controller;\n\n\t\tif(this.tokenInputComponent == null) {\n\t\t\tthis.attachTokenInput();\n\t\t}\n\n\t}\n\n\tprivate setTokenControllers(tokenItemControllers : TokenItemControllerType[]) : void {\n\t\tconst CellComponent = Object.assign({}, this.tokenComps);\n\n        tokenItemControllers.forEach((cellController) => {\n            const instanceID = cellController.getInstanceId();\n            if(this.tokenComps[instanceID] == null) {\n                this.newCellComponent(cellController);\n            }else {\n                CellComponent[instanceID] = null;\n            }\n        })\n\n        const removeCellComponents = Object.values(CellComponent).filter(component => component != null) as TokenItemComponentType[];\n        this.destroyCells(removeCellComponents);\n\t\tthis.ensureDomOrder(tokenItemControllers);\n\t}\n\n\tprivate attachTokenInput() : void {\n\t\tthis.tokenInputComponent = this.controller.createInputComponent();\n\t\tconst tokenInputElement = this.tokenInputComponent?.getElement();\n\t\ttokenInputElement && this.appendChild(tokenInputElement);\n\t}\n\n\tpublic detachTokenInput() : void {\n\t\tconst context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n\t\tthis.tokenInputComponent = context.destroyBean(this.tokenInputComponent);\n\t}\n\n\tprivate ensureDomOrder(tokenControllers: TokenItemControllerType[]): void {\n        const elementsInOrder: HTMLElement[] = [];\n        tokenControllers.forEach((tokenController) => {\n            const tokenComp = this.tokenComps[tokenController.getInstanceId()];\n            if (tokenComp) {\n                elementsInOrder.push(tokenComp.getElement());\n            }\n        });\n\n\t\tif(this.tokenInputComponent) {\n\t\t\telementsInOrder.push(this.tokenInputComponent.getElement());\n\t\t}\n\n        _setDomChildOrder(this.getGui(), elementsInOrder);\n    }\n\n\tprivate newCellComponent(tokenController: TokenItemControllerType): void {\n        const cellComp = new TokenItemComponent(tokenController, this.getBeanInstanceByBeanName, this.getGui());\n        this.tokenComps[tokenController.getInstanceId()] = cellComp;\n        this.getGui() && this.getGui().appendChild(cellComp.getGui());\n        tokenController.afterGuiAttached();\n    }\n\n    private destroyCells(tokenComps: TokenItemComponentType[]): void {\n        tokenComps.forEach(tokenComps => {\n            if (!tokenComps) { return; }\n\n            const instanceId = tokenComps.getInstanceId();\n            if (this.tokenComps[instanceId] !== tokenComps) {return; }\n\t\t\ttokenComps.detach();\n            tokenComps.destroy();\n            this.tokenComps[instanceId] = null;\n        });\n    }\n}","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ControllerParams, CtrlType, TokenControllerHandlerType } from \"./token-controller.types\";\n\n@Bean('tokenControllerHandler')\nexport class TokenControllerHandler extends EventEmitter implements TokenControllerHandlerType {\n    private params: ControllerParams = {} as ControllerParams;\n    public register<K extends CtrlType, T extends ControllerParams[K]>(ctrlType: K, ctrl: T): void {\n        this.params[ctrlType] = ctrl;\n    }\n\n    public get<K extends CtrlType>(ctrlType: K): ControllerParams[K] {\n        return this.params[ctrlType];\n    }\n    \n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenTooltipHandlerType } from \"./token-tooltip-handler.types\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { Tooltip } from \"../../../Tooltip/src/Tooltip\";\nimport { ITooltipConfiguration } from \"../../../Tooltip/src/Interface/ITooltipConfiguration\";\nimport { ITokenOption } from \"./token-option.types\";\nimport { ITokenOptionHandler } from \"./token-option-handler.types\";\nimport { TokenTooltipParams } from \"../core/token-item/token-item.types\";\nimport { TooltipTriggerStates } from \"../../../Tooltip/src/Constants/DefaultTooltipValues\";\n\n@Bean('tokenTooltipHandler')\nexport class TokenTooltipHandler extends EventEmitter implements TokenTooltipHandlerType {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ITokenOptionHandler;\n    registerTooltip(tokenItem : ITokenOption, element : HTMLElement, value : string) : Tooltip {\n        const documentElement    = this.optionHandler.getDocument();\n        let   renderer           = this.optionHandler.getTooltipRenderer();\n        let   userRendererParams = this.optionHandler.getTooltipRendererParams();\n        let   selector           = this.optionHandler.getTooltipSelector();\n\n        const getTooltipValue = () => {\n            return tokenItem.getValue();\n        }\n        const params = this.createTooltipParams(element, value ?? getTooltipValue());\n\n        if(selector) {\n            const {component, componentParams} = selector(params);\n            renderer                           = component;\n            userRendererParams                 = componentParams;\n        }else {\n            renderer           = this.optionHandler.getTooltipRenderer();\n            userRendererParams = this.optionHandler.getTooltipRendererParams();\n        }\n        \n        \n        const configuration : ITooltipConfiguration = {\n            shouldShowTooltip: () => true,\n            tooltipValue     : value != null ? value: getTooltipValue(),\n            popupParent      : this.getPopupParent(),\n            documentElement,\n            renderer,\n            userRendererParams : {...params, ...userRendererParams},\n            selector,\n            tooltipHoverPosition: false,\n            tooltipShowDelay    : this.optionHandler.getTooltopShowDelay(),\n            tooltipHideDelay    : this.optionHandler.getTooltipHideDelay(),\n            tooltipMouseTrack   : this.optionHandler.isTooltipTrackMosue(),\n            tooltipTrigger      : TooltipTriggerStates.HOVER\n        }\n        return new Tooltip(element, configuration);\n    }\n\n    private createTooltipParams(element : HTMLElement, value : string | null) : TokenTooltipParams {\n        return {\n            element,\n            value\n        }\n    }\n    private getPopupParent() : HTMLElement {\n        return this.optionHandler.getPopupParent()!;\n    }\n}","\nexport const enum HookEventsName {\n onBeforeSelect        = 'onBeforeSelect',\n onAfterSelect         = 'onAfterSelect',\n onAfterDeSelect       = 'onAfterDeSelect',\n onBeforeDeSelect      = 'onBeforeDeSelect',\n onBeforeDropdownOpen  = 'onBeforeDropdownOpen',\n onAfterDropdownOpen   = 'onAfterDropdownOpen',\n onBeforeDropdownClose = 'onBeforeDropdownClose',\n onAfterDropdownClose  = 'onAfterDropdownClose',\n onBeforeTabChange     = 'onBeforeTabChange',\n onAfterTabChange      = 'onAfterTabChange',\n onChange              = \"onChange\",\n onBeforeTokenRemove   = 'onBeforeTokenRemove',\n onAfterTokenRemove    = 'onAfterTokenRemove',\n onBeforeTokenUpdate   = 'onBeforeTokenUpdate',\n onAfterTokenUpdate    = 'onAfterTokenUpdate',\n onBeforeTokenAdd      = 'onBeforeTokenAdd',\n onAfterTokenAdd       = 'onAfterTokenAdd',\n onFocus               = 'onFocus',\n onBlur                = 'onBlur',\n onSearchChange        = 'onSearchChange'\n\n}\n\nexport const HookEventsValues = [\n    HookEventsName.onAfterSelect,\n    HookEventsName.onBeforeSelect,\n    HookEventsName.onAfterDeSelect,\n    HookEventsName.onBeforeDeSelect,\n    HookEventsName.onAfterDropdownClose,\n    HookEventsName.onAfterDropdownOpen,\n    HookEventsName.onBeforeDropdownClose,\n    HookEventsName.onBeforeDropdownOpen,\n    HookEventsName.onAfterTabChange,\n    HookEventsName.onBeforeTabChange,\n    HookEventsName.onChange,\n    HookEventsName.onAfterTokenRemove,\n    HookEventsName.onBeforeTokenRemove,\n    HookEventsName.onBeforeTokenUpdate,\n    HookEventsName.onAfterTokenUpdate,\n    HookEventsName.onAfterTokenAdd,\n    HookEventsName.onBeforeTokenAdd,\n    HookEventsName.onFocus,\n    HookEventsName.onBlur,\n    HookEventsName.onSearchChange\n]","import { Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { HookManagerType } from \"./hook-manager.types\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { HookEventsName, HookEventsValues } from \"../constants/HookEventNames\";\n\n@Bean(TOKEN_BEAN_NAME.HOOK_MANAGER)\nclass HookManager extends EventEmitter implements HookManagerType {\n    private hooks : Record<string, CallableFunction> = {};\n\n\n    @PostConstruct()\n    init() {\n        const events         = this.optionsHandler.getEvents();\n        const dropdownEvents = this.optionsHandler.getDropdownEvents();\n        const keys           = Object.keys(events ?? {});\n        const dropdownEventsKey = Object.keys(dropdownEvents ?? {});\n        [...keys, ...dropdownEventsKey].forEach((key : any)=>{\n            const callback = events[key] ?? dropdownEvents[key];\n            this.addHook(key, callback);\n        })\n    }\n\n    removeHooks(hookNames: HookEventsName[]): void {\n        hookNames.forEach(hookName=>{\n            delete this.hooks[hookName];\n        });\n    }\n   \n    addHook(hookName : HookEventsName, callback : CallableFunction) {\n        if (this.isValidHook(hookName)) {\n            this.hooks[hookName] = callback;\n        }\n    }\n\n    hasHook(hookName : HookEventsName) : boolean {\n        return this.hooks[hookName] != undefined;\n    }\n\n    getHook(hookName : HookEventsName) : CallableFunction {\n        return this.hooks[hookName];\n    }\n \n    isValidHook(hookName : HookEventsName) : boolean {\n        return HookEventsValues.includes(hookName);\n    }\n\n    executeHook(beforeHook : HookEventsName, afterHook : HookEventsName, middleWare : CallableFunction, metas : Record<string, any>) : boolean {\n        const api = (args : any)=>{\n            middleWare(args);\n            return this.executeAfterHook(afterHook, args);\n        }\n        return this.executeBeforeHook(beforeHook, api, metas);\n\t}\n\n    executeOnHook(hookName : HookEventsName, middleWare : CallableFunction, metas : Record<string, any>) : boolean {\n        return this.executeBeforeHook(hookName, middleWare, metas);\n    }\n\n    executeBeforeHook(hookName : HookEventsName, middleWare : CallableFunction, metas : Record<string, any>) : boolean {\n        const isHookAvailble = this.hasHook(hookName);\n        if (isHookAvailble) {\n            const hookCallback    = this.getHook(hookName);\n            const returnValue = hookCallback(metas);\n            if(returnValue == false) {\n                return false;\n            }\n            else if (typeof returnValue == 'object') {\n                metas = returnValue;\n            } \n            this.dispatchEvent({\n                type : hookName,\n                metas\n            })\n            middleWare(metas);\n            return true;\n        }\n        else{\n            this.dispatchEvent({\n                type : hookName,\n                metas\n            })\n            middleWare(metas);\n            return true;\n        }\n    }\n\n    executeAfterHook(hookName : HookEventsName, metas : Record<string, any>) : boolean {\n        const isHookAvailble = this.hasHook(hookName);\n        if (isHookAvailble) {\n            const hookCallback    = this.getHook(hookName);\n            hookCallback(metas);   \n        }\n        this.dispatchEvent({\n            type : hookName,\n            metas\n        })\n        return true;\n    }\n\n    executeOnHookWithoutCallback(hookName : HookEventsName, metas : Record<string, any>) : void {\n        const isHookAvailble = this.hasHook(hookName);\n        if (isHookAvailble) {\n            const hookCallback    = this.getHook(hookName);\n            hookCallback(metas);   \n        }\n        this.dispatchEvent({\n            type : hookName,\n            metas\n        })\n    }\n\n    executeAllHooks(beforeHookName: HookEventsName, onActionHookName: HookEventsName, afterHookName: HookEventsName, middleWare: CallableFunction, metas: Record<string, any>): boolean {\n        const isHookAvailble = this.hasHook(beforeHookName) || this.hasHook(afterHookName) || this.hasHook(onActionHookName);\n        if(isHookAvailble){\n            const beforeCallback = this.getHook(beforeHookName);\n            const returnValue    = beforeCallback?.(metas);\n            if(returnValue == false){\n                return false;\n            }\n            else if (typeof returnValue == 'object') {\n                metas = returnValue;\n            }\n            this.executeHook(onActionHookName, afterHookName, middleWare, metas);\n            return true;\n        }\n        else{\n            this.dispatchEvent({\n                type : beforeHookName,\n                metas\n            })\n            middleWare(metas);\n            return true;\n        }\n    }\n}\n\n\nexport{ HookManager };","import { Bean } from \"@dg/corecomponent\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { CorePopupHandler } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(TOKEN_BEAN_NAME.POSITION_HANDLER)\nexport class PopupHandler extends CorePopupHandler {\n   \n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DropdownModelType } from \"./DropdownModel.types\";\nimport { TabOption, IListDataMapping, OptionRendererSelector, OptionRendererType, ListContentType, HeaderRendererType, HeaderRendererParams, FooterRendererType, FooterRendererParams, TooltipValueParams, NotFoundRendererType, NotFoundRendererParams, SearchChangeParams } from \"../../../../List/List-configuration\";\nimport { OptionRendererParams } from \"../../../../List/src/Component/Body/List-Option/list-option.types\";\nimport { FetchParams } from \"../../../../List/src/Component/Model/list-cache-block.types\";\nimport { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { ITokenData, TokenConfigurations } from \"../../../token-configuration.types\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ITokenDataStore } from \"../../model/token-data-store.types\";\nimport { ListSelectionHookparams } from \"../../../../List/src/Component/Model/list-selection.types\";\nimport { HookManagerType } from \"../../model/hook-manager.types\";\nimport { HookEventsName } from \"../../constants/HookEventNames\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { TokenControllerHandlerType } from \"../../model/token-controller.types\";\nimport { TabIdChangeHookParams } from \"../../../../List/src/Component/Tab/TabPanelDataPart.types\";\n\n@Bean(TOKEN_BEAN_NAME.DROPDOWN_MODEL)\nexport class DropdownModel extends EventEmitter implements DropdownModelType {\n    \n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) private tokenDataStore !: ITokenDataStore;\n    @AutoWired('tokenControllerHandler') private tokenControllerHandler !: TokenControllerHandlerType;\n    @AutoWired('configuration') private configuration !: TokenConfigurations;\n    @AutoWired(TOKEN_BEAN_NAME.HOOK_MANAGER) private hookManager !: HookManagerType;\n\n    getFooterRendererParams(): Object | undefined {\n        return this.configuration.dropdownList && this.configuration.dropdownList.footerRendererParams;\n    }\n    getFooterRenderer(): (new () => FooterRendererType<FooterRendererParams>) | undefined{\n        return this.configuration.dropdownList && this.configuration.dropdownList.footerRenderer!;\n    }\n    getHeaderRendererParams(): Object | undefined {\n        return this.configuration.dropdownList && this.configuration.dropdownList.headerRendererParams\n    }\n    getHeaderRenderer(): (new () => HeaderRendererType<HeaderRendererParams>) | undefined {\n        return this.configuration.dropdownList && this.configuration.dropdownList.headerRenderer!;\n    }\n    getBlockSize(): number {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.blockSize ) ?? 100\n    }\n    getDataSource(): ((params: FetchParams) => void) | null {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.dataSource) ?? null\n    }\n\n    getTabs(): TabOption[] {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.tabs) ?? [];\n    }\n    getActiveTab(): string | undefined {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.activeTab) ?? undefined;\n    }\n    getLoadingCount(): number {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.loadingCount) ?? 0;  \n    }\n    getDataMapping(): IListDataMapping {\n        return (this.configuration.dataMapping) as IListDataMapping;\n    }\n    getOptionRenderer(): ((params: OptionRendererParams) => OptionRendererSelector) | undefined {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.optionRenderer)\n    }\n    getLoadingOptionRenderer(): OptionRendererType<OptionRendererParams> | undefined {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.loadingOptionRenderer)\n    }\n    getValues(): string[] {\n        return this.tokenDataStore.getSelectedTokenIds();\n    }\n\n    isDisableOnSelection() : boolean {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.disableOnSelection) ?? false\n    }\n\n    getTooltipValue(): ((params: TooltipValueParams) => string) {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.tooltipValue) ?? ((params) => params.value);\n    }\n\n\n    onBeforeSelect(params: ListSelectionHookparams): boolean | void {\n        const callBack = (params : ListSelectionHookparams) => {\n            this.tokenDataStore.setTokenData((params.selectedNodes as ITokenData[]), this.optionsHandler.getDataMapping(), null, 'none','dropdown-ui');\n            this.dispatchEvent({\n                type : 'EVENT_INPUT_FOCUS'\n            })\n\n            this.dispatchEvent({\n                type : 'EVENT_DROPDOWN_VALUE_SELECT'\n            })\n        }\n        return this.hookManager.executeBeforeHook(HookEventsName.onBeforeSelect,callBack, params);\n    }\n    onAfterSelect(params: ListSelectionHookparams): void {\n        this.hookManager.executeAfterHook(HookEventsName.onAfterSelect, params);\n    }\n    onBeforeDeSelect(params: ListSelectionHookparams): boolean | void {\n        const callBack = (params : ListSelectionHookparams) => {\n            this.tokenDataStore.removeTokenOptions(params.values, 'dropdown-ui');\n            this.dispatchEvent({\n                type : 'EVENT_INPUT_FOCUS'\n            })\n        }\n        return this.hookManager.executeBeforeHook(HookEventsName.onBeforeDeSelect,callBack, params);\n    }\n    onAfterDeSelect(params: ListSelectionHookparams): boolean | void {\n        this.hookManager.executeAfterHook(HookEventsName.onAfterDeSelect, params);\n    }\n\n    onBeforeTabChange(params: TabIdChangeHookParams): boolean | void {\n        const callBack = (_params : TabIdChangeHookParams) => {\n            this.dispatchEvent({\n                type : 'EVENT_INPUT_FOCUS'\n            })\n        }\n        return this.hookManager.executeBeforeHook(HookEventsName.onBeforeTabChange,callBack, params);\n    }\n\n    onAfterTabChange(params: TabIdChangeHookParams): boolean | void {\n        this.hookManager.executeAfterHook(HookEventsName.onAfterTabChange, params);\n    }\n\n    getGapX(): number {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.gapX) ?? 0;\n    }\n\n    getGapY(): number {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.gapY) ?? 0;\n    }\n\n    getAppendTo(): HTMLElement{\n        const controller = this.tokenControllerHandler.get('tokenRootController');\n        return controller.getRootElement();\n    }\n\n    getDropdownAppendTo(): HTMLElement  {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.dropdownAppendTo) ?? document.body;\n    }\n\n    getDropdownPosition(): string {\n        return (this.configuration.dropdownList && this.configuration.dropdownList.position) ?? Position.bottomLeft;\n    }\n\n    getType(): ListContentType {\n        return this.optionsHandler.getTokenContentType();\n    }\n\n    getSearchMinKeyword(): number {\n        return this.configuration?.search?.minKeywordLength ?? 0;\n    }\n\n    getSearchHighlightKeyword(): boolean {\n        return this.configuration?.search?.highlightKeyword ?? false\n    }\n\n    getTooltipAppendTo(): HTMLElement {\n        return this.optionsHandler.getPopupParent();\n    }\n\n    getClassName(): string | null {\n        return this.configuration.dropdownList?.className ?? null\n    }\n\n    getNotFoundRenderer() :  (new () => NotFoundRendererType<NotFoundRendererParams>) | undefined {\n        return this.configuration.dropdownList?.notFoundRenderer\n    }\n\n    isInfiniteScroll() : boolean {\n        return this.configuration.dropdownList?.infiniteScroll ?? false;\n    }\n\n    onSearchChange(params: SearchChangeParams): void {\n        this.hookManager.executeAfterHook(HookEventsName.onSearchChange, params);\n    }\n}","export function isValidModuleVersion(version: string, dependencyVersion: string): boolean {\n    const versionArr: number[] = version.split('.').map(Number);\n    const versionList: string[] = dependencyVersion.split('||').map(part => part.trim());\n\n    for (const versionItem of versionList) {\n        if (versionItem.includes('&&')) {\n            const andConditions: string[] = versionItem.split('&&').map(part => part.trim());\n            let satisfiesAll: boolean = true;\n\n            for (const condition of andConditions) {\n                if (!checkCondition(versionArr, condition)) {\n                    satisfiesAll = false;\n                    break;\n                }\n            }\n\n            if (satisfiesAll) {\n                return true;\n            }\n        } else {\n            if (checkCondition(versionArr, versionItem)) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n}\n\nfunction checkCondition(versionArr: number[], condition: string): boolean {\n    if (condition === '') {\n        return true; // Empty condition (default to true)\n    }\n\n    if (condition === 'latest') {\n        return true; // Special condition: latest (always true)\n    }\n\n    if (!condition.match(/[><]=?/)) {\n        // Treat as equals\n        const dependencyVersionArr: number[] = condition.split('.').map(Number);\n        return isEqual(versionArr, dependencyVersionArr);\n    }\n\n    const operatorMatch = condition.match(/[><]=?/);\n    if (!operatorMatch) {\n        return false; // Invalid version format\n    }\n    const operator: string = operatorMatch[0];\n    const bound: number[] = condition.split(operator)[1].trim().split('.').map(Number);\n\n    switch (operator) {\n        case '<':\n            return isLessThan(versionArr, bound);\n        case '>':\n            return isGreaterThan(versionArr, bound);\n        case '<=':\n            return isLessThanOrEqual(versionArr, bound);\n        case '>=':\n            return isGreaterThanOrEqual(versionArr, bound);\n        default:\n            return false; // Invalid operator\n    }\n}\n\nfunction isGreaterThan(versionArr: number[], boundArr: number[]): boolean {\n    for (let i = 0; i < Math.min(versionArr.length, boundArr.length); i++) {\n        if (versionArr[i] > boundArr[i]) {\n            return true;\n        } else if (versionArr[i] < boundArr[i]) {\n            return false;\n        }\n    }\n    return false;\n}\n\nfunction isLessThan(versionArr: number[], boundArr: number[]): boolean {\n    for (let i = 0; i < Math.min(versionArr.length, boundArr.length); i++) {\n        if (versionArr[i] < boundArr[i]) {\n            return true;\n        } else if (versionArr[i] > boundArr[i]) {\n            return false;\n        }\n    }\n    return false;\n}\n\nfunction isGreaterThanOrEqual(versionArr: number[], boundArr: number[]): boolean {\n    for (let i = 0; i < Math.min(versionArr.length, boundArr.length); i++) {\n        if (versionArr[i] > boundArr[i]) {\n            return true;\n        } else if (versionArr[i] < boundArr[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction isLessThanOrEqual(versionArr: number[], boundArr: number[]): boolean {\n    for (let i = 0; i < Math.min(versionArr.length, boundArr.length); i++) {\n        if (versionArr[i] < boundArr[i]) {\n            return true;\n        } else if (versionArr[i] > boundArr[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction isEqual(versionArr1: number[], versionArr2: number[]): boolean {\n    if (versionArr1.length !== versionArr2.length) {\n        return false;\n    }\n    for (let i = 0; i < versionArr1.length; i++) {\n        if (versionArr1[i] !== versionArr2[i]) {\n            return false;\n        }\n    }\n    return true;\n}","import { values } from \"@dg/corecomponent\";\nimport { IModule } from \"../../../core/modules.types\";\nimport { isValidModuleVersion } from \"../../../core/VersionValidation\";\n// import { dependencyVersion, moduleName } from \"../version.js\";\ntype globalModuleMap = { [name: string]: IModule };\ntype instanceModulesMap = { [instanceID: string]: { [name: string]: IModule } };\n\nexport class ModuleRegistry {\n\n    private static globalModulesMap: globalModuleMap      = {};\n    private static instanceModulesMap: instanceModulesMap = {};\n\n    public static register(module: IModule): void {\n        ModuleRegistry.__register(module, undefined);\n    }\n\n    public static registerModules(modules: IModule[]): void {\n        ModuleRegistry.__registerModules(modules, undefined);\n    }\n\n    public static __registerModules(modules: IModule[], instanceID: string | undefined): void {\n        if (!modules) {\n            return;\n        }\n        modules.forEach(module => ModuleRegistry.__register(module, instanceID));\n    }\n\n    public static __unRegisterInstanceModules(instanceID: string): void {\n        delete ModuleRegistry.instanceModulesMap[instanceID];\n    }\n\n    public static __getRegisteredModules(instanceID: string): IModule[] {\n        return [...values(ModuleRegistry.globalModulesMap), ...values(ModuleRegistry.instanceModulesMap[instanceID] || {})];\n    }\n\n    public static __isRegistered(moduleName: string, instanceID: string): boolean {\n        return !!ModuleRegistry.globalModulesMap[moduleName] || !!ModuleRegistry.instanceModulesMap[instanceID]?.[moduleName];\n    }\n\n    public static __getInstanceRegisteredModules(instanceID: string): IModule[] {\n        return values(ModuleRegistry.instanceModulesMap[instanceID] ?? {}) || [];\n    }\n\n    public static __assertRegistered(moduleName: string, reason: string, instanceID: string): boolean {\n        if (this.__isRegistered(moduleName, instanceID)) {\n            return true;\n        }\n\n        console.error(reason);\n\n        return false;\n    }\n\n    public static __register(module: IModule, instanceID: string | undefined): void {\n        // ModuleRegistry.runVersionChecks(module);\n\n        if (instanceID !== undefined) {\n            if (ModuleRegistry.instanceModulesMap[instanceID] === undefined) {\n                ModuleRegistry.instanceModulesMap[instanceID] = {};\n            }\n            ModuleRegistry.instanceModulesMap[instanceID][module.moduleName] = module;\n        } else {\n            ModuleRegistry.globalModulesMap[module.moduleName] = module;\n        }\n    }\n\n    public static runVersionChecks(_module: IModule) : void {\n        // if (!module.version) {\n        //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is incompatible. Please update all modules to the same version.`);\n        // } else if (!ModuleRegistry.isValidModuleVersion(module.version, dependencyVersion[module.moduleName])) {\n        //     throw Error(`You are using incompatible versions of ${moduleName} modules. Major and minor versions should always match across modules. '${module.moduleName}' is version ${module.version} but the other modules are version ${dependencyVersion[module.moduleName]}. Please update all modules to the same version.`);\n        // }\n    }\n\n    public static isValidModuleVersion(version : string, dependencyVersion : string) : boolean {\n        return isValidModuleVersion(version, dependencyVersion);\n    }\n}\n\n","import { IComponentMeta, UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ListUserComponentHandlerType } from \"./list-user-component-handler.types\";\nimport { ComponentRendererTypes } from \"../Core/HeaderFooterCore.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { ListOptionHandlerTypes } from \"./list-option-handler.types\";\nimport { OptionRendererParams } from \"../Body/List-Option/list-option.types\";\nimport { ListContentType } from \"../../../List-configuration\";\n\n\nexport const enum PropertyName {\n FOOTER_RENDERER         = 'footerRenderer',\n HEADER_RENDERER         = 'headerRenderer',\n OPTION_RENDERER         = 'optionRenderer',\n LOADING_OPTION_RENDERER = 'loadingOptionRenderer',\n NOT_FOUND_RENDERER      = 'notFoundRenderer'\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class ListUserComponentHandler extends UserComponentHandler implements ListUserComponentHandlerType {\n\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    public getFooterRendererDetails(options: ComponentRendererTypes, params: any): IComponentDetails | undefined {\n        return this.getComponentDetails(options, PropertyName.FOOTER_RENDERER, params, PropertyName.FOOTER_RENDERER);\n    }\n\n    public getHeaderRendererDetails(options: ComponentRendererTypes, params: any): IComponentDetails | undefined {\n        return this.getComponentDetails(options, PropertyName.HEADER_RENDERER, params, PropertyName.HEADER_RENDERER);\n    }\n\n    public getOptionRendererDetails(optionHandler: ListOptionHandlerTypes, params: OptionRendererParams, defaultValue : ListContentType): IComponentDetails | undefined {\n        return this.getComponentDetails(optionHandler, PropertyName.OPTION_RENDERER, params, defaultValue);\n    }\n\n    public getOptionLoadingRendererDetails(optionHandler: ListOptionHandlerTypes, params: OptionRendererParams): IComponentDetails | undefined {\n        return this.getComponentDetails(optionHandler, PropertyName.LOADING_OPTION_RENDERER, params, PropertyName.LOADING_OPTION_RENDERER);\n    }\n\n\n    public getNotFoundRendererDetails(optionHandler: ListOptionHandlerTypes, params: any): IComponentDetails | undefined {\n        return this.getComponentDetails(optionHandler, PropertyName.NOT_FOUND_RENDERER, params, PropertyName.NOT_FOUND_RENDERER);\n    }\n\n    protected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n            let { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n            const looUpRegistry = (name: string) => {\n                const userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n                const item = userComponentRegistry.retrieve(name);\n                if (item) { \n                    jsComponent = !item.componentFrameWork ? item.component : undefined;\n                    frameworkComponent = item.componentFrameWork ? item.component : undefined; \n                }\n            };\n    \n            if (componentName != null) {\n                looUpRegistry(componentName);\n            }\n    \n            if ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n                looUpRegistry(defautName);\n            }\n    \n            if (!jsComponent && !frameworkComponent) {\n                return undefined;\n            }\n    \n            const componentFramework = jsComponent == null;\n            const componentClass = jsComponent ? jsComponent : frameworkComponent;\n    \n            const mergedParams = this.getMergeParams(item, propertyName, params);\n    \n            return {\n                componentFramework,\n                componentClass,\n                params : mergedParams,\n                propertyName,\n                newInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n            };\n        }\n        \n    \n        protected getComponentMeta( item: any, propertyName: PropertyName, params?: any, ): IComponentMeta {\n            let componentName: string | null = null;\n            let jsComponent: any = null;\n            let frameworkComponent: any = null;\n    \n            const assignComponentNameOrComponentClass = (component: any) => {\n                if (typeof component === 'string') {\n                    componentName = component;\n                } else if (component != null && component !== true) {\n                    const isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n                    if (isFrameworkComponent) {\n                        frameworkComponent = component;\n                    } else {\n                        jsComponent = component;\n                    }\n                }\n            };\n    \n            if(item) {\n                const definitionObject = item as any;\n    \n                const selectorFunction = this.getComponentSelector(definitionObject, propertyName);\n    \n                const selector = selectorFunction ? selectorFunction(params) : null;\n    \n                if(selector) {\n                    assignComponentNameOrComponentClass((selector).component);\n                }else {\n                    assignComponentNameOrComponentClass(this.getComponent(definitionObject, propertyName));\n                }\n            }\n    \n            return {\n                componentName,\n                frameworkComponent,\n                jsComponent,\n            };\n        }\n\n        private getComponentSelector(defintion : any, propertyName : PropertyName) : any {\n            switch(propertyName) {\n               case PropertyName.OPTION_RENDERER:\n                    return (defintion as ListOptionHandlerTypes).getOptionRenderer();\n            }\n        }\n    \n        protected getComponent( item: any, propertyName: PropertyName): any {\n            switch (propertyName) {\n                 case PropertyName.FOOTER_RENDERER:\n                case PropertyName.HEADER_RENDERER:\n                    return item.getRenderer && (item as ComponentRendererTypes)?.getRenderer()\n                case PropertyName.LOADING_OPTION_RENDERER:\n                    return (item as ListOptionHandlerTypes).getLoadingOptionRenderer && (item as ListOptionHandlerTypes).getLoadingOptionRenderer();\n                case PropertyName.NOT_FOUND_RENDERER:\n                    return (item as ListOptionHandlerTypes).getNotFoundRenderer && (item as ListOptionHandlerTypes).getNotFoundRenderer();\n            }\n        }\n        protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n            let instance: any;\n            const frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n            const componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n            if (!componentFrameWork) {\n                instance = new component();\n            } else { \n                const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n                instance = frameworkComponentWrapper.wrap(\n                    component,\n                    componentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n                    componentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n                );\n            }\n    \n            const initialise = this.initComponent(instance, params);\n            if (initialise == null) {\n                return Promise.resolve(instance);\n            }\n    \n            return initialise.then(() => instance);\n        }\n    \n        protected initComponent(instance: any, params: any): Promise<any> | any {\n            this.context.createBean(instance);\n            if (instance.init == null) {\n                return;\n            }\n            return instance.init(params);\n        }\n    \n        private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n            return {...params, ...this.getUserParams(item, propertyName, params)};\n        }\n    \n        private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n            switch(propertyName) {\n                case PropertyName.FOOTER_RENDERER:\n                    return this.getUserRendererParams(item, params);\n                case PropertyName.HEADER_RENDERER:\n                    return this.getUserRendererParams(item, params);\n                default:\n                    return {};\n            }\n    \n        }\n    \n        private getUserRendererParams(item : any, params : any) : any {\n            const rendererParams = item.getRendererParams();\n    \n            let rendererParamsResult : any = {};\n    \n            if (typeof rendererParams == 'function') {\n                rendererParamsResult = rendererParams(params);\n            } else if (typeof rendererParams == 'object') {\n                rendererParamsResult = rendererParams;\n            }\n    \n            return rendererParamsResult;\n        }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListOptionHandlerTypes, ListTooltipParams, ListTooltipRenderer, ListTooltipSelector } from \"./list-option-handler.types\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventsType, FooterRendererParams, FooterRendererType, HeaderRendererParams, HeaderRendererType, IListDataMapping, ListConfigurationTypes, ListContentType, NotFoundRendererParams, NotFoundRendererType, OptionRendererSelector, OptionRendererType, TabOption, TooltipValueParams } from \"../../../List-configuration\";\nimport { FetchParams, ICoreFetchParams } from \"./list-cache-block.types\";\nimport { OptionRendererParams } from \"../Body/List-Option/list-option.types\";\n\nexport const DefaultDataMapping : IListDataMapping = {\n    id      : 'id',\n    color   : 'color',\n    imageURL: 'imageURL',\n    value   : 'value',\n    type    : 'type',\n    disabled : 'disabled'\n}\n\nconst DEFAULT_TOOLTIP_HIDE_DELAY = 5000;\nconst DEFAULT_TOOLTIP_SHOW_DELAY = 100;\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class ListOptionHandler extends EventEmitter implements ListOptionHandlerTypes {\n    @AutoWired('configuration') private configuration !: ListConfigurationTypes;\n\t@AutoWired('element') private \telement !: HTMLElement;\n\n    getFooterRendererParams(): Object | undefined {\n        return this.configuration.footerRendererParams ?? undefined\n    }\n    getFooterRenderer(): (new () => FooterRendererType<FooterRendererParams>) | undefined {\n       return this.configuration.footerRenderer ?? undefined;\n    }\n    getHeaderRendererParams(): Object | undefined {\n        return this.configuration.headerRendererParams ?? undefined;\n    }\n    getHeaderRenderer(): (new () => HeaderRendererType<HeaderRendererParams>) | undefined {\n        return this.configuration.headerRenderer ?? undefined \n    }\n\n    getBlockSize(): number {\n        return this.configuration.blockSize ?? 100;\n    }\n\n    getDataSource(): ((params: FetchParams | ICoreFetchParams) => void) | null {\n        return this.configuration.dataSource || null;\n    }\n\n    getItemHeight(): number {\n        return 50;\n    }\n\n    getTabs(): TabOption[] {\n        return this.configuration.tabs ?? [];\n    }\n\n    getActiveTab(): string | undefined {\n        return this.configuration.activeTab ?? undefined\n    }\n\n    getLoadingCount(): number {\n        return this.configuration.loadingCount ?? 1;\n    }\n\n    getDataMapping(): IListDataMapping {\n        return {...DefaultDataMapping , ...this.configuration.dataMapping ?? {}}\n    }\n\n    getOptionRenderer(): ((params: OptionRendererParams) => OptionRendererSelector) | undefined {\n        return this.configuration.optionRenderer ?? undefined;\n    }\n\n    getLoadingOptionRenderer(): OptionRendererType<OptionRendererParams> | undefined {\n        return this.configuration.loadingOptionRenderer ?? undefined;\n    }\n    \n    getValues(): string[] {\n        return this.configuration.values ?? [];\n    }\n\n    getEvents(): EventsType {\n        return this.configuration.events ?? {};\n    }\n\n    getNotFoundRenderer(): (new () => NotFoundRendererType<NotFoundRendererParams>) | undefined {\n        return this.configuration.notFoundRenderer\n    }\n\n    getType() : ListContentType {\n        return this.configuration.type ?? 'text'\n    }\n\n    getSearchMinKeyWord(): number {\n        return this.configuration?.search?.minKeywordLength ?? 0;\n    }\n\n    getSearchHighlightKeyword(): boolean {\n        return this.configuration?.search?.highlightKeyword ?? false;\n    }\n\n    getSearchValue(): string {\n        return this.configuration?.search?.value ?? '';\n    }\n\n    isDisableOnSelection(): boolean {\n        return this.configuration.disableOnSelection ?? false;\n    }\n\n    getDocument(): Document {\n        let result: Document | null = null;\n        if (this.element) {\n            result = this.element.ownerDocument;\n        }\n\n        if (result) {\n            return result;\n        }\n\n        return document;\n    }\n\n    getTooltipRenderer(): (new (...args: any[]) => ListTooltipRenderer<ListTooltipParams>) | undefined {\n        return this.configuration?.tooltipRenderer ?? undefined;\n    }\n\n    getTooltipRendererParams(): Record<string, any> {\n        return this.configuration?.tooltipRendererParams ?? {}\n    }\n\n    getTooltipSelector(): ((params: any) => ListTooltipSelector) | undefined {\n        return this.configuration?.tooltipSelector ?? undefined;\n    }\n\n    getPopupParent(): HTMLElement | null {\n        return this.configuration?.popupParent ?? document.body;\n    }\n\n    getTooltipHideDelay(): number {\n        return this.configuration.tooltipHideDelay ?? DEFAULT_TOOLTIP_HIDE_DELAY;\n    }\n\n    getTooltopShowDelay(): number {\n        return this.configuration.tooltipShowDelay ?? DEFAULT_TOOLTIP_SHOW_DELAY;\n    }\n\n    isTooltipTrackMosue(): boolean {\n        return this.configuration.tooltipTrackMouse ?? false;\n    }\n\n    getTooltipValueCallback() : ((params: TooltipValueParams) => string) {\n        return this.configuration.tooltipValue ?? ((params) => params.value)\n    }\n\n    getClassName() : string | null {\n        return this.configuration.className ?? null;\n    }\n\n    isInfiniteScroll() : boolean {\n        return this.configuration.infiniteScroll ?? false;\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { HeaderFooterCoreComponentTypes, HeaderFooterCoreComponentWrapperTypes, HeaderFooterCoreControllerTypes } from \"./HeaderFooterCore.types\";\nimport { AutoWired, BEAN_NAME, clearElement, getBeanInstanceByBeanName, PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { IComponent } from \"@dg/corecomponent/FrameWork/Interface/IComponent\";\n\nexport abstract class HeaderFooterCoreComponent<T extends HeaderFooterCoreControllerTypes> extends Component implements HeaderFooterCoreComponentTypes {\n    abstract getTemplate() : HTMLElement;\n    abstract getController() : new () => T;\n\n    private renderer : IComponent<any> | null = null;\n    private rendererElement : HTMLElement | null = null;\n\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    @PostConstruct()\n    init() {\n        const component : HeaderFooterCoreComponentWrapperTypes = {\n            setRenderDetails   : (componentDetails : IComponentDetails | undefined) => this.setRendererDetails(componentDetails),\n            addOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n        }\n\n        this.setTemplate(this.getTemplate());\n\n\n        const controller = this.createManagedBean(new (this.getController()));\n        controller.setComponent(component);\n    }\n\n    private setRendererDetails(componentDetails : IComponentDetails | undefined) : void {\n        if(componentDetails) {\n            this.destroyRenderer();\n            const callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = componentDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n        }\n    }\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement)\n\t\t}\n\t}\n\n    private destroyRenderer(): void {\n        const context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n\t\tthis.renderer = context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ComponentRendererTypes, HeaderFooterCoreComponentWrapperTypes, HeaderFooterCoreControllerTypes } from \"./HeaderFooterCore.types\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ListUserComponentHandlerType } from \"../Model/list-user-component-handler.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { FooterRendererParams, FooterRendererType, HeaderRendererParams, HeaderRendererType } from \"../../../List-configuration\";\n\nexport abstract class HeaderFooterCoreController extends EventEmitter implements HeaderFooterCoreControllerTypes {\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    protected component !: HeaderFooterCoreComponentWrapperTypes;\n\n    abstract getRenderer() : (new () => FooterRendererType<FooterRendererParams>) | (new () => HeaderRendererType<HeaderRendererParams>)  | undefined;\n    abstract getRendererParams() : Object | undefined;\n    abstract getRendererDetails(component : ComponentRendererTypes, userComponentHandler : ListUserComponentHandlerType) : IComponentDetails | undefined;\n    setComponent(component: HeaderFooterCoreComponentWrapperTypes): void {\n        this.component = component;\n        this.setRendererDetails();\n    }\n\n    private setRendererDetails() : void {\n        const componentMeta = this.getComponent();\n        const userComponentHandler = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_HANDLER) as ListUserComponentHandlerType;\n        const componentDetails     = this.getRendererDetails(componentMeta, userComponentHandler);\n        this.component.setRenderDetails(componentDetails);\n    }\n\n    private getComponent() : ComponentRendererTypes {\n        return {\n            getRenderer : () => this.getRenderer(),\n            getRendererParams : () => this.getRendererParams()\n        }\n    }\n}","export const LIST_BEAN_NAME = {\n    LIST_CLASSNAME_GENERATOR : \"lsitClassNameGenerator\",\n    LIST_DATA_STORE : 'listDataStore',\n    HOOK_MANAGER : 'hookManager',\n    LIST_SELECTION : 'listSelection',\n    LIST_API : 'listAPI'\n}","import { HeaderFooterCoreController } from \"../Core/HeaderFooterCore-controller\";\nimport { ListUserComponentHandlerType } from \"../Model/list-user-component-handler.types\";\nimport { ComponentRendererTypes, HeaderFooterCoreComponentWrapperTypes } from \"../Core/HeaderFooterCore.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ListOptionHandlerTypes } from \"../Model/list-option-handler.types\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../Model/classname-generator.types\";\nimport { HeaderRendererParams, HeaderRendererType } from \"../../../List-configuration\";\n\nexport class HeaderController extends HeaderFooterCoreController {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ListOptionHandlerTypes;\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !:getBeanInstanceByBeanName;\n\n    setComponent(component: HeaderFooterCoreComponentWrapperTypes): void {\n        super.setComponent(component);\n        this.addClassNames();\n\n    }\n\n    private addClassNames() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getClassName('header-container', [])\n        this.component.addOrRemoveCssClass(className, true);\n    }\n\n    getRenderer(): (new () => HeaderRendererType<HeaderRendererParams>) | undefined {\n        return this.optionHandler.getHeaderRenderer();\n    }\n\n    getRendererDetails(component: ComponentRendererTypes, userComponentHandler: ListUserComponentHandlerType): IComponentDetails | undefined {\n        return userComponentHandler.getHeaderRendererDetails(component, {});\n    }\n\n    getRendererParams() : Object | undefined{\n        return this.optionHandler.getHeaderRendererParams();\n    }\n}","import { HeaderFooterCoreComponent } from \"../Core/HeaderFooterCore-view\";\nimport { HeaderController } from \"./header-controller\";\nexport class HeaderComponent extends HeaderFooterCoreComponent<HeaderController> {\n    getTemplate(): HTMLElement {\n        return document.createElement('div');\n    }\n    getController(): new () => HeaderController {\n        return HeaderController;\n    }\n\n}","import { HeaderFooterCoreController } from \"../Core/HeaderFooterCore-controller\";\nimport { ListUserComponentHandlerType } from \"../Model/list-user-component-handler.types\";\nimport { ComponentRendererTypes, HeaderFooterCoreComponentWrapperTypes } from \"../Core/HeaderFooterCore.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ListOptionHandlerTypes } from \"../Model/list-option-handler.types\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../Model/classname-generator.types\";\nimport { FooterRendererParams, FooterRendererType } from \"../../../List-configuration\";\n\nexport class FooterController extends HeaderFooterCoreController {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ListOptionHandlerTypes;\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !:getBeanInstanceByBeanName;\n    \n    setComponent(component: HeaderFooterCoreComponentWrapperTypes): void {\n        super.setComponent(component);\n        this.addClassNames();\n\n    }\n\n    private addClassNames() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getClassName('footer-container', [])\n        this.component.addOrRemoveCssClass(className, true);\n    }\n    \n    getRenderer(): (new () => FooterRendererType<FooterRendererParams>) | undefined {\n        return this.optionHandler.getFooterRenderer();\n    }\n\n    getRendererDetails(component: ComponentRendererTypes, userComponentHandler: ListUserComponentHandlerType): IComponentDetails | undefined {\n        return userComponentHandler.getFooterRendererDetails(component, {});\n    }\n\n    getRendererParams() : Object | undefined{\n        return this.optionHandler.getFooterRendererParams();\n    }\n}","import { HeaderFooterCoreComponent } from \"../Core/HeaderFooterCore-view\";\nimport { FooterController } from \"./footer-controller\";\n\nexport class FooterComponent extends HeaderFooterCoreComponent<FooterController> {\n    getTemplate(): HTMLElement {\n        return document.createElement('div');\n    }\n    getController(): new () => FooterController {\n        return FooterController;\n    }\n\n}","export class ListCSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        ListCSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return ListCSSRegistry.nameSpaces;\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ClassNameGeneratorType } from \"./classname-generator.types\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { ListCSSRegistry } from \"../../Modules/CSSRegistry\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\n\n@Bean(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR)\nexport class ListClassNameGenerator extends EventEmitter implements ClassNameGeneratorType {\n    getClassName( element?: string | string[] | undefined, modifier?: string[] | { [key: string]: boolean } ): string {\n        return this.getClass('dropdown', element, modifier);\n    }\n    \n    getTabClassName(element?: string | string[], modifier?: string[] | { [key: string]: boolean; }): string {\n        return this.getClass('tab', element, modifier);\n    }\n\n    private getClass(block ?: string, element?: string | string[], modifier?: string[] | { [key: string]: boolean; }) : string {\n        const nameSpaces = ListCSSRegistry.getNameSpaces();\n        const globalNameSpace: string[] = Array.isArray(nameSpaces) ? nameSpaces : [nameSpaces ?? \"dg\"];\n    \n        let className = globalNameSpace.join('-') + (block ? `-${block}` : \"\");\n    \n        if (element) {\n            const elements = Array.isArray(element) ? element : [element];\n            className += elements.map(el => `__${el}`).join('');\n        }\n    \n        if (modifier) {\n            if (Array.isArray(modifier)) {\n                className += modifier.map(mod => `--${mod}`).join('');\n            } else {\n                const modifierClasses = Object.entries(modifier)\n                    .filter(([_, isActive]) => isActive)\n                    .map(([key]) => `--${key}`);\n                className += modifierClasses.join('');\n            }\n        }\n    \n        return className;\n    }\n}   ","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TabOptionComponentWrapperType, TabOptionControllerType } from \"./tab-option.types\";\nimport { TabOption } from \"../../../../List-configuration\";\nimport { BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { LIST_BEAN_NAME } from \"../../../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../../Model/classname-generator.types\";\nimport { TabPanelDataPartTypes } from \"../TabPanelDataPart.types\";\nimport type { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\n\nexport class TabOptionController extends EventEmitter implements TabOptionControllerType {\n    private component !                : TabOptionComponentWrapperType;\n    private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    private options : TabOption;\n    constructor(option : TabOption, getBeanInstanceByBeanName : getBeanInstanceByBeanName) {\n        super();\n        this.options                   = option;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n\n    }\n    setComponent(component: TabOptionComponentWrapperType): void {\n        this.component = component;\n        this.addClassName();\n        this.addActiveTabClassName();\n        this.attachListener();\n        this.addValue();\n    }\n\n    private addValue() : void {\n        const element = this.component.getElement();\n        const value = this.options.label;\n        element.textContent = value;\n\n        element.setAttribute('tabIndex', '0');\n    }\n\n    private attachListener() : void {\n        const element = this.component.getElement();\n        element.addEventListener('click', () => {\n            const tabDataPart = this.getBeanInstanceByBeanName(\"tabDataPart\") as TabPanelDataPartTypes;\n            tabDataPart.setActiveTabId(this.options.panelID);\n        })\n\n        const eventHandler = this.getBeanInstanceByBeanName(BEAN_NAME.EVENT_HANDLER) as EventHandler;\n        eventHandler.addEventListener(\"EVENT_ACTIVE_TAB_CHANGED\", this.addActiveTabClassName.bind(this));\n    }\n\n    private addActiveTabClassName() : void {\n        const classNameGenerator = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const tabDataPart = this.getBeanInstanceByBeanName(\"tabDataPart\") as TabPanelDataPartTypes;\n        const className          = classNameGenerator.getTabClassName('list', ['active']);\n        this.component.addOrRemoveCSSClassname(className, tabDataPart.isActiveTabId(this.options.panelID));\n    }\n\n    private addClassName() : void {\n        const classNameGenerator = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className          = classNameGenerator.getTabClassName('list', []);\n        this.component.addOrRemoveCSSClassname(className, true);\n    }\n\n    getOption() : TabOption {\n        return this.options;\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TabContainerComponentWrapperType, TabContainerControllerType } from \"./tab-container.type\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../Model/classname-generator.types\";\nimport { TabPanelDataPartTypes } from \"./TabPanelDataPart.types\";\nimport { TabOptionController } from \"./TabOption/tab-option-controller\";\nimport { TabOptionControllerType } from \"./TabOption/tab-option.types\";\n\nexport class TabContainerController extends EventEmitter implements TabContainerControllerType {\n    \n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !:getBeanInstanceByBeanName;\n\n    @AutoWired('tabDataPart') private tabDataPart !: TabPanelDataPartTypes;\n\n    private component !: TabContainerComponentWrapperType;\n\n    private controllers : TabOptionControllerType[] = [];\n\n\n    setComponent(component: TabContainerComponentWrapperType): void {\n        this.component = component;\n        this.addClassNames();\n        this.addTabOptions();\n        this.attachListener();\n    }\n\n    private addTabOptions() : void {\n        const tabOptions = this.tabDataPart.getTabOptions();\n        tabOptions.forEach((tab) => {\n            const controller = new TabOptionController(tab, this.getBeanInstanceByBeanName);\n            this.controllers.push(controller);\n        })\n\n        this.component.setTabOptionControllers(this.controllers);\n        this.component.addOrRemoveClassName(\"dg-hide\", tabOptions.length <= 0);\n    }\n\n    private addClassNames() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getTabClassName('root', []);\n        this.component.addOrRemoveClassName(className, true);\n\n        const headerClassName = classNameGenerator.getTabClassName('header', []);\n        const headerElement = this.component.getHeaderElement();\n        headerElement.classList.add(headerClassName);\n\n\n        const leftArrowElement = this.component.getLeftElement();\n        const leftArrowNavClassName = classNameGenerator.getTabClassName('nav', []);\n        const leftArrowClassName = classNameGenerator.getTabClassName('nav-left-arrow',[]);\n        leftArrowElement.classList.add(leftArrowNavClassName);\n        leftArrowElement.classList.add(leftArrowClassName);\n\n        const rightArrowElement = this.component.getRightElement();\n        const rightArrowNavClassName = classNameGenerator.getTabClassName('nav', []);\n        const rightArrowClassName = classNameGenerator.getTabClassName('nav-right-arrow',[]);\n        rightArrowElement.classList.add(rightArrowNavClassName);\n        rightArrowElement.classList.add(rightArrowClassName);\n\n        const centerElement = this.component.getCenterElement();\n        const centerClassName = classNameGenerator.getTabClassName('list-parent', []);\n        centerElement.classList.add(centerClassName);\n    }\n\n    private attachListener() : void {\n        const rightElement  = this.component.getRightElement();\n        const leftElement   = this.component.getLeftElement();\n        const centerElement = this.component.getCenterElement();\n\n        rightElement.addEventListener('click', () => this.scrollTab(centerElement, 100));\n        leftElement.addEventListener('click', () => this.scrollTab(centerElement, -100));\n        centerElement.addEventListener('scroll', this.checkScroll.bind(this));\n\n        const resizeObserver = new ResizeObserver(() => {\n            this.checkScroll();\n        })\n\n        resizeObserver.observe(centerElement);\n\n        this.checkScroll();\n    }\n\n    private scrollTab(container : HTMLElement, direction : number) : void {\n        container.scrollBy({ left: direction, behavior: 'smooth' });\n    }\n\n    private checkScroll() : void {\n        const rightElement  = this.component.getRightElement();\n        const leftElement   = this.component.getLeftElement();\n        const centerElement = this.component.getCenterElement();\n\n        const isFullyVisible = centerElement.scrollWidth <= centerElement.clientWidth;\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const leftArrowClassName = classNameGenerator.getTabClassName('nav-arrow',['active']);\n        const rightArrowClassName = classNameGenerator.getTabClassName('nav-arrow',['active']);\n\n        if (isFullyVisible) {\n            leftElement.classList.remove(leftArrowClassName);\n            rightElement.classList.remove(rightArrowClassName);\n        } else {\n            leftElement.classList.toggle(leftArrowClassName, !(centerElement.scrollLeft === 0));\n            rightElement.classList.toggle(rightArrowClassName, !(Math.ceil(centerElement.scrollLeft + centerElement.clientWidth) >= centerElement.scrollWidth));\n        }\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { TabOptionComponentType, TabOptionComponentWrapperType, TabOptionControllerType } from \"./tab-option.types\";\nimport { getBeanInstanceByBeanName } from \"@dg/corecomponent\";\n\nexport class TabOptionComponent extends Component implements TabOptionComponentType {\n    private controller : TabOptionControllerType | null = null;\n    public getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    private parentElement : HTMLElement | null = null\n\n    constructor(parentElement : HTMLElement, controller : TabOptionControllerType, getBeanInstanceByBeanName : getBeanInstanceByBeanName) {\n        super();\n        this.controller                = controller;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n        this.parentElement = parentElement;\n        this.init();\n    }\n\n\n    init() {\n        const component : TabOptionComponentWrapperType = {\n            addOrRemoveCSSClassname: (className : string, force : boolean ) => this.addOrRemoveCssClass(className, force),\n            getElement             : () => this.getGui()\n        }\n\n        this.setTemplate(this.getTemplate());\n        this.controller!.setComponent(component);\n    }\n\n    private getTemplate() : HTMLElement {\n        const labelElement = document.createElement('label');\n        return labelElement;\n    }\n\n    detach(): void {\n        this.parentElement?.removeChild(this.getGui());\n        this.parentElement = null; \n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { TabContainerComponentType, TabContainerComponentWrapperType } from \"./tab-container.type\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { TabContainerController } from \"./tab-container-controller\";\nimport { TabOptionComponentType, TabOptionControllerType } from \"./TabOption/tab-option.types\";\nimport { TabOptionComponent } from \"./TabOption/tab-option-view\";\n\nexport class TabContainerComponent extends Component implements TabContainerComponentType {\n\n    @queryAssignedNodes('leftArrow') private leftArrowElement : HTMLElement | null   = null;\n    @queryAssignedNodes(\"center\") private centerContainer : HTMLElement | null       = null;\n    @queryAssignedNodes(\"rightArrow\") private rightArrowElement : HTMLElement | null = null;\n    @queryAssignedNodes(\"header\") private headerElement : HTMLElement | null         = null;\n\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    private components : TabOptionComponentType[] = [];\n\n\n    @PostConstruct()\n    init() {\n        const component : TabContainerComponentWrapperType = {\n            addOrRemoveClassName: (className : string, force : boolean) => this.addOrRemoveCssClass(className, force),\n            getCenterElement    : () => this.centerContainer!,\n            getElement          : () => this.getGui(),\n            getLeftElement      : () => this.leftArrowElement!,\n            getRightElement     : () => this.rightArrowElement!,\n            getHeaderElement    : ()=> this.headerElement!,\n            setTabOptionControllers : (controllers : TabOptionControllerType[]) => this.setTabOptionControllers(controllers)\n        }\n\n        this.setTemplate(this.getTemplate());\n\n        const controller = this.createManagedBean(new TabContainerController());\n        controller.setComponent(component);\n    }\n\n    private setTabOptionControllers(controllers : TabOptionControllerType[]) : void {\n        const prevComponents = [...this.components];\n        this.components = [];\n\n        controllers.forEach((controller) => {\n            const component = new TabOptionComponent(this.centerContainer! ,controller, this.getBeanInstanceByBeanName);\n            this.components.push(component);\n            this.centerContainer!.appendChild(component.getGui());\n        })\n\n        this.destroyTabs(prevComponents);\n    }\n\n    private destroyTabs(component: TabOptionComponentType[]): void {\n        component.forEach(comp => {\n            if (!comp) { return; }\n            comp.detach();\n        });\n    }\n\n\n    private getTemplate() : HTMLElement {\n        const headerContainer = document.createElement('div');\n        headerContainer.setAttribute('ref', \"header\");\n\n        const leftArrow = document.createElement('div');\n        leftArrow.setAttribute(\"ref\", \"leftArrow\");\n\n        const leftArrowSVG = this.createLeftSvgElement();\n        leftArrow.appendChild(leftArrowSVG)\n\n        const rightArrow = document.createElement('div');\n        rightArrow.setAttribute(\"ref\", \"rightArrow\");\n\n        const rightArrowSVG = this.createRightSvgElement();\n\n        rightArrow.appendChild(rightArrowSVG);\n\n        const centerContainer = document.createElement('div');\n        centerContainer.setAttribute(\"ref\", \"center\");\n\n        const div = document.createElement(\"div\");\n        headerContainer.appendChild(leftArrow);\n        headerContainer.appendChild(centerContainer);\n        headerContainer.appendChild(rightArrow);\n\n        div.appendChild(headerContainer);\n        return div;\n    }\n\n    private createRightSvgElement() {\n        const svgNS = \"http://www.w3.org/2000/svg\";\n      \n        // Create SVG element\n        const svg = document.createElementNS(svgNS, \"svg\");\n        svg.setAttribute(\"width\", \"14\");\n        svg.setAttribute(\"height\", \"14\");\n        svg.setAttribute(\"viewBox\", \"-3 0 11 11\");\n      \n        // Create G element\n        const g = document.createElementNS(svgNS, \"g\");\n        g.setAttribute(\"data-name\", \"Layer 2\");\n      \n        // Create Path element\n        const path = document.createElementNS(svgNS, \"path\");\n        path.setAttribute(\"d\", \"M5.35 4.12L1.49.25a.89.89 0 00-1.23 0 .88.88 0 000 1.24l3.31 3.32L.26 8.12a.87.87 0 00-.26.62.84.84 0 00.26.62.84.84 0 00.62.26.83.83 0 00.61-.26L5.35 5.5a.83.83 0 00.26-.61v-.16a.83.83 0 00-.26-.61z\");\n        path.setAttribute(\"fill\", \"\");\n        path.setAttribute(\"data-name\", \"Layer 1\");\n      \n        // Append to DOM\n        g.appendChild(path);\n        svg.appendChild(g);\n      \n        return svg;\n      }\n\n      private  createLeftSvgElement() {\n        const svgNS = \"http://www.w3.org/2000/svg\";\n      \n        const svg = document.createElementNS(svgNS, \"svg\");\n        svg.setAttribute(\"width\", \"14\");\n        svg.setAttribute(\"height\", \"14\");\n        svg.setAttribute(\"viewBox\", \"-3 0 11 11\");\n      \n        const g = document.createElementNS(svgNS, \"g\");\n        g.setAttribute(\"data-name\", \"Layer 2\");\n      \n        const path = document.createElementNS(svgNS, \"path\");\n        path.setAttribute(\n          \"d\",\n          \"M5.35 4.12L1.49.25a.89.89 0 00-1.23 0 .88.88 0 000 1.24l3.31 3.32L.26 8.12a.87.87 0 00-.26.62.84.84 0 00.26.62.84.84 0 00.62.26.83.83 0 00.61-.26L5.35 5.5a.83.83 0 00.26-.61v-.16a.83.83 0 00-.26-.61z\"\n        );\n        path.setAttribute(\"fill\", \"currentColor\");\n        path.setAttribute(\"data-name\", \"Layer 1\");\n      \n        g.appendChild(path);\n        svg.appendChild(g);\n      \n        return svg;\n      }\n            \n      \n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TabIdChangeHookParams, TabPanelDataPartTypes } from \"./TabPanelDataPart.types\";\nimport { AutoWired, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { TabOption } from \"../../../List-configuration\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { HookManagerType } from \"../Model/hook-manager.types\";\nimport { HookEventsName } from \"../../Constants/HookEventNames\";\n\n@Bean('tabDataPart')\nexport class TabPanelDataPart extends EventEmitter implements TabPanelDataPartTypes {\n    @AutoWired(LIST_BEAN_NAME.HOOK_MANAGER) private hookManager !: HookManagerType;\n    private activeTabPanelId : string | null = null;\n\n    @PostConstruct()\n    init() {\n        this.activeTabPanelId = this.optionsHandler.getActiveTab();\n    }\n\n    getActiveTabId(): string | null {\n        return this.activeTabPanelId;\n    }\n\n    getTabOptions(): TabOption[] {\n        return this.optionsHandler.getTabs();\n    }\n\n    setActiveTabId(tabId: string): void {\n        const hookParams = this.createTabChangeHookParams(tabId);\n        const callBack = (params : TabIdChangeHookParams) => {\n            this.activeTabPanelId = params.newTabId;\n            this.dispatchEvent({\n                type : \"EVENT_ACTIVE_TAB_CHANGED\"\n            })\n        }\n\n        this.hookManager.executeHook(HookEventsName.onBeforeTabChange, HookEventsName.onAfterTabChange, callBack, hookParams);\n        \n    }\n\n    isActiveTabId(tabId: string): boolean {\n        return this.activeTabPanelId === tabId;\n    }\n\n    private createTabChangeHookParams(tabId : string) : TabIdChangeHookParams {\n        return {\n            newTabId: tabId,\n            oldTabId: this.activeTabPanelId\n        }\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListOptionComponentWrapperType, ListOptionControllerType, OptionRendererParams } from \"./list-option.types\";\nimport { BEAN_NAME, getBeanInstanceByBeanName, setAriaLabel, setAriaRole, setAriaSelected } from \"@dg/corecomponent\";\nimport { ListOptionNodeType } from \"../../Model/list-option-node.types\";\nimport { ListUserComponentHandlerType } from \"../../Model/list-user-component-handler.types\";\nimport { ListOptionHandlerTypes } from \"../../Model/list-option-handler.types\";\nimport { LIST_BEAN_NAME } from \"../../../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../../Model/classname-generator.types\";\nimport { ListSelectionType } from \"../../Model/list-selection.types\";\nimport { HighlightCallback, highlightKeyword } from \"../../../utility/HighlightKeyword\";\nimport { ListDataStoreType } from \"../../Model/list-data-store.types\";\nimport { Tooltip } from \"../../../../../Tooltip/src/Tooltip\";\nimport { ListTooltipHandlerType } from \"../../Model/list-tooltip-handler.types\";\nimport { ListClassNameGenerator } from \"../../Model/classname-generator\";\n\nexport class ListOptionController extends EventEmitter implements ListOptionControllerType {\n    private option                   : ListOptionNodeType;\n    private getBeanInstanceByBeanName: getBeanInstanceByBeanName;\n    private component !              : ListOptionComponentWrapperType;\n    private instanceID               : string;\n\n    private tokenTooltip : Tooltip | null = null;\n\n    constructor(option : ListOptionNodeType, getBeanInstanceByBeanName :getBeanInstanceByBeanName) {\n        super();\n        this.option                    = option;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n        this.instanceID = this.generateID();\n    }\n\n    private generateID(): string {\n\t\treturn `${this.option.getId()}`;\n\t}\n\n    setComponent(component: ListOptionComponentWrapperType): void {\n        this.component = component;\n        this.updateValue();\n        this.addClassName();\n        this.onSelectionChanged();\n        this.setAriaAttributes();\n        this.attachListener();\n        this.addColorProperty();\n        this.addDisabledClassName();\n    }\n\n    public disableTooltip() : void {\n        if (!this.tokenTooltip) { return; }\n\n        this.tokenTooltip.api.destroy();\n        this.tokenTooltip = null;\n    }\n\n    public enableTooltip(element ?: HTMLElement, value ?: string) : void {\n        const tokenTooltipHandler = this.getBeanInstanceByBeanName('listTooltipHandler') as ListTooltipHandlerType\n        const tooltipElement = element !== null ? element : this.component.getElement();\n        this.tokenTooltip = tokenTooltipHandler.registerTooltip(this.option, tooltipElement!, value!);\n    }\n\n    public registerTooltip(element ?: HTMLElement, value ?: string) : void {\n        this.disableTooltip();\n        this.enableTooltip(element, value);\n        this.addDestroyFunc(() => this.disableTooltip());\n    }\n\n    private attachListener() : void {\n        const element = this.component.getElement();\n        const listSelection = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_SELECTION) as ListSelectionType;\n        const optionHandler        = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ListOptionHandlerTypes;\n\n        element && element.addEventListener('click', (ev : Event) => {\n            const isSelected           = this.isSelected();\n            const id                   = this.option.getId();\n            const isDisableOnSelection = optionHandler.isDisableOnSelection();\n            const isDisabled           = this.option.isDisabled();\n            if(isDisabled) {\n                return;\n            }\n            isSelected ? (!isDisableOnSelection && listSelection.removeSelectedValues([id], {eventOrigin : 'ui', event : ev, suppressEventTrigger : false})): listSelection.addSelectedValues([id], {eventOrigin : 'ui', event : ev, suppressEventTrigger : false});\n        })\n    }\n\n    private setAriaAttributes() {\n        const element = this.component.getElement();\n        setAriaRole(element ,'option');\n        setAriaLabel(element,this.option.getValue() ?? '');\n        element.setAttribute('tabIndex', '-1');\n    }\n\n    public onSelectionChanged() : void {\n        const isSelected    = this.isSelected();\n        const element       = this.component.getElement();\n        setAriaSelected(element, isSelected);\n        const classNameGenerator = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getClassName('option', ['selected'])\n        this.component.addOrRemoveCssClass(className, isSelected);\n    }\n\n    private isSelected() : boolean {\n        const listSelection = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_SELECTION) as ListSelectionType;\n        const id            = this.option.getId();\n        return listSelection.isSelected(id);\n    }\n\n    private addClassName() : void {\n        const classNameGenerator = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getClassName('option');\n        this.component.addOrRemoveCssClass(className, true);\n    }\n\n    private updateValue() : void {\n        const params               = this.createOptionRendererParams();\n        const userComponentHandler = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_HANDLER) as ListUserComponentHandlerType;\n        const optionHandler        = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ListOptionHandlerTypes;\n        this.option\n        let componentDetails ;\n        if(this.option.isLoaded()) {\n            componentDetails     = userComponentHandler.getOptionRendererDetails(optionHandler, params, this.option.getType());\n        }else {\n            componentDetails     = userComponentHandler.getOptionLoadingRendererDetails(optionHandler, params);\n        }\n        this.component.setRendererDetails(componentDetails);\n    }\n\n     private createOptionRendererParams() : OptionRendererParams {\n        const dataStore = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_DATA_STORE) as ListDataStoreType;\n            return{\n                value   : this.option.getValue(),\n                option  : this.option,\n                optionId: this.option.getId(),\n                data    : this.option.getData(),\n                color   : this.option.getColor(),\n                imageURL: this.option.getImageURL(),\n                loaded  : this.option.isLoaded(),\n                get selected() {\n                    return true;\n                },\n                getHighlightKeywordElement : (data : string, highlightKeywordCallback ?: HighlightCallback) => {\n                    const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ListOptionHandlerTypes;\n                    const isHighlightKeyword = optionHandler.getSearchHighlightKeyword();\n                    const value = isHighlightKeyword ? dataStore.getSearchQuery()! : ''\n                    return highlightKeyword(data,value , highlightKeywordCallback);\n                },\n                registerTooltip      : this.registerTooltip.bind(this),\n            }\n        }\n\n    getInstanceID() : string {\n        return this.instanceID;\n    }\n\n    destroy(): void {\n        super.destroy();    \n    }\n\n    public addColorProperty() : void {\n        const element = this.component.getElement();\n        const color = this.option.getColor();\n        color && element && element.style.setProperty('--dropdown-option-bg-color', color);\n    }\n\n    private addDisabledClassName() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ListClassNameGenerator;\n        const isDisabled    = this.option.isDisabled();\n        const validationClassName = classNameGenerator.getClassName('element', ['disabled'])\n        this.component.addOrRemoveCssClass(validationClassName, isDisabled);\n    }\n}","export type HighlightCallback = (info: { text: string; bold: boolean }) => Node;\n\nexport function highlightKeyword( value: string, keyword: string, callback?: HighlightCallback, ): DocumentFragment {\n\tconst fragment = document.createDocumentFragment();\n\tconst keywordLower = keyword.toLowerCase();\n\tlet keywordIndex = 0;\n\n\tlet currentText = '';\n\tlet currentBold = false;\n\n\tconst flush = () => {\n\t\tif (!currentText) return;\n\n\t\tif (callback) {\n\t\t\tconst node = callback({ text: currentText, bold: currentBold });\n\t\t\tif (node instanceof Node) {\n\t\t\t\tfragment.appendChild(node);\n\t\t\t}\n\t\t} else {\n\t\t\tif (currentBold) {\n\t\t\t\tconst span = document.createElement('span');\n\t\t\t\tspan.textContent = currentText;\n\t\t\t\tspan.style.fontWeight = 'bold';\n\t\t\t\tfragment.appendChild(span);\n\t\t\t} else {\n\t\t\t\tfragment.appendChild(document.createTextNode(currentText));\n\t\t\t}\n\t\t}\n\n\t\tcurrentText = '';\n\t};\n\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst char = value[i];\n\t\tconst isMatch =\n\t\t\tkeywordIndex < keywordLower.length &&\n\t\t\tchar.toLowerCase() === keywordLower[keywordIndex];\n\n\t\tif (isMatch) {\n\t\t\tif (!currentBold) flush();\n\t\t\tcurrentBold = true;\n\t\t\tcurrentText += char;\n\t\t\tkeywordIndex++;\n\t\t} else {\n\t\t\tif (currentBold) flush();\n\t\t\tcurrentBold = false;\n\t\t\tcurrentText += char;\n\t\t}\n\t}\n\n\tflush();\n\n\treturn fragment;\n}\n","import { IGenericDataStore } from \"./generic-data-store.types\";\n\nexport class GenericDataStore<T> implements IGenericDataStore<T> {\n    private dataMap: Map<string, T>;\n    private order: string[];\n  \n    constructor() {\n      this.dataMap = new Map();\n      this.order = [];\n    }\n  \n    /**\n     * Add a new data item to the store.\n     * @param id - Unique identifier for the data item.\n     * @param data - Data item to store.\n     */\n    addData(id: string, data: T): void {\n      if (!this.dataMap.has(id)) {\n        this.dataMap.set(id, data);\n        this.order.push(id);\n      }\n    }\n  \n    /**\n     * Retrieve a data item by its ID.\n     * @param id - The ID of the data item.\n     */\n    getData(id: string): T | undefined {\n      return this.dataMap.get(id);\n    }\n  \n    /**\n     * Remove a data item by its ID.\n     * @param id - The ID of the data item to remove.\n     * @returns True if the data was removed, false otherwise.\n     */\n    removeData(id: string): boolean {\n      if (this.dataMap.has(id)) {\n        this.dataMap.delete(id);\n        this.order = this.order.filter((orderId) => orderId !== id);\n        return true;\n      }\n      return false;\n    }\n  \n    /**\n     * Check if a data item exists in the store.\n     * @param id - The ID to check.\n     */\n    hasData(id: string): boolean {\n      return this.dataMap.has(id);\n    }\n  \n    /**\n     * Get all data items in order.\n     */\n    getAllData(): T[] {\n      return this.order.map((id) => this.dataMap.get(id)!) as T[];\n    }\n  \n    /**\n     * Insert a new data item after an existing one.\n     * @param existingId - The ID of the existing data item.\n     * @param newId - The ID of the new data item.\n     * @param newData - The new data item.\n     */\n    insertDataAfterId(existingId: string, newId: string, newData: T): boolean {\n      const index = this.order.indexOf(existingId);\n      if (index === -1 || this.dataMap.has(newId)) {\n        return false;\n      }\n  \n      this.order.splice(index + 1, 0, newId);\n      this.dataMap.set(newId, newData);\n      return true;\n    }\n  \n    /**\n     * Insert a new data item before an existing one.\n     * @param existingId - The ID of the existing data item.\n     * @param newId - The ID of the new data item.\n     * @param newData - The new data item.\n     */\n    insertDataBeforeId(existingId: string, newId: string, newData: T): boolean {\n      const index = this.order.indexOf(existingId);\n      if (index === -1 || this.dataMap.has(newId)) {\n        return false;\n      }\n  \n      this.order.splice(index, 0, newId);\n      this.dataMap.set(newId, newData);\n      return true;\n    }\n  \n    /**\n     * Delete all data items after a specific ID.\n     * @param id - The ID after which data items should be deleted.\n     */\n    deleteDataAfterId(id: string): void {\n      const index = this.order.indexOf(id);\n      if (index !== -1 && index < this.order.length - 1) {\n        const idsToDelete = this.order.splice(index + 1);\n        idsToDelete.forEach((deleteId) => this.dataMap.delete(deleteId));\n      }\n    }\n  \n    /**\n     * Delete all data items before a specific ID.\n     * @param id - The ID before which data items should be deleted.\n     */\n    deleteDataBeforeId(id: string): void {\n      const index = this.order.indexOf(id);\n      if (index !== -1 && index > 0) {\n        const idsToDelete = this.order.splice(0, index);\n        idsToDelete.forEach((deleteId) => this.dataMap.delete(deleteId));\n      }\n    }\n  \n    /**\n     * Retrieve data items within a range of indices.\n     * @param fromIndex - The start index (inclusive).\n     * @param toIndex - The end index (inclusive).\n     */\n    getDataInRange(fromIndex: number, toIndex: number): T[] {\n      if (fromIndex < 0 || toIndex >= this.order.length || fromIndex > toIndex) {\n        return [];\n      }\n  \n      const idsInRange = this.order.slice(fromIndex, toIndex + 1);\n      return idsInRange.map((id) => this.dataMap.get(id)!) as T[];\n    }\n\n    getNextId(id: string): string | null {\n        let index = this.order.findIndex((existingId) => existingId === id);\n    \n        if (index !== -1) {\n            \n            if (index + 1 < this.order.length) {\n                return this.order[index + 1]; \n            }\n        }\n    \n        return null; \n    }\n\n    getPreviousId(id: string): string | null {\n        let index = this.order.findIndex((existingId) => existingId === id);\n    \n        if (index > 0) {\n            return this.order[index - 1]; \n        }\n    \n        return null; \n    }\n\n    getFirstId(): string | null {\n        if (this.order.length > 0) {\n            return this.order[0]; \n        }\n    \n        return null; \n    }\n\n    getLastId(): string | null {\n        if (this.order.length > 0) {\n            return this.order[this.order.length - 1]; \n        }\n    \n        return null; \n    }\n\n    getLength() : number {\n      return this.order.length;\n    }\n  }\n  ","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListBodyContainerComponentWrapperType, ListBodyContainerControllerType } from \"./list-body-container.types\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ClassNameGeneratorType } from \"../Model/classname-generator.types\";\nimport { ListDataStoreType } from \"../Model/list-data-store.types\";\nimport { ListOptionController } from \"./List-Option/list-option-controller\";\nimport { ListOptionControllerType } from \"./List-Option/list-option.types\";\nimport { ListOptionNodeType } from \"../Model/list-option-node.types\";\nimport { IGenericDataStore } from \"../Model/generic-data-store.types\";\nimport { GenericDataStore } from \"../Model/generic-data-store\";\nimport { ListUserComponentHandlerType } from \"../Model/list-user-component-handler.types\";\nimport { ListOptionHandlerTypes } from \"../Model/list-option-handler.types\";\nimport { TabPanelDataPartTypes } from \"../Tab/TabPanelDataPart.types\";\nimport { NotFoundRendererParams } from \"../../../List-configuration\";\n\nexport class ListBodyContainerController extends EventEmitter implements ListBodyContainerControllerType {\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    private    component !                                           : ListBodyContainerComponentWrapperType;\n    private    controllers                                           : IGenericDataStore<ListOptionControllerType> = new GenericDataStore();\n    private    loadingControllers                                    : IGenericDataStore<ListOptionControllerType> = new GenericDataStore();\n\n    setComponent(component: ListBodyContainerComponentWrapperType): void {\n        this.component = component;\n        this.addClassName();\n        this.attachListener();\n    }\n\n    private addClassName() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getClassName('options-listbox', []);\n        this.component.addOrRemoveCSSClass(className, true);\n    }\n\n    private attachListener() : void {\n        const infiniteScroll = this.optionsHandler.isInfiniteScroll();\n        if(infiniteScroll) {\n            const element = this.component.getElement();\n            element.addEventListener('scroll', () => {\n                const { scrollTop, scrollHeight, clientHeight } = element;\n\n                if (scrollTop + clientHeight >= scrollHeight - 100) {\n                    this.dispatchEvent({\n                        type : \"EVENT_TRIGGER_FETCH\"\n                    })\n                }\n            });\n        }\n        \n\n        this.addListener(this.eventHandler, 'EVENT_FETCH_TRIGGERED', (params) => {\n            const {loaded} = params;\n            const listDataStore = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_DATA_STORE) as ListDataStoreType;\n            \n            if(!loaded) {\n                this.destroyNoOptionFoundRenderer();\n                const loadingRows = listDataStore.getLoadingRows();\n                loadingRows.forEach(rows => {\n                    const controller = new ListOptionController(rows, this.getBeanInstanceByBeanName);\n                    this.loadingControllers.addData(controller.getInstanceID(), controller);\n                });\n\n                this.component.setControllers(this.loadingControllers.getAllData(), true);\n            }\n        })\n\n        this.addListener(this.eventHandler, 'EVENT_DATA_LOADED', (params) => {\n            const options = params.nodes\n            this.destroyLoadingControllers();\n            this.destroyNoOptionFoundRenderer();\n            let controllers : ListOptionControllerType[] = [];\n\n            options.forEach((rows : ListOptionNodeType) => {\n                const controller = new ListOptionController(rows, this.getBeanInstanceByBeanName);\n                this.controllers.addData(controller.getInstanceID(), controller);\n                controllers.push(controller);\n            });\n\n            this.component.setControllers(controllers, false);\n\n            this.attachItemNotFoundComponent();\n\n        })\n\n        this.dispatchEvent({\n            type : \"EVENT_TRIGGER_FETCH\"\n        });\n\n        this.addListener(this.eventHandler, 'EVENT_CACHE_UPDATED', () => {\n            this.destroyControllers();\n            this.destroyLoadingControllers();\n        })\n\n        this.addListener(this.eventHandler, 'EVENT_SELECTION_CHANGED', (params) => {\n            const values = params.values as string[];\n            values.forEach(value => {\n                const controller = this.controllers.getData(value);\n                controller?.onSelectionChanged();\n            })\n        })\n\n\n    }\n\n    private attachItemNotFoundComponent() : void {\n        const userComponentHandler = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_HANDLER) as ListUserComponentHandlerType;\n        const optionHandler        = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ListOptionHandlerTypes;\n        let componentDetails ;\n        if(this.controllers.getLength() <= 0) {\n            const tabDataPart = this.getBeanInstanceByBeanName('tabDataPart') as TabPanelDataPartTypes;\n            const listDataStore = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_DATA_STORE) as ListDataStoreType;\n\n            componentDetails     = userComponentHandler.getNotFoundRendererDetails(optionHandler, {\n                tabId: tabDataPart.getActiveTabId(),\n                query: listDataStore.getSearchQuery()\n            } as NotFoundRendererParams);\n        }\n        this.component.setNoOptionFoundRendererDetails(componentDetails);\n    }\n\n    private destroyNoOptionFoundRenderer() {\n        this.component.setNoOptionFoundRendererDetails(undefined);\n    }\n\n    private destroyControllers() : void {\n        const controllers = this.controllers.getAllData();\n        controllers.forEach((controller) => {\n            controller.destroy();\n        })\n\n        this.component.destroyControllers(controllers);\n\n        this.controllers = new GenericDataStore();\n    }\n\n    private destroyLoadingControllers() : void {\n        const controllers = this.loadingControllers.getAllData();\n        controllers.forEach((controller) => {\n            controller.destroy();\n        })\n\n        this.component.destroyControllers(controllers);\n\n        this.loadingControllers = new GenericDataStore();\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { ListOptionComponentType, ListOptionComponentWrapperType, ListOptionControllerType, OptionRendererParams } from \"./list-option.types\";\nimport { BEAN_NAME, clearElement, getBeanInstanceByBeanName, removeFromParent } from \"@dg/corecomponent\";\nimport { IComponentDetails } from \"../../../../../utility/component-detail.types\";\nimport { OptionRendererType } from \"../../../../List-configuration\";\n\nexport class ListOptionComponent extends Component implements ListOptionComponentType {\n    private controller                 : ListOptionControllerType;\n    private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    private parentElement              : HTMLElement | null = null;\n    private optionRenderer :OptionRendererType<OptionRendererParams> | null = null;\n    private optionRendererElement : HTMLElement | null = null;\n    constructor(parentElement : HTMLElement, controller : ListOptionControllerType , getBeanInstanceByBeanName :getBeanInstanceByBeanName) {\n        super();\n        this.controller                = controller;\n        this.parentElement             = parentElement;\n        this.getBeanInstanceByBeanName = getBeanInstanceByBeanName;\n        this.init();\n    }\n\n    private init() {\n        const component : ListOptionComponentWrapperType = {\n            addOrRemoveCssClass : (className : string, force : boolean) => this.addOrRemoveCssClass(className, force),\n            getElement : () => this.getGui(),\n            setRendererDetails : (component : IComponentDetails | undefined) => this.setRendererDetails(component),\n        }\n\n        this.setTemplate(this.getTemplate());\n\n        this.controller.setComponent(component);\n    }\n\n    private getTemplate() : HTMLElement {\n        const div = document.createElement('div');\n        return div;\n    }\n\n    detach() : void {\n        this.parentElement?.removeChild(this.getGui());\n        this.parentElement = null; \n    }\n\n    private setRendererDetails(component : IComponentDetails | undefined) : void {\n        if (component) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = component.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n    }\n\n    private destroyRenderer(): void {\n        const context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n\t\tthis.optionRenderer = context.destroyBean(this.optionRenderer);\n\t\tremoveFromParent(this.optionRendererElement);\n\t\tthis.optionRendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.optionRenderer = renderer;\n\t\tthis.optionRendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.optionRendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.optionRendererElement)\n\t\t}\n\t}\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { ListBodyContainerComponentType, ListBodyContainerComponentWrapperType } from \"./list-body-container.types\";\nimport { AutoWired, BEAN_NAME, clearElement, getBeanInstanceByBeanName, PostConstruct, removeFromParent } from \"@dg/corecomponent\";\nimport { ListBodyContainerController } from \"./list-body-container-controller\";\nimport { ListOptionComponentType, ListOptionControllerType } from \"./List-Option/list-option.types\";\nimport { ListOptionComponent } from \"./List-Option/list-option-view\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { IComponent } from \"@dg/corecomponent/FrameWork/Interface/IComponent\";\n\nexport class ListBodyContainerComponent extends Component implements ListBodyContainerComponentType {\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !:getBeanInstanceByBeanName;\n\n    private components : { [key : string] : ListOptionComponentType }  = {};\n    private loadingComponents : { [key : string] : ListOptionComponentType }  = {};\n\n    private notFoundRenderer : IComponent<any> | null = null\n    private notFoundElement : HTMLElement | null = null;\n    @PostConstruct()\n    init() {\n        const component : ListBodyContainerComponentWrapperType = {\n            addOrRemoveCSSClass: (className : string, force : boolean) => this.addOrRemoveCssClass(className, force),\n            setControllers     : (controllers : ListOptionControllerType[], loading : boolean) => this.setControllers(controllers, loading),\n            getElement         : ()=> this.getGui(),\n            destroyControllers : (controllers : ListOptionControllerType[]) => this.destroyControllers(controllers),\n            setNoOptionFoundRendererDetails : (componentDetails : IComponentDetails | undefined) => this.setNoOptionFoundRendererDetails(componentDetails)\n        }\n\n        this.setTemplate(this.getTemplate());\n        const controller = this.createManagedBean(new ListBodyContainerController());\n        controller.setComponent(component);\n    }\n\n    private setNoOptionFoundRendererDetails(componentDetails : IComponentDetails | undefined) : void {\n        if (componentDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = componentDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n            this.destroyRenderer();\n        }\n    }\n\n    private destroyRenderer(): void {\n        const context = this.getBeanInstanceByBeanName(BEAN_NAME.CONTEXT);\n\t\tthis.notFoundRenderer = context.destroyBean(this.notFoundRenderer);\n\t\tremoveFromParent(this.notFoundElement);\n\t\tthis.notFoundElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.notFoundRenderer = renderer;\n\t\tthis.notFoundElement = renderer.getElement?.() ?? null;\n\t\tif (this.notFoundElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.notFoundElement)\n\t\t}\n\t}\n\n    \n    private setControllers(controllers : ListOptionControllerType[], loading : boolean) : void {\n        const components = loading ? this.loadingComponents : this.components\n\n        controllers.forEach((controller) => {\n            const component = new ListOptionComponent(this.getGui(), controller, this.getBeanInstanceByBeanName);\n            components[controller.getInstanceID()] = component;\n            this.getGui()!.appendChild(component.getGui());\n        })\n\n    }\n\n    private destroyControllers(controllers : ListOptionControllerType[]) : void {\n        controllers.forEach((controller) => {\n            const component        = this.components[controller.getInstanceID()];\n            const loadingComponent = this.loadingComponents[controller.getInstanceID()];\n\n            if(component) {\n                component.detach();\n            }\n\n            if(loadingComponent) {\n                loadingComponent.detach();\n            }\n        })\n    }\n\n    private getTemplate() : HTMLElement {\n        return document.createElement('div');\n    }\n}","import { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { OptionRendererType } from \"../../List-configuration\";\nimport { OptionRendererParams } from \"../Component/Body/List-Option/list-option.types\";\nimport { LIST_BEAN_NAME } from \"../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../Component/Model/classname-generator.types\";\n\nexport class OptionRenderer implements OptionRendererType<OptionRendererParams> {\n    private tokenElement: HTMLElement | null = null;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n    init(params: OptionRendererParams): void {\n        \n        const label = document.createElement(\"label\");\n        label.className = this.getClassName('option-label');\n      \n\n        const labelTextDiv = document.createElement(\"div\");\n        labelTextDiv.className = this.getClassName(\"option-label-text\");\n        const highlightDom = params.getHighlightKeywordElement(params.value);\n        labelTextDiv.appendChild(highlightDom);\n      \n        label.appendChild(labelTextDiv);\n      \n    \n        this.tokenElement = label;\n    }\n    \n\n    private getClassName(element?: string | string[], modifier?: string[] | { [key: string]: boolean; }) : string {\n        const classNameGenerator = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        return classNameGenerator.getClassName(element, modifier);\n    }\n\n    getElement(): HTMLElement {\n        return this.tokenElement!;\n    }\n\n    destroy(): void {\n        if (this.tokenElement) {\n            this.tokenElement.remove();\n            this.tokenElement = null;\n        }\n    }\n}\n","\nexport const enum HookEventsName {\n onBeforeSelect    = 'onBeforeSelect',\n onAfterSelect     = 'onAfterSelect',\n onAfterDeSelect   = 'onAfterDeSelect',\n onBeforeDeSelect  = 'onBeforeDeSelect',\n onBeforeTabChange = 'onBeforeTabChange',\n onAfterTabChange  = 'onAfterTabChange',\n onSearchChange    = 'onSearchChange',\n}\n\nexport const HookEventsValues = [\n    HookEventsName.onAfterSelect,\n    HookEventsName.onBeforeSelect,\n    HookEventsName.onAfterDeSelect,\n    HookEventsName.onBeforeDeSelect,\n    HookEventsName.onAfterTabChange,\n    HookEventsName.onBeforeTabChange,\n    HookEventsName.onSearchChange\n]","import { Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { HookEventsName, HookEventsValues } from \"../../Constants/HookEventNames\";\nimport { HookManagerType } from \"./hook-manager.types\";\n\n@Bean(LIST_BEAN_NAME.HOOK_MANAGER)\nclass HookManager extends EventEmitter implements HookManagerType {\n    private hooks : Record<string, CallableFunction> = {};\n\n\n    @PostConstruct()\n    init() {\n        const events = this.optionsHandler.getEvents();\n        const keys = Object.keys(events ?? {});\n        keys.forEach((key : any)=>{\n            const callback = events[key];\n            this.addHook(key, callback);\n        })\n    }\n\n    removeHooks(hookNames: HookEventsName[]): void {\n        hookNames.forEach(hookName=>{\n            delete this.hooks[hookName];\n        });\n    }\n   \n    addHook(hookName : HookEventsName, callback : CallableFunction) {\n        if (this.isValidHook(hookName)) {\n            this.hooks[hookName] = callback;\n        }\n    }\n\n    hasHook(hookName : HookEventsName) : boolean {\n        return this.hooks[hookName] != undefined;\n    }\n\n    getHook(hookName : HookEventsName) : CallableFunction {\n        return this.hooks[hookName];\n    }\n \n    isValidHook(hookName : HookEventsName) : boolean {\n        return HookEventsValues.includes(hookName);\n    }\n\n    executeHook(beforeHook : HookEventsName, afterHook : HookEventsName, middleWare : CallableFunction, metas : Record<string, any>) : boolean {\n        const api = (args : any)=>{\n            middleWare(args);\n            return this.executeAfterHook(afterHook, args);\n        }\n        return this.executeBeforeHook(beforeHook, api, metas);\n\t}\n\n    executeOnHook(hookName : HookEventsName, middleWare : CallableFunction, metas : Record<string, any>) : boolean {\n        return this.executeBeforeHook(hookName, middleWare, metas);\n    }\n\n    executeBeforeHook(hookName : HookEventsName, middleWare : CallableFunction, metas : Record<string, any>) : boolean {\n        const isHookAvailble = this.hasHook(hookName);\n        if (isHookAvailble) {\n            const hookCallback    = this.getHook(hookName);\n            const returnValue = hookCallback(metas);\n            if(returnValue == false) {\n                return false;\n            }\n            else if (typeof returnValue == 'object') {\n                metas = returnValue;\n            } \n            this.dispatchEvent({\n                type : hookName,\n                metas\n            })\n            middleWare(metas);\n            return true;\n        }\n        else{\n            this.dispatchEvent({\n                type : hookName,\n                metas\n            })\n            middleWare(metas);\n            return true;\n        }\n    }\n\n    executeAfterHook(hookName : HookEventsName, metas : Record<string, any>) : boolean {\n        const isHookAvailble = this.hasHook(hookName);\n        if (isHookAvailble) {\n            const hookCallback    = this.getHook(hookName);\n            hookCallback(metas);   \n        }\n        this.dispatchEvent({\n            type : hookName,\n            metas\n        })\n        return true;\n    }\n\n    executeAllHooks(beforeHookName: HookEventsName, onActionHookName: HookEventsName, afterHookName: HookEventsName, middleWare: CallableFunction, metas: Record<string, any>): boolean {\n        const isHookAvailble = this.hasHook(beforeHookName) || this.hasHook(afterHookName) || this.hasHook(onActionHookName);\n        if(isHookAvailble){\n            const beforeCallback = this.getHook(beforeHookName);\n            const returnValue    = beforeCallback?.(metas);\n            if(returnValue == false){\n                return false;\n            }\n            else if (typeof returnValue == 'object') {\n                metas = returnValue;\n            }\n            this.executeHook(onActionHookName, afterHookName, middleWare, metas);\n            return true;\n        }\n        else{\n            this.dispatchEvent({\n                type : beforeHookName,\n                metas\n            })\n            middleWare(metas);\n            return true;\n        }\n    }\n}\n\n\nexport{ HookManager };","import { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\nimport { ListSelectionHookparams, ListSelectionHookWrapperType, ListSelectionType } from './list-selection.types';\nimport { HookManagerType } from './hook-manager.types';\nimport { HookEventsName } from '../../Constants/HookEventNames';\nimport { AutoWired, Bean, PostConstruct } from '@dg/corecomponent';\nimport { LIST_BEAN_NAME } from '../../Constants/ListBeanName';\nimport { HookInitiator, IHookMeta, IListData } from '../../../List-configuration';\nimport { ListDataStoreType } from './list-data-store.types';\n\n@Bean(LIST_BEAN_NAME.LIST_SELECTION)\nexport class ListSelection extends EventEmitter implements ListSelectionType {\n\n    @AutoWired(LIST_BEAN_NAME.HOOK_MANAGER) private hookManager !: HookManagerType;\n    @AutoWired(LIST_BEAN_NAME.LIST_DATA_STORE) private listDataStore !: ListDataStoreType;\n\n\tprivate selectedValues: Set<string> = new Set();\n\n    private selectionHookWrapper !: ListSelectionHookWrapperType;\n\n    @PostConstruct()\n    init() {\n        this.selectionHookWrapper = new ListSelection.ListSelectionHookWrapper(this.hookManager, this.listDataStore);\n        const values = this.optionsHandler.getValues();\n        this.addSelectedValues(values, {\n            suppressEventTrigger : true\n        })\n\n    }\n\n\tgetSelectedValues(): string[] {\n\t\treturn [...this.selectedValues];\n\t}\n\n\taddSelectedValues(values: string[], params : IHookMeta): void {\n        const filteredValues = values.filter((value) => !this.isSelected(value));\n        const callBack = (params : ListSelectionHookparams) => {\n            const values = params.values;\n            values.forEach((value : string) => {\n                if (!this.isSelected(value)) {\n                    this.selectedValues.add(value);\n                }\n            });\n\n            this.dispatchEvent({\n                type : 'EVENT_SELECTION_CHANGED',\n                values\n            })\n        }\n        this.selectionHookWrapper.addSelectedValues(filteredValues, params, callBack);\n\t\t\n\t}\n\n\tremoveSelectedValues(values: string[], params : IHookMeta): void {\n       const filteredValues = values.filter((value) => this.isSelected(value));\n\n        const callBack = (params: ListSelectionHookparams) => {\n            const valuesToRemove = params.values;\n\n            valuesToRemove.forEach((value) => this.selectedValues.delete(value));\n\n            this.dispatchEvent({\n                type: 'EVENT_SELECTION_CHANGED',\n                values: valuesToRemove,\n            });\n        };\n\n        this.selectionHookWrapper.removeSelectedValues(filteredValues, params, callBack);\n\t}\n\n\tisSelected(value: string): boolean {\n\t\treturn this.selectedValues.has(value);\n\t}\n\n    /** @internal */\n    static ListSelectionHookWrapper = class implements ListSelectionHookWrapperType {\n        private hookManager : HookManagerType;\n        private listDataStore : ListDataStoreType;\n        constructor(hookManager : HookManagerType, listDataStore : ListDataStoreType) {\n            this.hookManager = hookManager;\n            this.listDataStore = listDataStore;\n        }\n        addSelectedValues(values : string[], params : IHookMeta, callBack : (params : ListSelectionHookparams) => void) : void {\n            const hookParams = this.createSelectionHookParams(values,params);\n\n            const api = (params : any) => {\n                callBack(params);\n            }\n            !params.suppressEventTrigger ? (values.length > 0) && this.hookManager.executeHook(HookEventsName.onBeforeSelect, HookEventsName.onAfterSelect, api, hookParams) : callBack(hookParams);\n        }\n\n        removeSelectedValues(values : string[], params : IHookMeta, callBack : (params : ListSelectionHookparams) => void) : void {\n            const hookParams = this.createSelectionHookParams(values,params);\n\n            const api = (params : any) => {\n                callBack(params);\n            }\n            !params.suppressEventTrigger ? (values.length > 0) && this.hookManager.executeHook(HookEventsName.onBeforeDeSelect, HookEventsName.onAfterDeSelect, api, hookParams) : callBack(hookParams);\n        }\n\n        private createSelectionHookParams(values : string[], params : IHookMeta = {}) : ListSelectionHookparams {\n            const self = this;\n            return {\n                    values         : values,\n                    initiator      : params.eventOrigin as HookInitiator,\n                    event          : params.event,\n                get selectedNodes(): IListData[] {\n                    const nodes : IListData[] = [];\n                    values.forEach((value) => {\n                        const node = self.listDataStore.getRowById(value)\n                        node && nodes.push(node.getData());\n                    })\n                    return nodes;\n                }\n            }\n        }\n    }\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListApiType } from \"./list-api.types\";\nimport { IHookMeta } from \"../../../List-configuration\";\nimport { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ListSelectionType } from \"./list-selection.types\";\nimport { ListDataStoreType } from \"./list-data-store.types\";\n\nconst listHookMeta : IHookMeta = {\n    eventOrigin : 'api',\n    suppressEventTrigger : false\n}\n\n@Bean(LIST_BEAN_NAME.LIST_API)\nexport class ListApi extends EventEmitter implements ListApiType {\n    @AutoWired(LIST_BEAN_NAME.LIST_SELECTION) private listSelection !: ListSelectionType;\n    @AutoWired(LIST_BEAN_NAME.LIST_DATA_STORE) private listDataStore !: ListDataStoreType; \n    selectOptions(ids: string[], hookMeta: IHookMeta = listHookMeta): void {\n        this.listSelection.addSelectedValues(ids, hookMeta);\n    }\n    deSelectOptions(ids: string[], hookMeta: IHookMeta = listHookMeta): void {\n        this.listSelection.removeSelectedValues(ids, hookMeta);\n    }\n    isOptionSelected(id: string): boolean {\n        return this.listSelection.isSelected(id);\n    }\n\n    setSearch(value: string): void {\n        this.listDataStore.setSearhQuery(value);\n    }\n\n    getSelectedOptions() : string[] {\n        return this.listSelection.getSelectedValues();\n    }\n\n    setDataSource(datas: Object[]): void {\n        this.listDataStore.setDataSource && this.listDataStore.setDataSource(datas);\n    }\n    \n}","export class NotFoundRenderer  {\n    getElement(): HTMLElement {\n        return createNoResultPanel();\n    } \n}\n\nfunction createNoResultPanel() {\n    const panel = document.createElement(\"div\");\n    panel.className = \"dg-no-result-empty-panel\";\n\n    for (let i = 0; i < 2; i++) {\n        const card = document.createElement(\"div\");\n        card.className = \"dg-no-result__card\";\n\n        const element = document.createElement(\"span\");\n        element.className = \"dg-no-result__element\";\n\n        card.appendChild(element);\n        panel.appendChild(card);\n    }\n\n    const message = document.createElement(\"h3\");\n    message.className = \"dg-no-result__empty-state-text\";\n    message.textContent = \"No matches found\";\n\n    panel.appendChild(message);\n    return panel;\n}","import { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { OptionRendererType } from \"../../List-configuration\";\nimport { OptionRendererParams } from \"../Component/Body/List-Option/list-option.types\";\nimport { LIST_BEAN_NAME } from \"../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../Component/Model/classname-generator.types\";\n\nexport class ImageTextOptionRenderer implements OptionRendererType<OptionRendererParams> {\n    private tokenElement: HTMLElement | null = null;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n    init(params: OptionRendererParams): void {\n\n        const {imageURL} = params\n        const label = document.createElement(\"label\");\n        label.className = this.getClassName('option-label');\n\n        if(imageURL) {\n            const imageContainer = document.createElement('img');\n            imageContainer.src = imageURL;\n            imageContainer.className = this.getClassName('option-image');\n            label.appendChild(imageContainer);\n        }\n      \n\n        const labelTextDiv = document.createElement(\"div\");\n        labelTextDiv.className = this.getClassName(\"option-label-text\");\n        const highlightDom = params.getHighlightKeywordElement(params.value);\n        labelTextDiv.appendChild(highlightDom);\n      \n        label.appendChild(labelTextDiv);\n      \n    \n        this.tokenElement = label;\n    }\n    \n\n    private getClassName(element?: string | string[], modifier?: string[] | { [key: string]: boolean; }) : string {\n        const classNameGenerator = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        return classNameGenerator.getClassName(element, modifier);\n    }\n\n    getElement(): HTMLElement {\n        return this.tokenElement!;\n    }\n\n    destroy(): void {\n        if (this.tokenElement) {\n            this.tokenElement.remove();\n            this.tokenElement = null;\n        }\n    }\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { ListTooltipHandlerType } from \"./list-tooltip-handler.types\";\nimport { ListOptionHandlerTypes, ListTooltipParams } from \"./list-option-handler.types\";\nimport { ITooltipConfiguration } from \"../../../../Tooltip/src/Interface/ITooltipConfiguration\";\nimport { Tooltip } from \"../../../../Tooltip/src/Tooltip\";\nimport { TooltipTriggerStates } from \"../../../../Tooltip/src/Constants/DefaultTooltipValues\";\nimport { ListOptionNodeType } from \"./list-option-node.types\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ListSelectionType } from \"./list-selection.types\";\n@Bean('listTooltipHandler')\nexport class ListTooltipHandler extends EventEmitter implements ListTooltipHandlerType {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ListOptionHandlerTypes;\n    @AutoWired(LIST_BEAN_NAME.LIST_SELECTION) private listSelection !: ListSelectionType;\n    registerTooltip(option : ListOptionNodeType, element : HTMLElement, value : string) : Tooltip {\n        const documentElement    = this.optionHandler.getDocument();\n        let   renderer           = this.optionHandler.getTooltipRenderer();\n        let   userRendererParams = this.optionHandler.getTooltipRendererParams();\n        let   selector           = this.optionHandler.getTooltipSelector();\n\n        const getTooltipValue = () => {\n            const tooltipValue = this.optionHandler.getTooltipValueCallback();\n            return tooltipValue({\n                value   : option.getValue(),\n                selected: this.isSelected(option),\n                data    : option.getData()\n            })\n        }\n        const params = this.createTooltipParams(option, element, value ?? getTooltipValue());\n\n        if(selector) {\n            const {component, componentParams} = selector(params);\n            renderer                           = component;\n            userRendererParams                 = componentParams;\n        }else {\n            renderer           = this.optionHandler.getTooltipRenderer();\n            userRendererParams = this.optionHandler.getTooltipRendererParams();\n        }\n        \n        \n        const configuration : ITooltipConfiguration = {\n            shouldShowTooltip: () => true,\n            tooltipValue     : value != null ? value: getTooltipValue(),\n            popupParent      : this.getPopupParent(),\n            documentElement,\n            renderer,\n            userRendererParams : {...params, ...userRendererParams},\n            selector,\n            tooltipHoverPosition: false,\n            tooltipShowDelay    : this.optionHandler.getTooltopShowDelay(),\n            tooltipHideDelay    : this.optionHandler.getTooltipHideDelay(),\n            tooltipMouseTrack   : this.optionHandler.isTooltipTrackMosue(),\n            tooltipTrigger      : TooltipTriggerStates.HOVER\n        }\n        return new Tooltip(element, configuration);\n    }\n\n    private isSelected(option : ListOptionNodeType) : boolean {\n            const id = option.getId();\n            return this.listSelection.isSelected(id);\n    }\n\n    private createTooltipParams(option : ListOptionNodeType, element : HTMLElement, value : string | null) : ListTooltipParams {\n        return {\n            element,\n            value,\n            selected: this.isSelected(option)\n        }\n    }\n    private getPopupParent() : HTMLElement {\n        return this.optionHandler.getPopupParent()!;\n    }\n}","import { BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ListOptionNodeType } from \"./list-option-node.types\";\nimport { ListOptionHandlerTypes } from \"./list-option-handler.types\";\nimport { v1 as uuid1 } from \"uuid\";\nimport { IListData, IListDataMapping, ListContentType } from \"../../../List-configuration\";\n\nexport class ListOptionNode implements ListOptionNodeType {\n    private id  !: string;\n    private data!: IListData;\n    private loaded !: boolean;\n    private dataMapping !: IListDataMapping;\n    constructor(public getBeanInstanceByName : getBeanInstanceByBeanName) {\n\n    }\n\n    constructData( data : Object, loaded : boolean) : void {\n        const optionHandler    = this.getBeanInstanceByName(BEAN_NAME.OPTION_HANDLER) as ListOptionHandlerTypes;\n        const dataMapping      = optionHandler.getDataMapping();\n              this.dataMapping = dataMapping;\n              this.data        = data;\n              this.loaded      = loaded;\n              this.id          = this.getIDFromMapping() ?? uuid1();\n             \n    }\n\n    getData() : Object {\n        return this.data;\n    }\n\n    getId() : string {\n        return this.id;\n    }\n\n    isLoaded(): boolean {\n        return this.loaded;\n    }\n\n    public getType(): ListContentType {\n        return this.getMappedValue('type') ?? this.getDefaultType();\n    }\n\n    public getValue() : string {\n        return this.getMappedValue('value');\n    }\n\n    public getColor() : string {\n        return this.getMappedValue('color');\n    }\n\n    public getImageURL() : string {\n        return this.getMappedValue('imageURL');\n    }\n\n    public isDisabled() : boolean {\n        return this.getMappedValue('disabled') ?? false;\n    }\n\n    private getDefaultType() : ListContentType {\n        const optionHandler = this.getBeanInstanceByName(BEAN_NAME.OPTION_HANDLER) as ListOptionHandlerTypes\n        return optionHandler.getType();\n    }\n\n    private getMappedValue(key:  keyof IListDataMapping): any {\n        const mappedKey = this.dataMapping[key] as string;\n        return this.data[mappedKey];\n    }\n\n    private getIDFromMapping() : string {\n        return this.getMappedValue('id')\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListDataStoreType } from \"./list-data-store.types\";\nimport { ListOptionNodeType } from \"./list-option-node.types\";\nimport { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName, PostConstruct } from \"@dg/corecomponent\";\nimport { ListOptionHandlerTypes } from \"./list-option-handler.types\";\nimport { TabPanelDataPartTypes } from \"../Tab/TabPanelDataPart.types\";\nimport { ListOptionNode } from \"./list-option-node\";\nimport { CoreFetchSuccessParams, ICoreFetchParams } from \"./list-cache-block.types\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { HookManagerType } from \"./hook-manager.types\";\nimport { HookEventsName } from \"../../Constants/HookEventNames\";\nimport { SearchChangeParams } from \"../../../List-configuration\";\n\n@Bean(LIST_BEAN_NAME.LIST_DATA_STORE)\nexport class ListServerDataStore extends EventEmitter implements ListDataStoreType {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler!: ListOptionHandlerTypes;\n    @AutoWired(LIST_BEAN_NAME.HOOK_MANAGER) private hookManager !: HookManagerType;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n    @AutoWired(\"tabDataPart\") private tabDataPart!: TabPanelDataPartTypes;\n\n    private searchQuery: string  = '';\n    private tabId: string | null = null;\n    private pending: boolean     = false;\n\n    private allRows: ListOptionNodeType[] = [];\n    private filteredRows: ListOptionNodeType[] = [];\n    private loadedRows: ListOptionNodeType[] = [];\n\n    @PostConstruct()\n    init(): void {\n        this.tabId = this.tabDataPart.getActiveTabId();\n        this.searchQuery = this.optionHandler.getSearchValue();\n\n        this.addListener(this.eventHandler, \"EVENT_ACTIVE_TAB_CHANGED\", () => {\n            this.tabId = this.tabDataPart.getActiveTabId();\n            this.resetCache();\n        });\n\n        this.addListener(this.eventHandler, \"EVENT_SEARCH_QUERY_CHANGED\", (params) => {\n            this.searchQuery = params.search;\n            this.applyFilterAndSort();\n            this.dispatchEvent({\n                type: \"EVENT_CACHE_UPDATED\",\n            });\n\n            this.dispatchEvent({\n                type: \"EVENT_DATA_LOADED\",\n                nodes: this.filteredRows,\n            });\n\n        });\n\n        this.addListener(this.eventHandler, \"EVENT_TRIGGER_FETCH\", () => {\n            if (!this.pending) {\n                this.fetchAll();\n            }\n        });\n\n        this.createLoadedRows();\n    }\n\n    private resetCache(): void {\n        this.allRows = [];\n        this.filteredRows = [];\n\n        this.dispatchEvent({\n            type: \"EVENT_CACHE_UPDATED\",\n        });\n\n        this.fetchAll();\n    }\n\n    private fetchAll(): void {\n        const source = this.optionHandler.getDataSource();\n        if (!source) {\n            return;\n        }\n\n        const fetchParams = this.constructFetchParam();\n\n        this.updatePending(true);\n\n        this.dispatchEvent({\n            type: \"EVENT_FETCH_TRIGGERED\",\n            loaded: false,\n        });\n\n        source(fetchParams);\n    }\n\n    private constructFetchParam(): ICoreFetchParams {\n        return {\n            searchQuery: this.getSearchQuery(),\n            tabId      : this.getTabId(),\n            onSuccess  : (params: CoreFetchSuccessParams) => this.onSuccessData(params),\n            onFailure  : () => this.onFailureData(),\n        };\n    }\n\n    private onSuccessData(params: CoreFetchSuccessParams): void {\n        this.updatePending(false);\n\n        this.allRows = params.data.map((data) => {\n            const node = new ListOptionNode(this.getBeanInstanceByBeanName);\n            node.constructData(data, true);\n            return node;\n        });\n\n        this.applyFilterAndSort();\n\n        this.dispatchEvent({\n            type: \"EVENT_DATA_LOADED\",\n            nodes: this.filteredRows,\n        });\n    }\n\n    private onFailureData(): void {\n        this.updatePending(false);\n        this.dispatchEvent({\n            type: \"EVENT_DATA_ERROR\",\n        });\n    }\n\n    private updatePending(value: boolean): void {\n        this.pending = value;\n    }\n\n    private createLoadedRows(): void {\n        const loadingCount = this.optionHandler.getLoadingCount();\n        this.loadedRows = [];\n        for (let i = 0; i < loadingCount; i++) {\n            const node = new ListOptionNode(this.getBeanInstanceByBeanName);\n            node.constructData({}, false);\n            this.loadedRows.push(node);\n        }\n    }\n\n    private applyFilterAndSort(): void {\n        const query = (this.searchQuery || \"\").toLowerCase();\n\n        let rows = this.allRows.filter((row) =>\n            !query || row.getValue?.().toLowerCase().includes(query)\n        );\n\n        // sort logic if needed: e.g. rows.sort((a, b) => a.getValue().localeCompare(b.getValue()))\n\n        this.filteredRows = rows;\n    }\n\n    // === Public API methods ===\n\n    getLoadingRows(): ListOptionNodeType[] {\n        return this.loadedRows;\n    }\n\n    getRowById(id: string): ListOptionNodeType | null {\n        return this.allRows.find((row) => row.getId?.() === id) || null;\n    }\n\n    setSearhQuery(search: string): void {\n        this.searchQuery = search;\n        this.applyFilterAndSort();\n        this.dispatchEvent({\n            type: \"EVENT_CACHE_UPDATED\",\n        });\n\n        this.dispatchEvent({\n            type: \"EVENT_DATA_LOADED\",\n            nodes: this.filteredRows,\n        });\n        this.hookManager.executeAfterHook(HookEventsName.onSearchChange, { query : search, filteredData: this.filteredRows } as SearchChangeParams);\n    }\n\n    getSearchQuery(): string {\n        return this.searchQuery ?? \"\";\n    }\n\n    setDataSource(datas : Object[]) : void {\n        this.allRows = datas.map((data) => {\n            const node = new ListOptionNode(this.getBeanInstanceByBeanName);\n            node.constructData(data, true);\n            return node;\n        });\n        this.applyFilterAndSort();\n        this.dispatchEvent({\n            type: \"EVENT_CACHE_UPDATED\",\n        });\n\n        this.dispatchEvent({\n            type: \"EVENT_DATA_LOADED\",\n            nodes: this.filteredRows,\n        });\n        \n\n    }\n\n    private getTabId() : string | null {\n        return this.tabId;\n    }\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListDataStoreWrapper } from \"./list-data-store.types\";\nimport { FetchParams, FetchSuccessParams } from \"./list-cache-block.types\";\nimport { ListOptionNode } from \"./list-option-node\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ListOptionNodeType } from \"./list-option-node.types\";\nimport { IGenericDataStore } from \"./generic-data-store.types\";\nimport { GenericDataStore } from \"./generic-data-store\";\n\nexport class ListCacheBlock extends EventEmitter {\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    private startRow : number;\n    private endRow : number;\n    private id : number;\n    private nodes : IGenericDataStore<ListOptionNodeType> = new GenericDataStore();\n    private root : ListDataStoreWrapper;\n    constructor(id : number, blockSize : number, root : ListDataStoreWrapper) {\n        super();\n        this.id       = id;\n        this.startRow = id;\n        this.endRow   = this.startRow + blockSize - 1;\n        this.root     = root;\n    }\n\n    getID() : number {\n        return this.id;\n    }\n\n    getStartRow() : number {\n        return this.startRow;\n    }\n\n    getEndRow() : number {\n        return this.endRow;\n    }\n\n    getRow(index : number) : any {\n        return this.nodes.getAllData()[index];\n    }\n\n    fetchBlock() : void {\n        const fetchParams = this.constructFetchParam();\n        const source = this.root.getDataSource();\n        source && source(fetchParams);\n        this.root.updatePending(true);\n        this.dispatchEvent({\n            type  : \"EVENT_FETCH_TRIGGERED\",\n            loaded: false\n        })\n    }\n\n    private constructFetchParam()  : FetchParams{\n        return {\n            startRow   : this.startRow,\n            endRow     : this.endRow,\n            searchQuery: this.root.getSearchQuery(),\n            tabId      : this.root.getTabId(),\n            onSuccess  : (params : FetchSuccessParams) => this.onSuccessData(params),\n            onFailure  : () => this.onFailureData()\n        }\n    }\n\n    private onSuccessData(params : FetchSuccessParams) : void {\n        if(!this.isAlive()) {\n            this.root.updatePending(false);\n            this.root.updateHasMore(true);\n            return;\n        }\n        this.root.updatePending(false);\n        this.root.updateHasMore(params.hasMore);\n        params.data.forEach((data, _index) => {\n            const node = new ListOptionNode(this.getBeanInstanceByBeanName);\n            node.constructData(data, true);\n            const id = node.getId();\n            this.nodes.addData(id, node);\n        })\n\n        this.dispatchEvent({\n            type : \"EVENT_DATA_LOADED\",\n            nodes: this.nodes.getAllData()\n        })\n    }\n\n    private onFailureData() : void {\n\n    }\n\n    getRowByID(id : string) : ListOptionNodeType | null {\n        return this.nodes.getData(id) ?? null;\n    }\n\n    destroy(): void {\n        super.destroy();    \n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListDataStoreType } from \"./list-data-store.types\";\nimport { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName, PostConstruct } from \"@dg/corecomponent\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ListCacheBlock } from \"./list-cache-block\";\nimport { ListOptionHandlerTypes } from \"./list-option-handler.types\";\nimport { ListOptionNodeType } from \"./list-option-node.types\";\nimport { TabPanelDataPartTypes } from \"../Tab/TabPanelDataPart.types\";\nimport { ListOptionNode } from \"./list-option-node\";\n\n@Bean(LIST_BEAN_NAME.LIST_DATA_STORE)\nexport class ListDataStore extends EventEmitter implements ListDataStoreType {\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler !: ListOptionHandlerTypes;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    \n    @AutoWired(\"tabDataPart\") private tabDataPart !: TabPanelDataPartTypes;\n\n    private blocks     : Map<number, ListCacheBlock>;\n    private hasMore    : boolean;\n    private blockCount : number = 0;\n    private searchQuery: string | null = null;\n    private tabId      : string | null = null;\n    private pending    : boolean = false;\n\n    private loadedRows : ListOptionNodeType[] = [];\n    constructor() {\n        super();\n        this.blocks  = new Map();\n        this.hasMore = true;   \n    }\n\n    @PostConstruct()\n    init() : void {\n        const blocksize = this.optionHandler.getBlockSize()\n\n        this.tabId       = this.tabDataPart.getActiveTabId();\n        this.searchQuery = this.optionHandler.getSearchValue();\n        this.addListener(this.eventHandler, \"EVENT_ACTIVE_TAB_CHANGED\", () => {\n            this.tabId = this.tabDataPart.getActiveTabId();\n            this.resetCache();\n        })\n\n        this.addListener(this.eventHandler, 'EVENT_SEARCH_QUERY_CHANGED', (params) => {\n            this.searchQuery = params.search;\n            this.resetCache();\n        })\n\n        this.addListener(this.eventHandler, 'EVENT_TRIGGER_FETCH', () => {\n            !this.pending && this.createBlock(this.blockCount * blocksize, blocksize);\n        })\n\n        this.createLoadedRows();\n    }\n\n    setSearhQuery(search: string) : void {\n        if(this.searchQuery === search) {\n            return;\n        }\n        this.searchQuery = search;\n        this.resetCache();\n    }\n\n    private resetCache() : void {\n\n        this.blocks.forEach((block) => {\n            block.destroy();\n        })\n        this.blocks     = new Map();\n        this.hasMore    = true;\n        this.blockCount = 0;\n\n        const blocksize = this.optionHandler.getBlockSize()\n\n        this.dispatchEvent({\n            type : \"EVENT_CACHE_UPDATED\"\n        });\n\n        this.createBlock(this.blockCount * blocksize, blocksize);\n    }\n\n    getRow(index : number) : ListOptionNodeType | null {\n        const blocksize = this.optionHandler.getBlockSize()\n        const blockId = Math.floor(index / blocksize);\n        let block = this.blocks.get(blockId);\n        if (!block) {\n          block = this.createBlock(blockId, blocksize);\n        }\n        return block ? block!.getRow(index) : null;\n    }\n\n    getRowTop(index : number) : number {\n        return index * this.optionHandler.getItemHeight();\n    }\n\n    createBlock(id : number, blocksize : number) : ListCacheBlock | undefined {\n        if(!this.hasMore) {\n            this.dispatchEvent({\n                type : 'EVENT_DATA_LOADED',\n                nodes : []\n            })\n            return undefined;\n        }\n        const newBlock = this.createBean(new ListCacheBlock(id, blocksize, {\n            getSearchQuery: () => this.searchQuery,\n            getTabId      : () => this.tabId,\n            getDataSource : () => this.optionHandler.getDataSource(),\n            updateHasMore : (hasMore : boolean) => this.hasMore = hasMore,\n            isHasMore     : () => this.hasMore,\n            updatePending : (pending : boolean) => this.pending = pending\n        }));\n        this.blocks.set(newBlock.getID(), newBlock)\n        this.blockCount++;\n        newBlock.fetchBlock();\n        return newBlock;\n    }\n\n    private createLoadedRows() : void {\n        const loadingCount = this.optionHandler.getLoadingCount();\n        for(let i = 0; i < loadingCount ; i ++) {\n            const node = new ListOptionNode(this.getBeanInstanceByBeanName);\n            node.constructData( {}, false);\n            this.loadedRows[`${i}`] = node;\n        }\n       \n    }\n\n    getSearchQuery(): string | null {\n        return this.searchQuery ?? '';\n    }\n\n    getLoadingRows(): ListOptionNodeType[] {\n        return this.loadedRows;\n    }\n\n    getRowById(id : string ) : ListOptionNodeType | null {\n        for (const block of this.blocks) {\n            const row = block[1].getRowByID(id);\n            if (row) return row;\n        }\n\n        return null;\n    }\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { ListConfigurationTypes } from \"./List-configuration\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { IModule } from \"../core/modules.types\";\nimport { ModuleRegistry } from \"./src/Modules/ModuleRegistry\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { ListUserComponentHandler, PropertyName } from \"./src/Component/Model/list-user-component-handler\";\nimport { ListOptionHandler } from \"./src/Component/Model/list-option-handler\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { HeaderComponent } from \"./src/Component/Header/header-view\";\nimport { FooterComponent } from \"./src/Component/Footer/footer-view\";\nimport { ListClassNameGenerator } from \"./src/Component/Model/classname-generator\";\nimport { TabContainerComponent } from \"./src/Component/Tab/tab-container-view\";\nimport { TabPanelDataPart } from \"./src/Component/Tab/TabPanelDataPart\";\nimport { ListBodyContainerComponent } from \"./src/Component/Body/list-body-container-view\";\nimport { OptionRenderer } from \"./src/renderer/option-renderer\";\nimport { LoadingOptionRenderer } from \"./src/renderer/loading-option-renderer\";\nimport { HookManager } from \"./src/Component/Model/hook-manager\";\nimport { ListSelection } from \"./src/Component/Model/list-selection\";\nimport { ListApi } from \"./src/Component/Model/list-api\";\nimport { NotFoundRenderer } from \"./src/renderer/not-found-renderer\";\nimport { ImageTextOptionRenderer } from \"./src/renderer/image-text-option-renderer\";\nimport { ListTooltipHandler } from \"./src/Component/Model/list-tooltip-handler\";\nimport { ListServerDataStore } from \"./src/Component/Model/List-server-data-store\";\nimport { ListDataStore } from \"./src/Component/Model/list-data-store\";\nlet nextInstanceId = 0;\nexport class ListCoreComponent {\n    initializeToken(element : HTMLElement, configuration : ListConfigurationTypes,  params: IUserParams = {}, createUI: CallableFunction) : void {\n        const instanceID         = String(nextInstanceId++);\n        const beanClasses        = this.createBeanClasses(configuration.infiniteScroll);\n        const context            = new Context();\n        const registeredModules = this.getRegisteredModules(params, instanceID);\n        const userConfigurations = this.createUserConfiguration( configuration, params, instanceID, element);\n        context.registerBeanClasses(beanClasses, userConfigurations);\n\n        this.registerModuleComponent(context, registeredModules);\n\n        this.registerDefaultUserComponent(context);\n        this.registerCoreComponent(context);\n\n        createUI(context);\n\n\n        // this.setTokenData(context);\n\n        const eventHandler = context.getBean(BEAN_NAME.EVENT_HANDLER) as EventHandler;\n        eventHandler!.dispatchEvent({\n            type: 'EVENT_UI_RENDERER'\n        });\n\n        (window as any).listcontext = context\n    }\n\n    private getRegisteredModules( params: IUserParams | undefined, instanceID: string, ): IModule[] {\n            const passedViaConstructor: IModule[] | undefined | null = params ? params.modules : null;\n            const registered = ModuleRegistry.__getRegisteredModules(instanceID);\n    \n            const allModules: IModule[] = [];\n            const mapNames: { [name: string]: boolean } = {};\n    \n            const addModule = (mod: IModule, instanceID: string | undefined) => {\n                const addIndividualModule = (currentModule: IModule) => {\n                    if (!mapNames[currentModule.moduleName]) {\n                        mapNames[currentModule.moduleName] = true;\n                        allModules.push(currentModule);\n                        ModuleRegistry.__register(currentModule, instanceID);\n                    }\n                };\n    \n                addIndividualModule(mod);\n                if (mod.dependantModules) {\n                    mod.dependantModules.forEach((m) => addModule(m, instanceID));\n                }\n            };\n    \n            if (passedViaConstructor) {\n                passedViaConstructor.forEach((m) => addModule(m, instanceID));\n            }\n    \n            if (registered) {\n                registered.forEach((module) =>\n                    addModule( module, undefined),\n                );\n            }\n    \n            return allModules;\n        }\n\n\n    private registerDefaultUserComponent(context: Context): void {\n        const userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n        const defaultComponent = {\n           'text'                                : OptionRenderer,\n           'image-text'                          : ImageTextOptionRenderer,\n           [PropertyName.LOADING_OPTION_RENDERER]: LoadingOptionRenderer,\n           [PropertyName.NOT_FOUND_RENDERER]     : NotFoundRenderer\n        };\n\n        traverseObject(defaultComponent, (name: string, component: any) => {\n            userComponentRegistry.registerDefaultComponent(name, component);\n        });\n    }\n\n    private registerModuleComponent(context: Context, registeredModules : IModule[]): void {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = this.createComponentList(registeredModules);\n        registry.setupComponents(components);\n    }\n\n    private createBeanClasses(infiniteScroll : boolean = false): Set<any> {\n        const beanClasses : any[] = [\n            TabPanelDataPart,\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n            ListUserComponentHandler,\n\t\t\tEventHandler,\n            ListOptionHandler,\n            ListClassNameGenerator,\n            HookManager,\n            ListSelection,\n            ListApi,\n            ListTooltipHandler\n\t\t];\n\n        infiniteScroll ? beanClasses.push(ListDataStore) : beanClasses.push(ListServerDataStore);\n        return new Set(beanClasses);\n    }\n\n    private createUserConfiguration(configuration: any, params: IUserParams, instanceID: string, element : HTMLElement): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID: string; element : HTMLElement } {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n        if (!frameWorkOverrides) {\n            frameWorkOverrides = new VanillaFrameWorkOverrider();\n        }\n        return {\n            configuration,\n            frameWorkOverrides,\n            instanceID,\n            element,\n            frameworkComponentWrapper: params.frameworkComponentWrapper,\n            globalEventListener: params.globalEventListener ?? null,\n        };\n    }\n\n    private createComponentList(registeredModules : IModule[]) :  ComponentMeta[] {\n        let components: ComponentMeta[] = []\n\n        const moduleComps = this.extractModuleEntity(registeredModules, (module : IModule) => module.components ? module.components : []);\n\n        components = components.concat(moduleComps);\n\n        return components;\n    }\n\n    private extractModuleEntity(moduleEntities: any[], extractor: (module: any) => any) {\n        return [].concat(...moduleEntities.map(extractor));\n    }\n\n    private registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\n\nexport function createComponentList(): ComponentMeta[] {\n    let components: ComponentMeta[] = [\n        {\n            componentName: 'dg-list-header',\n            componentClass: HeaderComponent\n        },\n        {\n            componentName : 'dg-list-footer',\n            componentClass : FooterComponent\n        },\n        {\n            componentName : 'dg-tab-container',\n            componentClass : TabContainerComponent\n        },\n        {\n            componentName : \"dg-list-body\",\n            componentClass : ListBodyContainerComponent\n        }\n    ];\n\n    return components;\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ListContainerComponentWrapperTypes } from \"./list-container.types\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { LIST_BEAN_NAME } from \"../../Constants/ListBeanName\";\nimport { ClassNameGeneratorType } from \"../Model/classname-generator.types\";\nimport { ListOptionHandlerTypes } from \"../Model/list-option-handler.types\";\n\nexport class ListContainerController extends EventEmitter {\n    private component !: ListContainerComponentWrapperTypes;\n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !:getBeanInstanceByBeanName;\n\n    setComponent(component : ListContainerComponentWrapperTypes) : void {\n        this.component = component;\n        this.addClassNames();\n        this.addTabIndex();\n        this.addDefaultClassName();\n    }\n\n\n    private addDefaultClassName() : void {\n        const className = (this.optionsHandler as ListOptionHandlerTypes).getClassName();\n        className && this.component.addOrRemoveCssClass(className, true);\n    }\n    \n    private addTabIndex() : void {\n        const element = this.component.getElement();\n        element.setAttribute('tabIndex','0');\n    }\n\n     private addClassNames() : void {\n        const classNameGenerator  = this.getBeanInstanceByBeanName(LIST_BEAN_NAME.LIST_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const className = classNameGenerator.getClassName('container', [])\n        this.component.addOrRemoveCssClass(className, true);\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { ListContainerComponentWrapperTypes } from \"./list-container.types\";\nimport { ListContainerController } from \"./list-container-controller\";\nimport { PostConstruct } from \"@dg/corecomponent\";\n\nexport class ListContainerComponent extends Component {\n    private element : HTMLElement | null = null;\n    constructor(element : HTMLElement) {\n        super();\n        this.element = element;\n    }\n\n    @PostConstruct()\n\tinit() : void {\n\t\tconst root = this.getTemplate() as any;\n\t\tthis.setTemplate(root);\n\n\t\tthis.element && this.appendElementIntoUserDom();\n\n\t\tconst component : ListContainerComponentWrapperTypes = {\n\t\t\tgetElement         : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n\t\t}\n\t\tconst controller = this.createManagedBean(new ListContainerController());\n\t\tcontroller.setComponent(component);\n\t}\n\n    private appendElementIntoUserDom() :void{\n\t\tconst eGui = this.getGui();\n\t\tthis.element && this.element.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.element?.remove();\n\t\t\tthis.element = null;\n\t\t})\n\t}\n\n    private getTemplate() : HTMLElement {\n        const header = document.createElement('dg-list-header');\n\n        const footer = document.createElement(\"dg-list-footer\");\n\n        const tabContainer = document.createElement('dg-tab-container');\n\n\t\tconst bodyContainer = document.createElement(\"dg-list-body\");\n\n        const element = document.createElement('div');\n        element.appendChild(header);\n        element.appendChild(tabContainer);\n\t\telement.appendChild(bodyContainer);\n        element.appendChild(footer);\n        return element;\n    }\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { IList, ListConfigurationTypes } from \"./List-configuration\";\nimport { ListCoreComponent } from \"./List-core\";\nimport { ListContainerComponent } from \"./src/Component/Container/list-container-view\";\nimport { ListApiType } from \"./src/Component/Model/list-api.types\";\nimport { LIST_BEAN_NAME } from \"./src/Constants/ListBeanName\";\n\nexport class List implements IList {\n    public api !: ListApiType;\n    constructor(element : HTMLElement, configuration : ListConfigurationTypes, userParams ?: IUserParams) {\n        const createUI = (context: Context) => {\n            this.api = context.getBean(LIST_BEAN_NAME.LIST_API) as ListApiType;\n            context.createBean(new ListContainerComponent(element));\n        };\n          new ListCoreComponent().initializeToken(element,configuration, userParams, createUI);\n    }\n}","import { List } from \"../../../../List/List\";\nimport { IList, ListConfigurationTypes } from \"../../../../List/List-configuration\";\nimport { DropdownInteracterType } from \"./IDropdownInteracter\";\nimport { DropdownModelType } from \"./DropdownModel.types\";\n\nexport class DropdownInteracter implements DropdownInteracterType {\n    private model !: DropdownModelType;\n    private dropdown !:  IList ;\n    private container : HTMLElement = document.createElement('div');\n    setSearch(searchValue: string): void {\n        this.dropdown.api.setSearch(searchValue);\n    }\n    getSelectedOptions(): string[] {\n        return this.dropdown.api.getSelectedOptions();\n    }\n    setSelectedOptions(options: string[]): void {\n        this.dropdown.api.selectOptions(options);\n    }\n\n    removeSelectedOptions(options: string[]): void {\n        this.dropdown.api.deSelectOptions(options);\n    }\n\n    navigateNext(): void {\n        \n    }\n    navigatePrevious(): void {\n\n    }\n\n    destroy(): void {\n        \n    }\n\n    getElement() : HTMLElement {\n        return this.container;\n    }\n\n    setModel(model: DropdownModelType, value : string = ''): void {\n        this.model = model;\n        this.dropdown = new List(this.container, this.createDropDownConfiguration(value));\n    }\n\n    setDataSource(data: Object[]): void {\n        this.dropdown.api.setDataSource(data);\n    }\n\n    private createDropDownConfiguration(value : string) : ListConfigurationTypes {\n        return {\n            footerRenderer          : this.model.getFooterRenderer(),\n            footerRendererParams    : this.model.getFooterRendererParams(),\n            headerRenderer          : this.model.getHeaderRenderer(),\n            headerRendererParams    : this.model.getHeaderRendererParams(),\n            model                   : 'remote',\n            enableTab               : true,\n            tabs                    : this.model.getTabs(),\n            activeTab               : this.model.getActiveTab(),\n            dataSource              : this.model.getDataSource() as any,\n            loadingCount            : this.model.getLoadingCount(),\n            dataMapping             : this.model.getDataMapping(),\n            optionRenderer          : this.model.getOptionRenderer(),\n            loadingOptionRenderer   : this.model.getLoadingOptionRenderer(),\n            values                  : this.model.getValues(),\n            tooltipValue            : this.model.getTooltipValue(),\n            disableOnSelection      : this.model.isDisableOnSelection(),\n            popupParent             : this.model.getTooltipAppendTo(),\n            className               : this.model.getClassName()!,\n            events               : {\n                onAfterDeSelect  : (params) => this.model.onAfterDeSelect(params),\n                onBeforeDeSelect : (params) => this.model.onBeforeDeSelect(params),\n                onAfterSelect    : (params) => this.model.onAfterSelect(params),\n                onBeforeSelect   : (params) => this.model.onBeforeSelect(params),\n                onAfterTabChange : (params) => this.model.onAfterTabChange(params),\n                onBeforeTabChange: (params) => this.model.onBeforeTabChange(params),\n                onSearchChange : (params) => this.model.onSearchChange(params)\n            },\n            blockSize: this.model.getBlockSize(),\n            type     : this.model.getType(),\n            search : {\n                highlightKeyword: this.model.getSearchHighlightKeyword(),\n                minKeywordLength: this.model.getSearchMinKeyword(),\n                value           : value\n            },\n            notFoundRenderer: this.model.getNotFoundRenderer(),\n            infiniteScroll  : this.model.isInfiniteScroll()\n        }\n    }\n    \n}","import { AutoWired, Bean, PostConstruct } from '@dg/corecomponent';\nimport { EventEmitter } from '@dg/corecomponent/EventEmitter.js';\nimport { TOKEN_BEAN_NAME } from '../../constants/beanname-constant';\nimport { DropdownModelType } from './DropdownModel.types';\nimport { DropdownInteracter } from './DropdownInteracter';\nimport { PopupComponentPositionParams, Position, } from '../../../../utility/PopupHandler/CorePopupHandler';\nimport type { PopupHandler } from './PositionHandler';\nimport { HookManagerType } from '../../model/hook-manager.types';\nimport { HookEventsName } from '../../constants/HookEventNames';\nimport { DropdownType } from './Dropdown.types';\nimport { DropdownInteracterType } from './IDropdownInteracter';\nimport { TOKEN_EVENT } from '../../constants/event';\nimport { ITokenDataStore } from '../../model/token-data-store.types';\n\n@Bean(TOKEN_BEAN_NAME.DROPDOWN)\nexport class Dropdown extends EventEmitter implements DropdownType {\n\t@AutoWired(TOKEN_BEAN_NAME.POSITION_HANDLER)\n\tprivate positionHandler!: PopupHandler;\n\t@AutoWired(TOKEN_BEAN_NAME.DROPDOWN_MODEL)\n\tprivate dropdownModel!: DropdownModelType;\n\t@AutoWired(TOKEN_BEAN_NAME.HOOK_MANAGER)\n\tprivate hookManager!: HookManagerType;\n\t@AutoWired(TOKEN_BEAN_NAME.TOKEN_DATA_STORE)\n\tprivate dataStore!: ITokenDataStore;\n\n\tprivate popupDestroyFucn!: CallableFunction;\n\n\tprivate interacter!: DropdownInteracterType | null;\n\n\tprivate open: boolean = false;\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.addListener(\n\t\t\tthis.eventHandler,\n\t\t\tTOKEN_EVENT.MODEL_UPDATE,\n\t\t\t(params) => {\n\t\t\t\tconst values = this.dataStore.getSelectedTokenIds();\n\t\t\t\tif (params.initiator !== 'dropdown-ui' && this.interacter) {\n\t\t\t\t\tif (!params.remove) {\n\t\t\t\t\t\tthis.interacter.setSelectedOptions(values);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.interacter.removeSelectedOptions(params.values);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\topenDropdown(event: Event, value: string = ''): void {\n\t\tconst callback = () => {\n\t\t\tthis.interacter = new DropdownInteracter();\n\t\t\tthis.interacter.setModel(this.dropdownModel, value);\n\t\t\tthis.positionDropdown();\n\t\t\tthis.open = true;\n\t\t};\n\t\t!this.open &&\n\t\t\tthis.hookManager.executeHook(\n\t\t\t\tHookEventsName.onBeforeDropdownOpen,\n\t\t\t\tHookEventsName.onAfterDropdownOpen,\n\t\t\t\tcallback,\n\t\t\t\t{ event },\n\t\t\t);\n\t}\n\n\tcloseDropdown(event: Event): void {\n\t\tconst callback = () => {\n\t\t\tthis.popupDestroyFucn && this.popupDestroyFucn();\n\t\t\tthis.interacter = null;\n\t\t\tthis.open = false;\n\t\t};\n\n\t\tthis.open &&\n\t\t\tthis.hookManager.executeHook(\n\t\t\t\tHookEventsName.onBeforeDropdownClose,\n\t\t\t\tHookEventsName.onAfterDropdownClose,\n\t\t\t\tcallback,\n\t\t\t\t{ event },\n\t\t\t);\n\t}\n\n\tisDropdownOpened(): boolean {\n\t\treturn this.open;\n\t}\n\n\tsearchQuery(value: string): void {\n\t\tthis.interacter && this.interacter.setSearch(value);\n\t}\n\n\tsetDataSource(data: Object[]): void {\n\t\tthis.interacter && this.interacter.setDataSource(data);\n\t}\n\n\tprivate positionDropdown(): void {\n\t\tconst dropdownElement = this.interacter!.getElement();\n\t\tconst dropdownPosition = (this.dropdownModel.getDropdownPosition() ??\n\t\t\tPosition.bottomLeft) as any;\n\n\t\tconst positionParams: PopupComponentPositionParams = {\n\t\t\tpopUpElement: dropdownElement,\n\t\t\tsourceElement: this.dropdownModel.getAppendTo(),\n\t\t\tposition: dropdownPosition,\n\t\t\tkeepWithinBounds: true,\n\t\t\tgapX: this.dropdownModel.getGapX(),\n\t\t\tgapY: this.dropdownModel.getGapY(),\n\t\t\trelativePosition: true,\n\t\t};\n\n\t\tconst positionCallback =\n\t\t\tthis.positionHandler.positionPopupByComponent.bind(\n\t\t\t\tthis.positionHandler,\n\t\t\t\tpositionParams,\n\t\t\t\tthis.dropdownModel.getDropdownAppendTo(),\n\t\t\t);\n\n\t\tdropdownElement.addEventListener('focusout', (event) => {\n\t\t\tconst elementWithFocus = event.relatedTarget as HTMLElement;\n\t\t\tif (!this.isElementWithinCustomPopup(elementWithFocus)) {\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype : \"TOKEN_FOCUSOUT\"\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\tconst addPopup = this.positionHandler.addPopup({\n\t\t\tchildElement: dropdownElement,\n\t\t\tanchorToElement: this.dropdownModel.getAppendTo(),\n\t\t\tpopupParentElement: this.dropdownModel.getDropdownAppendTo(),\n\t\t\tpositionCallback,\n\t\t\tariaLabel: '',\n\t\t\tpopupClassName: 'ZG-popup-dropdown',\n\t\t});\n\t\tthis.popupDestroyFucn = addPopup.hideFunction;\n\t}\n\tprivate isElementWithinCustomPopup(element: HTMLElement): boolean {\n\t\tlet pointer: HTMLElement | null = element;\n\n\t\twhile (pointer) {\n\t\t\tif (pointer.classList.contains('ZG-popup-dropdown') || pointer.classList.contains('dg-token-input')) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tpointer = pointer.parentElement;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n","import { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { TokenRendererParams } from \"../core/token-item/token-item.types\";\nimport { TokenRendererType } from \"../model/token-option-handler.types\";\nimport { TOKEN_BEAN_NAME } from \"../constants/beanname-constant\";\nimport { ClassNameGeneratorType } from \"../model/classname-generator.types\";\n\nexport class TokenImageRenderer implements TokenRendererType<TokenRendererParams> {\n    private tokenElement: HTMLElement | null = null;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n    init(params: TokenRendererParams): void {\n        const outerContainer = document.createElement('div');\n        outerContainer.classList.add(this.getClassName('token-input'));\n    \n        const imageURL = params.item.getImageURL();\n\n        \n       \n\n        const container = document.createElement('div');\n        container.className = this.getClassName('token-input', 'label');\n        container.textContent = params.value;\n    \n        const removeButton = document.createElement('button');\n        removeButton.className = this.getClassName('token-input', 'remove-icon');\n        removeButton.setAttribute('tabindex', '-1');\n    \n        // Create SVG element for the remove icon\n        const svgNS = \"http://www.w3.org/2000/svg\";\n        const svgElem = document.createElementNS(svgNS, \"svg\");\n        svgElem.setAttribute(\"width\", \"8\");\n        svgElem.setAttribute(\"height\", \"16\");\n        svgElem.setAttribute(\"viewBox\", \"0 0 20 20\");\n        svgElem.classList.add(this.getClassName('token-input', 'remove-svg'));\n    \n        const gElem = document.createElementNS(svgNS, \"g\");\n        gElem.setAttribute(\"id\", \"Layer_1-2\");\n        gElem.setAttribute(\"data-name\", \"Layer 1\");\n    \n        const path1 = document.createElementNS(svgNS, \"path\");\n        path1.setAttribute(\"d\", \"M1 20a1 1 0 0 1-.71-1.7l18-18.01A1 1 0 1 1 19.7 1.7L1.71 19.71c-.2.2-.45.29-.71.29Z\");\n    \n        const path2 = document.createElementNS(svgNS, \"path\");\n        path2.setAttribute(\"d\", \"M19 20c-.26 0-.51-.1-.71-.29l-18-18C-.1 1.32-.1.68.29.29s1.03-.39 1.42 0l18 18a1 1 0 0 1-.71 1.7Z\");\n    \n        gElem.appendChild(path1);\n        gElem.appendChild(path2);\n        svgElem.appendChild(gElem);\n        removeButton.appendChild(svgElem);\n\n        if(imageURL) {\n            const imageContainer = document.createElement('img');\n            imageContainer.className = this.getClassName('token-input', 'image');\n            imageContainer.src = params.item.getImageURL();\n            outerContainer.appendChild(imageContainer)\n        }\n    \n        outerContainer.appendChild(container);\n        outerContainer.appendChild(removeButton);\n    \n        params.registerRemoveElement(removeButton);\n        params.registerTooltip(container);\n    \n        this.tokenElement = outerContainer;\n    }\n    \n\n    private getClassName(block?: string, element?: string | string[], modifier?: string[] | { [key: string]: boolean; }) : string {\n        const classNameGenerator = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        return classNameGenerator.getClassName(block, element, modifier);\n    }\n\n    getElement(): HTMLElement {\n        return this.tokenElement!;\n    }\n\n    destroy(): void {\n        if (this.tokenElement) {\n            this.tokenElement.remove();\n            this.tokenElement = null;\n        }\n    }\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../utility/user-params.types\";\nimport { TokenConfigurations } from \"./token-configuration.types\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { TokenOptionHandler } from \"./src/model/token-option-handler\";\nimport { TokenAPI } from \"./src/model/token-api\";\nimport { TokenRendererHandler } from \"./src/model/token-renderer-handler\";\nimport { TokenDataStore } from \"./src/model/token-data-store\";\nimport { TOKEN_BEAN_NAME } from \"./src/constants/beanname-constant\";\nimport { ITokenDataStore } from \"./src/model/token-data-store.types\";\nimport { ITokenOptionHandler } from \"./src/model/token-option-handler.types\";\nimport { TokenNavigationHandler } from \"./src/model/token-navigation\";\nimport { TokenUserComponentHandler, PropertyName } from \"./src/model/token-user-component-handler\";\nimport { TokenClassNameGenerator } from \"./src/model/classname-generator\";\nimport { TokenRenderer } from \"./src/renderer/token-renderer\";\nimport { IModule } from \"../core/modules.types\";\nimport { ModuleRegistry } from \"./src/Modules/ModuleRegistry\";\nimport { TokenEditHandler } from \"./src/model/token-edit-handler\";\nimport { TokenEditor } from \"./src/renderer/token-editor\";\nimport { KeyboardShortcutRegistry } from \"./src/model/key-board-shortcut-registry\";\nimport { ActionRegistry } from \"./src/model/action-registry\";\nimport { TokenKeyBoardNavigation } from \"./src/model/token-key-board-navigation\";\nimport { IKeyBoardShortcutsParams, KeyboardShortcuts } from \"./src/model/token-key-shortcut\";\nimport { TokenValueHandler } from \"./src/model/token-value-handler\";\nimport { TokenInnerComponent } from \"./src/core/token-inner/token-inner-view\";\nimport { TokenControllerHandler } from \"./src/model/token-controller\";\nimport { TokenTooltipHandler } from \"./src/model/token-tooltip-handler\";\nimport { HookManager } from \"./src/model/hook-manager\";\nimport { PopupHandler } from \"./src/core/dropdown/PositionHandler\";\nimport { DropdownModel } from \"./src/core/dropdown/DropdownModel\";\nimport { Dropdown } from \"./src/core/dropdown/Dropdown\";\nimport { TokenImageRenderer } from \"./src/renderer/token-image-renderer\";\n\nlet nextInstanceId = 1;\nexport class TokenCoreComponent {\n    initializeToken(element : HTMLElement, configuration : TokenConfigurations,  params: IUserParams = {}, createUI: CallableFunction) : void {\n        const instanceID         = String(nextInstanceId++);\n        const beanClasses        = this.createBeanClasses();\n        const context            = new Context();\n        const registeredModules = this.getRegisteredModules(params, instanceID);\n        const userConfigurations = this.createUserConfiguration( configuration, params, instanceID, element);\n        context.registerBeanClasses(beanClasses, userConfigurations);\n\n        this.registerModuleComponent(context, registeredModules);\n\n        this.registerDefaultUserComponent(context);\n        this.registerKeyBoardShortCuts(context);\n        this.registerCoreComponent(context);\n\n        createUI(context);\n\n\n        this.setTokenData(context);\n\n        const eventHandler = context.getBean(BEAN_NAME.EVENT_HANDLER) as EventHandler;\n        eventHandler!.dispatchEvent({\n            type: 'EVENT_UI_RENDERER'\n        });\n\n        (window as any).tokenContext = context\n    }\n\n    private getRegisteredModules( params: IUserParams | undefined, instanceID: string, ): IModule[] {\n            const passedViaConstructor: IModule[] | undefined | null = params ? params.modules : null;\n            const registered = ModuleRegistry.__getRegisteredModules(instanceID);\n    \n            const allModules: IModule[] = [];\n            const mapNames: { [name: string]: boolean } = {};\n    \n            const addModule = (mod: IModule, instanceID: string | undefined) => {\n                const addIndividualModule = (currentModule: IModule) => {\n                    if (!mapNames[currentModule.moduleName]) {\n                        mapNames[currentModule.moduleName] = true;\n                        allModules.push(currentModule);\n                        ModuleRegistry.__register(currentModule, instanceID);\n                    }\n                };\n    \n                addIndividualModule(mod);\n                if (mod.dependantModules) {\n                    mod.dependantModules.forEach((m) => addModule(m, instanceID));\n                }\n            };\n    \n            if (passedViaConstructor) {\n                passedViaConstructor.forEach((m) => addModule(m, instanceID));\n            }\n    \n            if (registered) {\n                registered.forEach((module) =>\n                    addModule( module, undefined),\n                );\n            }\n    \n            return allModules;\n        }\n\n    private setTokenData(context : Context) : void {\n        const tokenDataStore = context.getBean(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) as ITokenDataStore;\n        const optionHandler = context.getBean(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        tokenDataStore.setTokenData(optionHandler.getData(), optionHandler.getDataMapping(),null, 'none', 'api', true);\n    }\n\n    private registerDefaultUserComponent(context: Context): void {\n        const userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n        const defaultComponent = {\n            'text'                     : TokenRenderer,\n            [PropertyName.TOKEN_EDITOR]: TokenEditor,\n            'image-text'               : TokenImageRenderer\n        };\n\n        traverseObject(defaultComponent, (name: string, component: any) => {\n            userComponentRegistry.registerDefaultComponent(name, component);\n        });\n    }\n\n    private registerModuleComponent(context: Context, registeredModules : IModule[]): void {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = this.createComponentList(registeredModules);\n        registry.setupComponents(components);\n    }\n\n    private createBeanClasses(): Set<any> {\n        const beanClasses = [\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n            TokenUserComponentHandler,\n\t\t\tEventHandler,\n            TokenOptionHandler,\n            TokenAPI,\n            TokenRendererHandler,\n            TokenDataStore,\n            TokenNavigationHandler,\n            TokenClassNameGenerator,\n            TokenEditHandler,\n            KeyboardShortcutRegistry,\n            ActionRegistry,\n            TokenKeyBoardNavigation,\n            TokenValueHandler,\n            TokenControllerHandler,\n            TokenTooltipHandler,\n            HookManager,\n            PopupHandler,\n            DropdownModel,\n            Dropdown\n\t\t];\n        return new Set(beanClasses);\n    }\n\n    private createUserConfiguration(configuration: any, params: IUserParams, instanceID: string, element : HTMLElement): { configuration: any; frameWorkOverrides: IFrameworkOverrides | null; globalEventListener: Function | null; frameworkComponentWrapper: any | null; instanceID: string; element : HTMLElement } {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n        if (!frameWorkOverrides) {\n            frameWorkOverrides = new VanillaFrameWorkOverrider();\n        }\n        return {\n            configuration,\n            frameWorkOverrides,\n            instanceID,\n            element,\n            frameworkComponentWrapper: params.frameworkComponentWrapper,\n            globalEventListener: params.globalEventListener ?? null,\n        };\n    }\n\n    private createComponentList(registeredModules : IModule[]) :  ComponentMeta[] {\n        let components: ComponentMeta[] = []\n\n        const moduleComps = this.extractModuleEntity(registeredModules, (module : IModule) => module.components ? module.components : []);\n\n        components = components.concat(moduleComps);\n\n        return components;\n    }\n\n    private extractModuleEntity(moduleEntities: any[], extractor: (module: any) => any) {\n        return [].concat(...moduleEntities.map(extractor));\n    }\n\n    private registerKeyBoardShortCuts(context : Context): void {\n\t\tconst keyBoardShortCutRegistry = context.getBean('keyBoardShortCutRegistry') as KeyboardShortcutRegistry;\n\n\t\tKeyboardShortcuts.forEach((keyBoardShortCut : IKeyBoardShortcutsParams) => {\n\t\t\tkeyBoardShortCutRegistry.registerShortcut(keyBoardShortCut.shortcut, keyBoardShortCut.action)\n\t\t})\n\t}\n\n    private registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n        {\n\t\t\tcomponentName: 'dg-select-box-inner',\n\t\t\tcomponentClass: TokenInnerComponent\n\t\t}\n    ];\n\n\treturn components;\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenRootComponentWrapperType, TokenRootControllerType } from \"./token-root.types\";\nimport { AutoWired } from \"@dg/corecomponent\";\nimport { TokenControllerHandlerType } from \"../../model/token-controller.types\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ClassNameGeneratorType } from \"../../model/classname-generator.types\";\nimport { TOKEN_EVENT } from \"../../constants/event\";\n\nexport class TokenRootController extends EventEmitter implements TokenRootControllerType {\n    @AutoWired('tokenControllerHandler') private tokenControllerHandler !: TokenControllerHandlerType;\n    @AutoWired(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) private classNameGenerator !: ClassNameGeneratorType; \n    private component !: TokenRootComponentWrapperType;\n    setComponent(component : TokenRootComponentWrapperType) : void {\n        this.component = component;\n        this.tokenControllerHandler.register('tokenRootController', this);\n        this.addDisabledClassName();\n\n        this.addListener(this.eventHandler, TOKEN_EVENT.PROPERTY_CHANGED, this.addDisabledClassName.bind(this));\n    }\n\n    getElement() : HTMLElement {\n        return this.component.getElement();\n    }\n\n    getRootElement() : HTMLElement {\n        return this.component.getRootElement();\n    }\n\n    destroyToken(): void {\n        this.component.destroy();\n    }\n\n    private addDisabledClassName() : void {\n        const isDisabled = this.optionsHandler.isDisabled();\n        const disabledClassName = this.classNameGenerator.getClassName('token', undefined, ['disabled']);\n        this.component.addOrRemoveCssClass(disabledClassName, isDisabled);\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { TokenRootComponentType, TokenRootComponentWrapperType } from \"./token-root.types\";\nimport { PostConstruct } from \"@dg/corecomponent\";\nimport { TokenRootController } from \"./token-root-controller\";\n\nfunction rootTemplate(){\n    const fragment = document.createDocumentFragment();\n\n    const root = document.createElement('div');\n    root.className = 'dg-selectbox__root dg-field__root dg-multiselect__root dg-token__root';\n\troot.setAttribute('ref', 'main');\n\n    const container = document.createElement('div');\n    container.className = 'dg-selectbox__container dg-field__container';\n\n    const inputWrapper = document.createElement('div');\n    inputWrapper.className = 'dg-selectbox__input-wrapper dg-field__input-wrapper';\n\n    const selectInner = document.createElement('dg-select-box-inner');\n    inputWrapper.appendChild(selectInner);\n    container.appendChild(inputWrapper);\n    root.appendChild(container);\n    fragment.appendChild(root);\n\treturn fragment;\n}\nexport class TokenRootComponent extends Component implements TokenRootComponentType {\n    private appendTo: HTMLElement | null | undefined;\n\tprivate rootElement !: HTMLElement;\n\n    constructor(appendTo : HTMLElement | undefined){\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n    @PostConstruct()\n\tinit() : void {\n\t\tconst root = rootTemplate() as any;\n\t\tthis.setTemplate(root);\n\n\t\tthis.rootElement = this.getRefElement('main');\n\t\tthis.appendTo && this.appendElementIntoUserDom();\n\n\t\tconst component : TokenRootComponentWrapperType = {\n\t\t\tgetElement         : () => this.getGui(),\n\t\t\tgetRootElement     : () => this.rootElement,\n\t\t\taddOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n            destroy            : () => this.destroyToken()\n\t\t}\n\t\tconst controller = this.createManagedBean(new TokenRootController());\n\t\tcontroller.setComponent(component);\n\t}\n\n    private appendElementIntoUserDom() :void{\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t})\n\t}\n\n\taddOrRemoveCssClass(className : string, toggle : boolean) {\n        if (className) {\n            if (className.indexOf(\" \") >= 0) {\n                const s = (className || \"\").split(\" \");\n                if (s.length > 1)\n                    return void s.forEach((e => this.addOrRemoveCssClass(e, toggle)))\n            }\n            if (className.length) {\n                const element = this.rootElement;\n                element && element.classList.toggle(className, toggle)\n            }\n        }\n    }\n\n    private destroyToken() : void {\n        this.appendTo && this.appendTo.removeChild(this.getGui());\n        this.appendTo = null;\n    }\n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { TokenInputComponentWrapperType, TokenInputControllerType } from \"./token-input.types\";\nimport { AutoWired, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ITokenOptionHandler } from \"../../model/token-option-handler.types\";\nimport { TOKEN_BEAN_NAME } from \"../../constants/beanname-constant\";\nimport { ITokenNavigationHandler } from \"../../model/token-navigation.types\";\nimport { ITokenDataStore } from \"../../model/token-data-store.types\";\nimport { ClassNameGeneratorType } from \"../../model/classname-generator.types\";\nimport { TokenValueHandlerType } from \"../../model/token-value-handler.types\";\nimport { TOKEN_EVENT } from \"../../constants/event\";\nimport { DropdownType } from \"../dropdown/Dropdown.types\";\n\nexport class TokenInputController extends EventEmitter implements TokenInputControllerType {\n    static DOM_KEY_TOKEN_INPUT_CTRL = 'tokenInputController';\n    public component!: TokenInputComponentWrapperType;\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    private initalized : boolean = false;\n    setComponent(component: TokenInputComponentWrapperType): void { \n        this.component = component;\n\n        const isDropdownNeeded = this.optionsHandler.isDropdownNeeded();\n\n        this.addListener(this.component.getElement(), 'keydown', (event: KeyboardEvent) => {\n\n            const inputElement = this.component?.getElement() as HTMLInputElement;\n            const separators   = this.optionsHandler.getSeparators();\n\n            const excludedKeys = ['Escape', 'Shift', 'Tab'];\n\n            if (inputElement.value.trim().length > 0 && !excludedKeys.includes(event.key)) {\n                event.stopPropagation();\n            }else {\n                if(event.key !== 'Backspace' && event.key !== 'Delete') {\n                    const tokenNavigationHandler = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) as ITokenNavigationHandler;\n                    tokenNavigationHandler.clearFocus();\n                }\n               \n            }\n\n            if (!event.isComposing && (separators.includes(event.key)|| event.key === 'Enter')) {\n                event.preventDefault(); \n                const tokenValue = inputElement.value.trim(); \n                if (tokenValue) {\n                    this.createValidatedToken(tokenValue); \n                }\n            }\n        });\n\n        isDropdownNeeded && this.addListener(this.component.getElement(), 'input' ,(event) => {\n            const inputElement     = this.component?.getElement() as HTMLInputElement;\n            const isDropdownNeeded = this.optionsHandler.isDropdownNeeded();\n            if(isDropdownNeeded) {\n                const searchMinKeyword = this.optionsHandler.getSearchMinKeyword();\n                const value            = inputElement.value.trim();\n                const dropdown         = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.DROPDOWN) as DropdownType;\n                if(value.length >= searchMinKeyword) {\n                    !dropdown.isDropdownOpened() && dropdown.openDropdown(event, value);\n                    dropdown.isDropdownOpened() && dropdown.searchQuery(value)\n                    return;\n                }else {\n                    dropdown.isDropdownOpened() && dropdown.closeDropdown(event)\n                }\n                \n            }\n        })\n\n        this.addListener(this.component.getElement(),'paste', (_event: ClipboardEvent) => {\n            // const pastedText = event.clipboardData?.getData('text') || '';\n            // this.createValidatedToken(pastedText);\n            // event.preventDefault();\n        });\n        \n\n        this.addListener(this.component.getElement(), 'focusin', (ev : FocusEvent) => {\n            const tokenNavigationHandler = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) as ITokenNavigationHandler;\n            tokenNavigationHandler.clearFocus();\n            const isDropdownNeeded = this.optionsHandler.isDropdownNeeded();\n\n            if(isDropdownNeeded) {\n                const inputElement     = this.component?.getElement() as HTMLInputElement;\n                const dropdown         = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.DROPDOWN) as DropdownType;\n                const searchMinKeyword = this.optionsHandler.getSearchMinKeyword();\n                const value            = inputElement.value.trim();\n                if(value.length >= searchMinKeyword) {\n                    !dropdown.isDropdownOpened() && dropdown.openDropdown(ev);\n                }\n                return;\n            }\n        })\n\n        this.addListener(this.component.getElement(), 'focusout', (ev) => {\n            const isDropdownNeeded = this.optionsHandler.isDropdownNeeded();\n\n            if(isDropdownNeeded) {\n                const elementWithFocus = ev.relatedTarget as HTMLElement;\n\n                const closeCallback = () => {\n                   this.focusoutHandler(ev);\n                }\n\n                if(!this.isElementWithinCustomPopup(elementWithFocus)) {\n                    closeCallback();\n                }\n                return;\n            }else {\n                const inputElement = this.component?.getElement() as HTMLInputElement;\n                const tokenValue = inputElement.value.trim(); \n                if (tokenValue) {\n                    this.createValidatedToken(tokenValue); \n                }\n            }\n        })\n\n        this.addListener(this.component.getElement(), 'mousedown', (event: MouseEvent) => {\n            event.stopPropagation();\n        })\n\n        this.addListener(this.eventHandler, 'EVENT_INPUT_DATA_UPDATE', () => {\n            const inputElement = this.component?.getElement() as HTMLInputElement;\n            const tokenValue = inputElement.value.trim(); \n            if (tokenValue) {\n                this.createValidatedToken(tokenValue); \n            }\n        })\n        this.addDomData();\n        this.addClassName();    \n        this.addListener(this.eventHandler, 'tokenFocused', this.onInputFocused.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_UI_RENDERER', this.setAutoFocus.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_INPUT_FOCUS', this.focus.bind(this));\n        this.addListener(this.eventHandler, 'EVENT_DROPDOWN_VALUE_SELECT', () => {\n\n            this.focus();\n            this.resetInput();\n        });\n\n\n        this.addListener(this.eventHandler, TOKEN_EVENT.MODEL_UPDATE, this.addOrRemovePlaceHolder.bind(this));\n        this.addListener(this.eventHandler, TOKEN_EVENT.PROPERTY_CHANGED, this.setDisabled.bind(this));\n        this.addListener(this.eventHandler, 'TOKEN_FOCUSOUT', this.focusoutHandler.bind(this));\n        this.setInitValue();\n        this.addOrRemovePlaceHolder();\n        this.setDisabled();\n    }\n\n    private focusoutHandler(event : FocusEvent): void {\n        const inputElement = this.component?.getElement() as HTMLInputElement;\n\t\tconst tokenValue = inputElement.value.trim(); \n        const dropdown = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.DROPDOWN) as DropdownType;\n        dropdown.closeDropdown(event);\n        if (tokenValue) {\n            this.createValidatedToken(tokenValue); \n        }\n    }\n\n    private isElementWithinCustomPopup(element: HTMLElement): boolean {\n        let pointer: HTMLElement | null = element;\n        \n        while (pointer) {\n            if (pointer.classList.contains('ZG-popup-dropdown')) {\n                return true;\n            }\n            pointer = pointer.parentElement;\n        }\n\n        return false;\n    }\n\n    setDisabled() : void {\n        const inputElement          = this.component.getElement() as HTMLInputElement;\n        const tokenOptionsManager   = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        const isDisabled            = tokenOptionsManager.isDisabled();\n\n        inputElement.disabled = isDisabled\n    }\n\n    private addOrRemovePlaceHolder() : void {\n        const tokenOptionsManager = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        const tokenStore          = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) as ITokenDataStore;\n        const placeHolder         = tokenOptionsManager.getPlaceHolder();\n        const hasAnyToken         = tokenStore.getTotalToken() > 0;\n        const inputElement        = this.component.getElement() as HTMLInputElement;\n\n        if( placeHolder && !hasAnyToken) {\n            inputElement.placeholder = placeHolder;\n        }else {\n            inputElement.placeholder = '';\n        }\n    }\n\n    setInitValue() : void {\n        if(this.initalized) {\n            return;\n        }\n        const tokenOptionsManager = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        const element             = this.component.getElement() as HTMLInputElement;\n              element.value       = tokenOptionsManager.getSearchValue();\n\n        this.initalized = true;\n    }\n\n    focus(): void {\n        const element = this.component.getElement();\n        element.focus();\n    }\n\n    setAutoFocus() : void {\n        const tokenOptionsManager = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        const autoFocus = tokenOptionsManager.isAutoFocus();\n        if(autoFocus) {\n            this.focus();\n        }\n    }\n\n    resetInput() : void {\n        const inputElement = this.component?.getElement() as HTMLInputElement;\n        inputElement.value = '';\n\n        const isDropdownNeeded = this.optionsHandler.isDropdownNeeded();\n\n        if(isDropdownNeeded) {\n            const isCloseOnSelect = this.optionsHandler.isCloseOnSelect();\n            if(isCloseOnSelect) {\n                const dropdown = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.DROPDOWN) as DropdownType;\n                dropdown.isDropdownOpened() && dropdown.closeDropdown();\n            }\n\n            const dropdown = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.DROPDOWN) as DropdownType;\n            dropdown.searchQuery(inputElement.value.trim())\n        }\n    }\n\n    onMouseEvent(eventName: string, _event: MouseEvent): void {\n        switch(eventName) {\n            case 'mousedown':\n            case 'touchstart':\n                this.focus();\n                return;\n        }\n    }\n\n    private addClassName() : void {\n        const classNameGenerator = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_CLASSNAME_GENERATOR) as ClassNameGeneratorType;\n        const baseClassName = classNameGenerator.getClassName('token-input')\n        this.component.addOrRemoveCssClass(baseClassName, true);\n    }\n\n    private createValidatedToken(value: string): void {\n\n        const isAcceptNewValues = this.optionsHandler.isAcceptNewValues();\n\n        if(!isAcceptNewValues) {\n            this.resetInput();\n            return;\n        }\n\n        const tokenStore                = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_DATA_STORE) as ITokenDataStore;\n        const isMaxAllowedValuesReached = tokenStore.isMaxAllowedValuesReached();\n\n        if(isMaxAllowedValuesReached) {\n            return;\n        }\n\n        const valueValidator            = this.getBeanInstanceByBeanName('TokenValueHandler') as TokenValueHandlerType;\n        const tokenOptionsManager       = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n        const separators                = this.optionsHandler.getSeparators();\n\n        const tokenDatas = this.splitValueBySeparators(value, separators);\n        if(tokenDatas) {\n            tokenDatas.forEach((tokenValue) => {\n                const isDataValid                    = valueValidator.validateValue(tokenValue);\n                const shouldCreateTokenOnInValidData = tokenOptionsManager.isCreateTokenOnInValidData();\n            \n                if (isDataValid) {\n                    const tokenData   = valueValidator.getDataByValue(tokenValue);\n                    tokenStore.setTokenData([tokenData], this.optionsHandler.getDataMapping(), null, 'none' , 'ui');\n                    this.resetInput();\n                } else {\n                    if (shouldCreateTokenOnInValidData) {\n                        const tokenData   = valueValidator.getDataByValue(tokenValue);\n                        tokenStore.setTokenData([tokenData], this.optionsHandler.getDataMapping(), null, 'none', 'ui');\n                        this.resetInput();\n                    }\n                }\n            })\n        }\n        \n    }\n    \n    private splitValueBySeparators(value: string, separators: string[]): string[] {\n        if (!value.trim()) return []; // Return an empty array for empty input\n        const regex = new RegExp(separators.join(\"|\"), 'g'); // Create regex from separators\n        return value.split(regex).filter((token) => token.trim().length > 0); // Split and filter empty tokens\n    }\n\n\n    private onInputFocused(params : any) : void {\n        const element                = this.component.getElement();\n        const tokenNavigationHandler = this.getBeanInstanceByBeanName(TOKEN_BEAN_NAME.TOKEN_NAVIGATION) as ITokenNavigationHandler;\n        const isTokenNotFocused      = !(tokenNavigationHandler.getFocusedToken());\n        if(isTokenNotFocused) {\n            element.focus();\n        }\n\n        if(params.force) {\n            element.focus();\n        }\n    }\n    private addDomData() : void {\n        const element       = this.component.getElement()\n        const optionHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as ITokenOptionHandler;\n\n        optionHandler.setDomData( element, TokenInputController.DOM_KEY_TOKEN_INPUT_CTRL, this);\n        this.addDestroyFunc(() => optionHandler.setDomData( element, TokenInputController.DOM_KEY_TOKEN_INPUT_CTRL, null) );\n    }\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport { TokenInputComponentType, TokenInputComponentWrapperType } from \"./token-input.types\";\nimport { PostConstruct } from \"@dg/corecomponent\";\nimport { TokenInputController } from \"./token-input-controller\";\n\nfunction getTemplate() : HTMLInputElement {\n    const input = document.createElement('input');\n    return input;\n}\nexport class TokenInputComponent extends Component implements TokenInputComponentType {\n    @PostConstruct()\n    init() : void {\n        const component : TokenInputComponentWrapperType = {\n            getElement  : () => this.getGui(),\n            addOrRemoveCssClass      : (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n        }\n\n        this.setTemplate(getTemplate());\n        const controller = this.createManagedBean(new TokenInputController());\n        controller.setComponent(component);\n    }\n\n    destroy(): void {\n        super.destroy();    \n    }\n\n    getElement(): HTMLElement {\n        return this.getGui();\n    }\n}\n","import { IModule } from \"../../../core/modules.types\";\nimport { TokenInputComponent } from \"../core/token-input/token-input-view\";\n\nexport const TokenModule : IModule = {\n    version : '1.0.0',\n    moduleName : 'token',\n    modelType : 'token',\n    components : [\n        {\n            componentName : 'TokenInputComponent',\n            componentClass: TokenInputComponent\n        }\n    ]\n}","export const RADIO_BEAN_NAME = {\n    RADIO_API                : 'radioAPI',\n    RADIO_CONFIGURATION      : 'configuration',\n    CSSCLASSNAMEGENERATOR    : 'CSSClassNameGenerator',\n    RADIO_ADJUSTER_HANDLER   : 'radioAdjusterHandler',\n    FORMATTER                : 'formatter',\n    KEYBOARD_SHORTCUT_HANDLER: 'KeyBoardShortCutsHandler',\n    RADIO_RENDER_CONTROLLER  : 'radioRenderController'\n}","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","\nimport { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../../modules/CSSRegistry\";\n\n// const globalNameSpace = CSSRegistry.getNameSpaces();\n\nexport function getRadioRootUtilityClass(slots: { slot: string, modifiers: string[] }): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('radio', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { AutoWired, BEAN_NAME, setAriaChecked, setAriaDisabled, setAriaLabelledBy } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IRadioOptionHandler } from \"../model/radio-option-handler\";\nimport { IRadioHandler } from \"../model/radio-controller-handler\";\nimport { getRadioRootUtilityClass } from \"../radio-root/radio-root-classes\";\nimport { RadioInputWrapperCompType } from \"./radio-input-wrapper-types\";\nimport { IRadioConfiguration } from \"../../radio-configuration.types\";\nimport { IRadioOptionManager } from \"../model/radio-ds\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { RadioUserComponentHandlerTypes } from \"../model/radio-user-component-handler.types\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\nimport { RadioOptionType } from \"../model/radio-option.types\";\nimport type { RadioRenderControllers } from \"../model/render-controller\";\n\n\nconst useUtilityClasses = () =>{\n    const slots ={\n        root : {\n            slot : 'input-wrapper',\n            modifiers:[\n            ],\n        },\n    };\n    return composeClasses(slots, getRadioRootUtilityClass);\n}\n\nexport class RadioInputWrapperController extends EventEmitter{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: IRadioOptionHandler;\n    @AutoWired(\"controllerHandler\") protected RadioHandler !: IRadioHandler;\n    @AutoWired(\"RADIO_OPTION_MANAGER\") protected radioOptionManager!: IRadioOptionManager;\n    @AutoWired(RADIO_BEAN_NAME.RADIO_CONFIGURATION) configuration!: IRadioConfiguration;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: RadioUserComponentHandlerTypes;\n    @AutoWired(RADIO_BEAN_NAME.RADIO_RENDER_CONTROLLER) private radioRenderControllers !: RadioRenderControllers;\n\n    private addInputDestroyFunc : CallableFunction[] = []; \n\n\n    private comp!: RadioInputWrapperCompType\n\n    index = 0;\n    private option!: RadioOptionType;\n    checkbox !:any;\n\n    constructor(option : RadioOptionType, index : number) {\n        super();\n        this.option = option;\n        this.index  = index;\n    }\n\n\n\n\n    setComponent(component: RadioInputWrapperCompType): void {\n        this.comp = component;\n        const element = this.comp.getGui();\n\n        element.setAttribute('data-option-id', this.getID());\n        this.setValue();\n        this.applyClasses();\n        this.setAriaAttributes();\n        this.registerEvents();\n        this.updateDefaultSelectedOption();\n        this.setName()\n\n        this.addListener(this.eventHandler,'PROPERTY_CHANGED',() => {\n            this.setValue();\n            this.updateDefaultSelectedOption();\n            this.refresh();\n            this.registerEvents();\n        });\n\n        this.addListener(this.option, \"EVENT_OPTION_UPDATED\", () => {\n            this.setValue();\n            this.updateDefaultSelectedOption();\n            this.refresh();\n            this.registerEvents();\n        })\n\n    }\n\n\n    private setName(){\n        const radioInput = this.comp.getRadio();\n        const name = this.radioOptionManager.getName()\n        radioInput.setAttribute('name',name)\n\n    }\n\n    private setValue() : void {\n        const radioElement         = this.comp.getRadio();\n        const radioLabelElement    = this.comp.getRadioLabelElement();\n        const option               = this.getItem().getOption();\n              radioElement.name    = this.optionHandler.getName();\n              radioLabelElement.id = `label${this.getID()}`;\n\n        option.label && (radioLabelElement.textContent = option.label ?? \"\");\n        if(!option.label){\n            radioLabelElement.textContent = option.value\n        }\n        radioElement.setAttribute(\"data-option-id\", this.getID());\n        option.value && radioElement.setAttribute(\"value\", option.value);\n    }\n\n    private addInputListener(element : HTMLElement, eventName : string, listener : EventListener) : void {\n        element.addEventListener(eventName, listener);\n        this.addInputDestroyFunc.push(() => {\n            element.removeEventListener(eventName, listener);\n        })\n    }\n\n    private destroyInputListener() : void {\n        this.addInputDestroyFunc.forEach((destroyFunc) => {\n            destroyFunc();\n        })\n    }\n\n\n    updateDefaultSelectedOption():void{\n        const defaultSelectedId = this.optionHandler.getDefaultSelected();\n        // First uncheck all options\n        const radioInputComp = this.comp.getRadio() as HTMLInputElement;\n        if(radioInputComp) {\n            radioInputComp.checked = false;\n            radioInputComp.removeAttribute('checked');\n        }\n        \n        // Then check the default selected option if it matches\n        if(defaultSelectedId && this.option.getId() === defaultSelectedId){\n            if(radioInputComp){ \n                radioInputComp.checked = true;\n                radioInputComp.setAttribute('checked','');\n                this.radioOptionManager.updateSelectedOption(this.option.getId());\n            }\n        }\n    }\n\n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCssClass(classes.root);\n        if(this.option.isDisabled() === true || this.optionHandler.isDisabled()){\n            this.comp.getGui().classList.add('dg-input__status--disabled');\n        }\n    }\n\n    private setAriaAttributes():void{\n        const radioInput =  this.comp.getRadio();\n        const isDisabled  = this.optionHandler.isDisabled();\n        isDisabled ? radioInput.setAttribute(\"disabled\", '') : radioInput.removeAttribute('disabled');\n        setAriaChecked(radioInput,this.radioOptionManager.isOptionSelected(this.option.getId()));\n        setAriaLabelledBy(radioInput,`label${this.option.getId()}`);\n        setAriaDisabled(radioInput, this.optionHandler.isDisabled());\n    }\n\n    refresh() : void {\n        this.applyClasses();\n        this.setAriaAttributes();\n    }\n\n\n    private registerEvents() : void {\n        const inputWrapperComp = this.comp.getGui();\n        const ownerState = this.getOwnerState();\n\n        if(ownerState.disabled) {\n            this.destroyInputListener();\n        }else {\n            this.addInputListener(inputWrapperComp, 'click',  (event) => {\n                event.preventDefault();\n                const readonly = this.optionHandler.isReadOnly()\n                if(!readonly){\n                    this.clickOption();\n                }\n            })\n        }\n\n    }\n\n    enableListener() : void {\n        const inputWrapperComp = this.comp.getGui();\n        inputWrapperComp.addEventListener('click', (event) => {\n            event.preventDefault();\n            this.clickOption();\n        });\n    }\n\n    disableListener() : void {\n        const inputWrapperComp = this.comp.getGui();\n        inputWrapperComp.removeEventListener('click', (event) => {\n            event.preventDefault();\n            this.clickOption();\n        });\n    }\n\n    clickOption(initiator : 'api' | 'ui' = 'ui'){\n        this.configuration?.onBeforeSelect?.(this.option);\n        console.log(this.radioRenderControllers.getControllers())\n        const radioInputComp =  this.comp.getRadio() as HTMLInputElement;\n        if(radioInputComp){ \n            // Uncheck the previously selected option\n            const lastSelectedOption = this.radioOptionManager.getSelectedOption();\n            if (lastSelectedOption) {\n                const lastSelectedController = this.radioRenderControllers.getController(lastSelectedOption.getId());\n                const lastSelectedRadio = lastSelectedController?.comp.getRadio() as HTMLInputElement;\n                if (lastSelectedRadio) {\n                    lastSelectedRadio.checked = false;\n                    lastSelectedRadio.removeAttribute('checked');\n                }\n            }\n\n            // Check the new option\n            radioInputComp.checked = true;\n            radioInputComp.setAttribute('checked', '');\n            \n            if(!lastSelectedOption || this.option.getValue() !== lastSelectedOption.getValue()){\n                this.optionHandler.onChange({\n                    option : this.option,\n                    initiator\n                });\n            }\n            this.radioOptionManager.updateSelectedOption(this.option.getId());\n        }\n        \n        this.refresh();\n        this.optionHandler.onClick(this.option.getValue());\n        this.configuration?.onAfterSelect?.(this.option);\n    }\n\n    \n\n    private getOwnerState() {\n        return {\n            disabled: this.optionHandler.isDisabled() ?? false,\n            readonly: this.optionHandler.isReadOnly() ?? false,\n            isShowAsBlock : this.optionHandler.isShowAsBlock() ?? false\n        }\n\t}\n\n    getProperty(): any{\n        return {\n            value        : this.option.getValue(),\n            label        : this.option.getLabel(),\n            id           : this.option.getId(),\n            name         : this.optionHandler.getName(),\n            isShowAsBlock: this.optionHandler.isShowAsBlock(),\n            option       : this.option,\n            readonly : this.option.isReadonly()\n        }\n    }\n\n    getElement() : HTMLElement | undefined {\n        return this.comp?.getGui();\n    }\n\n    hide(){\n        const compGui = this.comp?.getGui();\n        if (compGui) {\n          compGui.style.display = 'none';\n        }\t\n\t}\n\n\tshow(){\n        const compGui = this.comp?.getGui();\n        if (compGui) {\n          compGui.style.display = 'flex';\n        }\t\n\t}\n\n    disable(){\n        const radioInputComp =  this.comp.getRadio() as HTMLInputElement;\n        if(radioInputComp){ \n            radioInputComp.disabled =  true;\n        }\n        this.option && (this.option.updateDisable(true));\n        this.refresh();\n    }\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createOptionRendererWrapper();\n        const params          = this.createRendererParam();\n        const  userDetails    = this.userComponentHandler.getOptionRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.comp.setRendererDetails(userDetails);\n    }\n    private createOptionRendererWrapper() {\n        \n        return {\n\t\t\tgetRenderer          : () => this.option.getRenderer(),\n\t\t\tgetUserRendererParams: () => this.option.getRendererParams(),\n\n\t\t};\n    }\n    private createRendererParam() {\n        return {\n\t\t\toption: this.option,\n            optionParams : this.option.getRendererParams(), \n\t\t};\n    }\n\n    getItem() : RadioOptionType {\n        return this.option;\n    }\n\n    destroy() : void {\n        super.destroy();\n    }\n\n    getID() : string {\n        return this.option.getId();\n    }\n\n    getComp(): RadioInputWrapperCompType{\n        return this.comp\n    }\n}\n","import { IGenericDataStore } from \"./generic-data-store.types\";\n\nexport class GenericDataStore<T> implements IGenericDataStore<T> {\n    private dataMap: Map<string, T>;\n    private order: string[];\n  \n    constructor() {\n      this.dataMap = new Map();\n      this.order = [];\n    }\n  \n    /**\n     * Add a new data item to the store.\n     * @param id - Unique identifier for the data item.\n     * @param data - Data item to store.\n     */\n    addData(id: string, data: T): void {\n      if (!this.dataMap.has(id)) {\n        this.dataMap.set(id, data);\n        this.order.push(id);\n      }\n    }\n  \n    /**\n     * Retrieve a data item by its ID.\n     * @param id - The ID of the data item.\n     */\n    getData(id: string): T | undefined {\n      return this.dataMap.get(id);\n    }\n  \n    /**\n     * Remove a data item by its ID.\n     * @param id - The ID of the data item to remove.\n     * @returns True if the data was removed, false otherwise.\n     */\n    removeData(id: string): boolean {\n      if (this.dataMap.has(id)) {\n        this.dataMap.delete(id);\n        this.order = this.order.filter((orderId) => orderId !== id);\n        return true;\n      }\n      return false;\n    }\n  \n    /**\n     * Check if a data item exists in the store.\n     * @param id - The ID to check.\n     */\n    hasData(id: string): boolean {\n      return this.dataMap.has(id);\n    }\n  \n    /**\n     * Get all data items in order.\n     */\n    getAllData(): T[] {\n      return this.order.map((id) => this.dataMap.get(id)!) as T[];\n    }\n  \n    /**\n     * Insert a new data item after an existing one.\n     * @param existingId - The ID of the existing data item.\n     * @param newId - The ID of the new data item.\n     * @param newData - The new data item.\n     */\n    insertDataAfterId(existingId: string, newId: string, newData: T): boolean {\n      const index = this.order.indexOf(existingId);\n      if (index === -1 || this.dataMap.has(newId)) {\n        return false;\n      }\n  \n      this.order.splice(index + 1, 0, newId);\n      this.dataMap.set(newId, newData);\n      return true;\n    }\n  \n    /**\n     * Insert a new data item before an existing one.\n     * @param existingId - The ID of the existing data item.\n     * @param newId - The ID of the new data item.\n     * @param newData - The new data item.\n     */\n    insertDataBeforeId(existingId: string, newId: string, newData: T): boolean {\n      const index = this.order.indexOf(existingId);\n      if (index === -1 || this.dataMap.has(newId)) {\n        return false;\n      }\n  \n      this.order.splice(index, 0, newId);\n      this.dataMap.set(newId, newData);\n      return true;\n    }\n  \n    /**\n     * Delete all data items after a specific ID.\n     * @param id - The ID after which data items should be deleted.\n     */\n    deleteDataAfterId(id: string): void {\n      const index = this.order.indexOf(id);\n      if (index !== -1 && index < this.order.length - 1) {\n        const idsToDelete = this.order.splice(index + 1);\n        idsToDelete.forEach((deleteId) => this.dataMap.delete(deleteId));\n      }\n    }\n  \n    /**\n     * Delete all data items before a specific ID.\n     * @param id - The ID before which data items should be deleted.\n     */\n    deleteDataBeforeId(id: string): void {\n      const index = this.order.indexOf(id);\n      if (index !== -1 && index > 0) {\n        const idsToDelete = this.order.splice(0, index);\n        idsToDelete.forEach((deleteId) => this.dataMap.delete(deleteId));\n      }\n    }\n  \n    /**\n     * Retrieve data items within a range of indices.\n     * @param fromIndex - The start index (inclusive).\n     * @param toIndex - The end index (inclusive).\n     */\n    getDataInRange(fromIndex: number, toIndex: number): T[] {\n      if (fromIndex < 0 || toIndex >= this.order.length || fromIndex > toIndex) {\n        return [];\n      }\n  \n      const idsInRange = this.order.slice(fromIndex, toIndex + 1);\n      return idsInRange.map((id) => this.dataMap.get(id)!) as T[];\n    }\n\n    getNextId(id: string): string | null {\n        let index = this.order.findIndex((existingId) => existingId === id);\n    \n        if (index !== -1) {\n            \n            if (index + 1 < this.order.length) {\n                return this.order[index + 1]; \n            }\n        }\n    \n        return null; \n    }\n\n    getPreviousId(id: string): string | null {\n        let index = this.order.findIndex((existingId) => existingId === id);\n    \n        if (index > 0) {\n            return this.order[index - 1]; \n        }\n    \n        return null; \n    }\n\n    getFirstId(): string | null {\n        if (this.order.length > 0) {\n            return this.order[0]; \n        }\n    \n        return null; \n    }\n\n    getLastId(): string | null {\n        if (this.order.length > 0) {\n            return this.order[this.order.length - 1]; \n        }\n    \n        return null; \n    }\n\n    getOrders(): string[] {\n      return this.order ?? [];\n    }\n  }\n  ","import { AutoWired, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IGenericDataStore } from \"./generic-data-store.types\";\nimport { RadioInputWrapperController } from \"../radio-input-wrapper/radio-input-wrapper-controller\";\nimport { GenericDataStore } from \"./generic-data-store\";\nimport { IRadioOptionManager } from \"./radio-ds\";\n\n@Bean(RADIO_BEAN_NAME.RADIO_RENDER_CONTROLLER)\nexport class RadioRenderControllers extends EventEmitter {\n    @AutoWired(\"RADIO_OPTION_MANAGER\") protected radioOptionManager!: IRadioOptionManager;\n    private controllers : IGenericDataStore<RadioInputWrapperController> = new GenericDataStore<RadioInputWrapperController>();\n    \n    @PostConstruct()\n    init() : void {\n        this.updateRadios();\n        this.addListener(this.eventHandler, 'EVENT_RADIO_OPTION_UPDATE', this.updateRadios.bind(this));\n    }\n\n    private updateRadios() : void {\n        this.controllers = this.createRadioControllers(this.controllers);\n        this.dispatchEvent({\n            type : \"EVENT_RADIO_UPDATED\"\n        })\n    }\n\n    private createRadioControllers(prevControllers :  IGenericDataStore<RadioInputWrapperController>) :  IGenericDataStore<RadioInputWrapperController> {\n        const radioControllers = new GenericDataStore<RadioInputWrapperController>();\n        const items = this.radioOptionManager.getOptions();\n        items.forEach((item, index) => {\n            const id              = `${item.getId()}`;\n            const controllerExist = prevControllers.hasData(id);\n            let tokenController = prevControllers.getData(id)!;\n            if(!controllerExist) {\n                tokenController = this.createManagedBean(new RadioInputWrapperController( item, index));\n            }\n            radioControllers.addData(id ,tokenController);\n\n        });\n\n        prevControllers.getAllData().forEach((previousController) => {\n            const radioItem = previousController.getItem();\n            const tokenCtrl = radioControllers.hasData(`${radioItem.getId()}`);\n            if (tokenCtrl) {\n                return;\n            }\n            previousController.destroy();\n        })\n\n        return radioControllers;\n    }\n\n    destroyAllControllers() : void {\n        this.controllers.getAllData().forEach((previousController) => {\n            previousController.destroy();\n        })\n    }\n\n    getController(id : string) : RadioInputWrapperController | null {\n        return this.controllers.getData(id) ?? null;\n    }\n\n    getControllers() : RadioInputWrapperController[] {\n        return this.controllers.getAllData();\n    }\n}","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getRadioRootUtilityClass } from \"./radio-root-classes\";\nimport { RadioRootCompType } from \"./radio-root-types\";\nimport { IRadioOptionHandler } from \"../model/radio-option-handler\";\nimport { IRadioHandler } from \"../model/radio-controller-handler\";\nimport type { RadioStateManager } from \"../model/radio-state-manager\";\nimport { IRadioOptionManager } from \"../model/radio-ds\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { RadioRenderControllers } from \"../model/render-controller\";\n\n\nconst useUtilityClasses = () =>{\n    const slots ={\n        root : {\n            slot : 'root',\n            modifiers:[\n            ],\n        },\n\n    };\n    return composeClasses(slots, getRadioRootUtilityClass);\n}\n\nexport class RadioRootController extends EventEmitter{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: IRadioOptionHandler;\n    @AutoWired(\"controllerHandler\") protected RadioHandler !: IRadioHandler;\n    @AutoWired('stateManager') private stateManager !: RadioStateManager;\n    @AutoWired('RADIO_OPTION_MANAGER') private radioOptionManager !: IRadioOptionManager\n    @AutoWired(RADIO_BEAN_NAME.RADIO_RENDER_CONTROLLER) private radioRenderControllers !: RadioRenderControllers\n\n    private comp!: RadioRootCompType\n\n    setComponent(component: RadioRootCompType): void {\n        this.comp = component;\n        this.applyClasses();\n        this.RadioHandler.registerRadioRootController(this);\n\n        const element = this.comp.getGui();\n        this.setTabindex();\n\n\n        this.addListener(element, 'focus', (event) => {\n            this.optionHandler.onFocus(event);\n\n        })\n\n\n        this.addListener(element, 'blur', (event) => {\n            this.optionHandler.onBlur(event);\n        })\n\n        this.addListener(element, 'keydown',this.handleKeyDown.bind(this))\n\n        this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.addErrorClassName.bind(this));\n        this.addErrorClassName();\n        this.addListener(this.eventHandler, 'PROPERTY_CHANGED', this.applyClasses.bind(this))\n        this.addListener(this.eventHandler,'PROPERTY_CHANGED',this.setTabindex.bind(this))\n    }\n\n     private addErrorClassName() : void {\n\t\tconst isInValid = this.stateManager.isInValid();\n\t\tthis.comp!.getGui().classList.toggle(\"dg-input__status--error\", isInValid)\n\t}\n\n    private setTabindex():void{\n        const element = this.comp.getGui();\n\n        if(!this.optionHandler.isDisabled()){\n            element.setAttribute('tabindex','0')\n        }else{\n            element.removeAttribute('tabindex')\n\n        }\n       \n\n    }\n\n    private handleKeyDown(event : KeyboardEvent){\n        const key = event.key\n\n        const readonly = this.optionHandler.isReadOnly()\n        if(readonly){\n            return\n        }\n\n\n        switch (key) {\n            case \"ArrowDown\":\n                case \"ArrowRight\":\n            const nextOption = this.radioOptionManager.getNextOption()\n\n         if(nextOption){\n             const lastSelectedOption = this.radioOptionManager.getSelectedOption();\n                if (lastSelectedOption) {\n                const lastSelectedController = this.radioRenderControllers.getController(lastSelectedOption.getId());\n                const lastSelectedRadio = lastSelectedController?.getComp().getRadio() as HTMLInputElement;\n                if (lastSelectedRadio) {\n                    lastSelectedRadio.checked = false;\n                    lastSelectedRadio.removeAttribute('checked');\n                }\n            }\n\n            if(nextOption){\n                const newSelectedController = this.radioRenderControllers.getController(nextOption.getId());\n                const newSelectedRadio = newSelectedController?.getComp().getRadio() as HTMLInputElement;\n                if (newSelectedRadio) {\n                    newSelectedRadio.checked = true;\n                    newSelectedRadio.setAttribute('checked','');\n                }\n                this.optionHandler.onChange({ option : nextOption, initiator: 'ui'})\n            this.radioOptionManager.updateSelectedOption(nextOption.getId());\n\n\n\n            }}\n\n              break;\n\n            case \"ArrowUp\":\n                case \"ArrowLeft\":\n            const previousOption = this.radioOptionManager.getPreviousOption()\n         if(previousOption){\n             const lastSelectedOption = this.radioOptionManager.getSelectedOption();\n                if (lastSelectedOption) {\n                const lastSelectedController = this.radioRenderControllers.getController(lastSelectedOption.getId());\n                const lastSelectedRadio = lastSelectedController?.getComp().getRadio() as HTMLInputElement;\n                if (lastSelectedRadio) {\n                    lastSelectedRadio.checked = false;\n                    lastSelectedRadio.removeAttribute('checked');\n                }\n            }\n\n            if(previousOption){\n                const newSelectedController = this.radioRenderControllers.getController(previousOption.getId());\n                const newSelectedRadio = newSelectedController?.getComp().getRadio() as HTMLInputElement;\n                if (newSelectedRadio) {\n                    newSelectedRadio.checked = true;\n                    newSelectedRadio.setAttribute('checked','');\n                }\n                this.optionHandler.onChange({ option : previousOption, initiator: 'ui'})\n            this.radioOptionManager.updateSelectedOption(previousOption.getId());\n\n\n\n            }}\n\n\n                break;\n        }\n\n    }\n\n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCssClass(classes.root);\n        \n        // Apply layout class\n        const layout = this.optionHandler.getLayout();\n        this.comp.getGui().classList.remove('dg-radio__list-vertical', 'dg-radio__list-horizontal');\n        this.comp.getGui().classList.add(layout === 'vertical' ? 'dg-radio__list-vertical' : 'dg-radio__list-horizontal');\n        \n        // Apply block class if needed\n        if (this.optionHandler.isShowAsBlock()) {\n            this.comp.getGui().classList.add('dg-radio__toggle-type');\n        } else {\n            this.comp.getGui().classList.remove('dg-radio__toggle-type');\n        }\n\n        const isDisabled = this.optionHandler.isDisabled();\n        this.comp.getGui().classList.toggle('dg-input__status--disabled', isDisabled);\n    }\n\n    refresh(): void {\n        this.applyClasses();\n    }\n\n    getProperty(): any{\n        return {\n            // isDisabled : ()=>this.optionHandler.isDisabled(),\n            // isReadOnly : ()=>this.optionHandler.isReadOnly(),\n            getLabel : ()=>this.optionHandler.getLabel(),\n            // isRequired : ()=>this.optionHandler.isRequired(),\n            getDescription : ()=>this.optionHandler.getDescription(),\n            error : this.optionHandler.showErrorState(),\n            ignoreEmptyDOM       : this.optionHandler.shouldGenerateEmptyDom(),\n\n        }\n    }\n\n    getParamsProperty(){\n        return {\n            label : {\n\t\t\t\tgetLabelClasses :()=> \"dg-radio__label\",\n\t\t\t\tgetLabelTitleClasses :()=> \"dg-radio__label-title\"\n\t\t\t},\n\n\t\t\tdescription : {\n\t\t\t\tgetValidationMessageClasses : ()=>  \"dg-radio__validation-message\",\n\t\t\t\tgetDescriptionClasses :()=> \"dg-radio__description\"\n\n\n\t\t\t}\n        };\n    }\n\n    getElement() : HTMLElement | undefined {\n        return this.comp?.getGui();\n    }\n\n    hide(subElements : string[] = []){\n        if(subElements.length === 0) {\n            const compGui = this.comp?.getGui();\n            if (compGui) {\n                this.comp.getGui().classList.add(\"dg-hide\");\n            }\n        }else {\n            this.dispatchEvent({\n                type: 'EVENT_VISIBILITY_CHANGED',\n                error: subElements.includes('error') ? true : undefined,\n                description: subElements.includes('description') ? true : undefined,\n                label: subElements.includes('label') ? true : undefined,\n            });\n        }\n        \t\n\t}\n\n\tshow(subElements : string[] = []){\n        if(subElements.length === 0) {\n            const compGui = this.comp?.getGui();\n            if (compGui) {\n                this.comp.getGui().classList.remove(\"dg-hide\");\n            }\n        }else {\n            this.dispatchEvent({\n                type: 'EVENT_VISIBILITY_CHANGED',\n                error: subElements.includes('error') ? false : undefined,\n                description: subElements.includes('description') ? false : undefined,\n                label: subElements.includes('label') ? false : undefined,\n            });\n        }\t\n\t}\n\n    focus():void{\n        this.comp?.getGui()?.focus();\n        this.optionHandler.onFocus({} as Event);\n    }\n\n    blur():void{\n        this.comp?.getGui()?.blur();\n        this.optionHandler.onBlur({} as Event);\n    }\n\n     destroy(): void {\n        this.comp.destroy();\n    }\n\n    \n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport {PostConstruct} from \"@dg/corecomponent\"\nimport { RadioRootCompType } from \"./radio-root-types\";\nimport { RadioRootController } from \"./radio-root-controller\";\n\nfunction getTemplate(props:any){\n    const label = props.getLabel();\n\tconst ignoreEmptyDOM = props.ignoreEmptyDOM;\n\n\tconst description = props.getDescription();\n\tconst error = props.error\n\n\tconst wrapper = document.createElement('div');\n\n\tconst fragment = document.createDocumentFragment();\n\n\n\tif (label || ignoreEmptyDOM) {\n\t\tconst labelEl = document.createElement('radio-label');\n\t\tlabelEl.setAttribute('ref', 'label');\n\t\tfragment.appendChild(labelEl);\n\t}\n\n\tconst containerEl = document.createElement('radio-container');\n\tfragment.appendChild(containerEl);\n\n\tif (description || ignoreEmptyDOM) {\n\t\tconst helperTextEl = document.createElement('radio-helper-text');\n\t\thelperTextEl.setAttribute('ref', 'description');\n\t\tfragment.appendChild(helperTextEl);\n\t}\n\n\tif(error || ignoreEmptyDOM) {\n\t\tconst errorElement = document.createElement('radio-error');\n\t\terrorElement.setAttribute('ref', 'error');\n\t\tfragment.appendChild(errorElement);\n\t}\n\n\twrapper.append(fragment);\n\treturn wrapper;\n}\n\n\nexport class RadioRootComponent extends Component{\n\n    private appendTo!: HTMLElement | null;\n\tconstructor(appendTo : HTMLElement | null){\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n    @PostConstruct()\n    init() : void {\n\t\tconst component :RadioRootCompType ={\n\t\t\tgetGui : () =>this.getGui(),\n\t\t\taddOrRemoveCssClass : (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tdestroy :()=>this.destroy()\n\t\t}\n\n        const controller = this.createManagedBean(new RadioRootController());\n        const props = controller.getProperty();\n        const root =  getTemplate(props);\n        const paramsProperty = controller.getParamsProperty();\n        this.setTemplate(root,{\n\t\t\tlabel      : paramsProperty.label,\n\t\t\tdescription: paramsProperty.description,\n\t\t\terror      : paramsProperty.description\n\t\t});\n\t\tcontroller.setComponent(component);\n        this.appendTo && this.appendElementIntoUserDom();\n    }\n\n    private addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n    private appendElementIntoUserDom() :void{\n        const eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t})\n    }\n\n\tdestroy():void{\n\t\tthis.getGui().remove();  \n\t}\n}","import {  Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { IRadioOptionHandler } from \"./radio-option-handler\";\n\n\n@Bean('stateManager')\nexport class RadioStateManager extends EventEmitter {\n    isInValid() : boolean {\n        return (this.optionsHandler as IRadioOptionHandler).isValid();\n        // need to change this\n    }\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../utility/component-detail.types';\nimport { RadioUserComponentHandlerTypes } from './radio-user-component-handler.types';\nimport { ILabelUserComponentHandler } from '../../../label/label.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER      = 'prefixRenderer',\n\tSUFFIX_RENDERER      = 'suffixRenderer',\n\tHELPER_TEXT_RENDERER = 'helpTextRenderer',\n\tBUTTON_RENDERER      = 'buttonRenderer',\n\tOPTION_RENDERER      = 'optionRenderer',\n\tERROR_RENDERER       = 'errorRenderer',\n\tLABEL_RENDERER       = 'labelRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class RadioUserComponentHandler extends UserComponentHandler implements RadioUserComponentHandlerTypes, ILabelUserComponentHandler{\n\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\t\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\n\tgetOptionRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.OPTION_RENDERER, params, PropertyName.OPTION_RENDERER)\n\t}\n\t\n\n\tprotected getComponentDetail( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\t\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.OPTION_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n\tgetHelperTextRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.HELPER_TEXT_RENDERER, params, PropertyName.HELPER_TEXT_RENDERER);\n\t}\n}\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { IRadioOptionManager } from \"./radio-ds\";\nimport { IRadioConfiguration, OptionElementModel } from \"../../radio-configuration.types\";\nimport { IRadioHandler } from \"./radio-controller-handler\";\nimport { IRadioOptionHandler } from \"./radio-option-handler\";\n\n\ninterface IRadioAPI{\n\n    getSelectedValue()                               : string | null,\n    addOptions(options:OptionElementModel[])         : void,\n    removeOptions(options:OptionElementModel[])      : void,\n    select(id :  string)                             : void,\n    disableOption(option:OptionElementModel)         : void,\n    getValue()                                       : string | null,\n    focus()                                          : void,\n    blur()                                           : void,\n    enable()                                         : void,\n    disable()                                        : void,\n    destroy()                                        : void,\n    validate()                                       : void,\n    updateProperties(properties: IRadioConfiguration): void,\n    setProperty(_key:string,_value:any)              : void,\n    getProperty(key:string)                          : any,\n    getElement()                                     : HTMLElement,\n    hide()                                           : void,\n    show()                                           : void,\n    reorderOptions(optionIds: string[])              : void,\n    getOptionById(id: string)                        : OptionElementModel | undefined,\n    setDefaultSelected(optionId: string)             : void\n    getSelectedOption()                              : OptionElementModel | null;\n    showErrorMessage(message ?: string)              : void;\n    hideErrorMessage()                               : void;\n}\n@Bean(RADIO_BEAN_NAME.RADIO_API)\nclass RadioAPI extends EventEmitter implements IRadioAPI{\n\n    @AutoWired('configuration') configuration!: IRadioConfiguration;\n    @AutoWired(\"RADIO_OPTION_MANAGER\") protected radioOptionManager!: IRadioOptionManager;\n    @AutoWired(\"controllerHandler\") protected RadioHandler !: IRadioHandler;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: IRadioOptionHandler;\n\n    getSelectedValue():string | null {\n        const selectedOption = this.radioOptionManager.getSelectedOption();\n        if(selectedOption) {\n            return selectedOption.getValue();\n        }\n        return null;\n    }\n\n    addOptions(options: OptionElementModel[]): void {\n        if (!Array.isArray(options) || options.length === 0) {\n            return;\n        }\n\n        this.radioOptionManager.addOptions(options);\n    }\n    removeOptions(options:OptionElementModel[]):void{\n        if (!Array.isArray(options) || options.length === 0) {\n            return;\n        }\n        this.radioOptionManager.removeOptions(options);\n    }\n\n    select(id :  string):void{\n        this.radioOptionManager.selectOption(id);\n    }\n\n    disableOption(option:OptionElementModel):void{\n        this.radioOptionManager.disableOption(option.id);\n    }\n\n    getSelectedOption(): OptionElementModel | null {\n       const selectedOption = this.radioOptionManager.getSelectedOption();\n        if(selectedOption) {\n            return selectedOption.getOption();\n        }\n        return null;\n    }\n\n    //commom APIS\n\n     getValue():string | null{\n       return this.getSelectedValue();\n    }\n\n    focus():void{\n        this.RadioHandler.getRadioRootController()?.focus();\n    }\n\n    blur():void{\n        this.RadioHandler.getRadioRootController()?.blur();\n    }\n\n    enable():void{\n        throw new Error(\"method not implemented\");\n    }\n\n    disable():void{\n        throw new Error(\"method not implemented\");\n    }\n\n    destroy():void{\n        this.RadioHandler.getRadioRootController()?.destroy();\n    }\n\n    validate():void{\n        throw new Error(\"method not implemented\");\n    }\n\n    updateProperties(properties: IRadioConfiguration): void {\n        const needsRerender = 'showAsBlock' in properties || 'options' in properties || 'layout' in properties;\n\n        // Handle reordering if options are provided\n        if (properties.options) {\n            // Get existing options map for preserving data\n            const existingOptionsMap = new Map(\n                this.configuration.options?.map(opt => [opt.id, opt]) ?? []\n            );\n            \n            // Update options while preserving existing data\n            this.configuration.options = properties.options.map(newOpt => {\n                const existingOpt = existingOptionsMap.get(newOpt.id);\n                return existingOpt ? { ...existingOpt, ...newOpt } : newOpt;\n            });\n        }\n\n        // Update other properties\n        Object.entries(properties).forEach(([key, value]) => {\n            if (value !== undefined && key !== 'options') {\n                (this.configuration as any)[key] = value;\n            }\n        });\n\n        // Handle layout changes\n        // if ('layout' in properties) {\n        //     const rootElement = this.RadioHandler.getRadioRootController()?.getElement();\n        //     if (rootElement) {\n        //         // Remove existing layout classes\n        //         rootElement.classList.remove('dg-radio__list-vertical', 'dg-radio__list-horizontal');\n        //         // Add new layout class\n        //         if (properties.layout === 'vertical') {\n        //             rootElement.classList.add('dg-radio__list-vertical');\n        //         } else {\n        //             rootElement.classList.add('dg-radio__list-horizontal');\n        //         }\n        //     }\n        // }\n\n        // Rerender if needed\n        if (needsRerender) {\n            this.radioOptionManager.updateOptions(this.configuration.options ?? []);\n        }\n\n        this.dispatchEvent({\n            type: \"PROPERTY_CHANGED\",\n            options: properties,\n        });\n    }\n\n    setProperty(_key:string,_value:any):void{\n        throw new Error(\"method not implemented\");\n    }\n\n    getProperty(key:string):any{\n        return (this.configuration as any)[key]; \n    }\n\n    getElement() : HTMLElement {\n        return this.RadioHandler.getRadioRootController()?.getElement() as HTMLElement;\n    }\n\n\n    hide(subElements ?: string[]):void{\n\n        this.RadioHandler.getRadioRootController()?.hide(subElements);\n    }\n\n    show(subElements ?: string[]):void{\n        this.RadioHandler.getRadioRootController()?.show(subElements);\n    }\n\n    reorderOptions(optionIds: string[]): void {\n        this.radioOptionManager.reorderOptions(optionIds);\n        this.RadioHandler.getRadioContainerController().rerenderOptions();\n    }\n\n    getOptionById(id: string): OptionElementModel | undefined {\n        const option = this.radioOptionManager.getOptionById(id);\n        if(option) {\n            return option.getOption();\n        }\n        return undefined;\n    }\n\n    setDefaultSelected(optionId: string): void {\n        this.optionHandler.setDefaultSelected(optionId);\n        this.select(optionId);\n    }\n\n    showErrorMessage(message ?: string): void {\n        message && this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus('error');\n    }\n\n    hideErrorMessage(): void {\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n    }\n\n}\nexport{\n    RadioAPI,\n    IRadioAPI\n}","import { AutoWired, BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { IRadioConfiguration, IRadioErrorRenderer, IRadioRenderer, IRenderer, OptionElementModel } from \"../../radio-configuration.types\";\n\nexport interface IRadioOptionHandler{\n getConfiguration()                          : IRadioConfiguration,\n getAppendTo()                               : HTMLElement|undefined,\n getOptions()                                : OptionElementModel[] | undefined,\n addOptions(options:OptionElementModel[])    : void,\n removeOptions(options:OptionElementModel[]) : void,\n setOptions(options : OptionElementModel[])  : void,\n getDefaultSelected()                        : string,\n setDefaultSelected(option:string)           : void,\n getName()                                   : string,\n setName(name:string)                        : void,\n getLayout()                                 : 'horizontal'|'vertical',\n setLayout(layout: 'horizontal' | 'vertical'): void,\n isShowAsBlock()                             : boolean,\n isDisabled()                                : boolean,\n isReadOnly()                                : boolean;\n getValidation()                             : ((value: any) => boolean) | undefined;\n isRequired()                                : boolean;\n getLabel()                                  : string | undefined;\n getHelperText()                             : string | undefined;\n getAriaLabelledby()                         : string;\n getDescription()                            : string;\n getDescriptionRenderer()                    : { new(): IRadioRenderer } | undefined;\n getDescriptionRendererParams()              : object | undefined;\n getAriaDescribedby()                        : string;\n onChange(option: any)                       : void;\n onClick(option: any)                        : void;\n onFocus(event : Event)                      : void;\n onBlur(event : Event)                       : void;\n showErrorState()                            : boolean;\n isValid()                                   : boolean;\n updateStatus(status: 'error' | 'none')      : void;\n updateValidationMessage(message: string)    : void;\n getValidationMessage()                      : string | undefined;\n getValidationMessageRenderer()              : { new(): IRadioErrorRenderer } | undefined;\n getValidationMessageRendererParams()        : object | undefined;\n shouldGenerateEmptyDom()              : boolean;\n getLabelRenderer() : { new(): IRenderer } | undefined;\n getLabelRendererParams() : object;\n \n}\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class RadioOptionHandler extends EventEmitter implements IRadioOptionHandler {\n\n    @AutoWired(RADIO_BEAN_NAME.RADIO_CONFIGURATION) configuration!: IRadioConfiguration;\n\n    getConfiguration(): IRadioConfiguration {\n        return this.configuration;\n    }\n\n    getAppendTo(): HTMLElement|undefined {\n        return this.configuration.appendTo;\n    }\n\n    getOptions(): OptionElementModel[] | undefined {\n        return this.configuration.options;\n    }\n\n    addOptions(newOptions : OptionElementModel[]): void {\n        this.configuration.options = [\n            ...(this.configuration.options || []), \n            ...newOptions\n        ];\n    }\n\n    removeOptions(optionsToRemove : OptionElementModel[]): void {\n        this.configuration.options = this.configuration.options?.filter(option =>\n            !optionsToRemove.some(optionToRemove => option.id === optionToRemove.id)\n        );\n    }\n\n    setOptions(options : OptionElementModel[]):void{\n        this.configuration.options = options;\n    }\n\n    getDefaultSelected():string{\n        return this.configuration.defaultSelected ?? \"\";\n    }\n\n    setDefaultSelected(optionId:string):void{\n        this.configuration.defaultSelected = optionId;\n    }\n\n    getName():string{\n        return this.configuration.name?? \"\";\n    }\n\n    setName(name:string):void{\n        this.configuration.name = name;\n    }\n    \n    getLayout(): 'horizontal'|'vertical'{\n        return this.configuration.layout ?? 'horizontal';\n    }\n\n    setLayout(layout: 'horizontal' | 'vertical'):void{\n        this.configuration.layout = layout;\n    }\n\n    isShowAsBlock():boolean{\n        return this.configuration.showAsBlock ?? false;\n    }\n\n    isDisabled(): boolean {\n        return this.configuration.disabled ?? false;\n    }\n\n    isReadOnly(): boolean {\n        return this.configuration.readonly ?? false;\n    }\n\n\n    getValidation(): ((value: any) => boolean) | undefined {\n        return this.configuration.validation;\n    }\n\n    isRequired(): boolean {\n        return this.configuration.required ?? false;\n    }\n\n    getLabel(): string | undefined {\n        return this.configuration.label;\n    }\n\n    getHelperText(): string | undefined {\n        return this.configuration.helpertext;\n    }\n    getAriaLabelledby():string{\n        return this.configuration.ariaLabelledby ?? \"label\";\n    }\n\n    getDescription(): string {\n        return this.configuration.description?? \"\";\n    }\n\n    getDescriptionRenderer(): { new(): IRadioRenderer } | undefined {\n        return this.configuration.descriptionRenderer;\n    }\n\n    getDescriptionRendererParams(): object | undefined {\n        return this.configuration.descriptionRendererParams;\n    }\n\n    getAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? 'SelectDropdownHelper';\n\t}\n\n    onClick(option: any): void {\n        if(this.configuration.onClick){\n            this.configuration.onClick(option);\n\n        }\n\n    }\n    onChange(option: any): void {\n        if(this.configuration.onChange){\n            this.configuration.onChange(option);\n\n        }\n\n    }\n\n    onFocus(event : any) : void {\n        if(this.configuration.onFocus) {\n            this.configuration.onFocus({event})\n        }\n    }\n\n    onBlur(event : any) : void {\n        if(this.configuration.onBlur) {\n            this.configuration.onBlur({event})\n        }\n    }\n\n    showErrorState(): boolean {\n        return this.configuration.showErrorState ?? false;\n    }\n\n     isValid(): boolean {\n        return this.configuration.status === 'error';\n    }\n\n    updateStatus(status : 'error' | \"none\") : void {\n        this.configuration.status = status;\n        this.dispatchEvent({\n            type: \"EVENT_VALUE_UPDATE\",\n            force : true\n        })\n    }\n\n    updateValidationMessage(message : string) : void {\n        this.configuration.validationMessage = message;\n    }\n\n    getValidationMessage(): string | undefined {\n        return this.configuration.validationMessage;\n    }\n\n    getValidationMessageRenderer(): { new(): IRadioErrorRenderer } | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    // shouldGenerateEmptyDom(): boolean {\n    //     return this.configuration.ignoreEmptyDOM ?? false;\n    // }\n\n    shouldGenerateEmptyDom(): boolean {\n        return this.configuration?.ignoreEmptyDOM !== undefined\n       ? !this.configuration.ignoreEmptyDOM\n       : false;\n        }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n}\n\n\n\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Bean } from \"@dg/corecomponent\";\nimport { RadioRootController } from \"../radio-root/radio-root-controller\";\nimport { RadioContainerController } from \"../radio-container/radio-container-controller\";\n\nexport interface IRadioHandler{\n    registerRadioRootController(RadioRootController: RadioRootController):void,\n    getRadioRootController() : RadioRootController,\n    registerContainerController(RadioContainerController: RadioContainerController):void,\n    getRadioContainerController() : RadioContainerController\n\n\n}\n\n@Bean(\"controllerHandler\")\nexport class ControllerHandler extends EventEmitter{\n    private RadioRootController !: RadioRootController;\n    private RadioContainerController !: RadioContainerController;\n\n    registerRadioRootController(RadioRootController: RadioRootController):void{\n        this.RadioRootController =  RadioRootController;\n    }\n    getRadioRootController() : RadioRootController{\n        return this.RadioRootController;\n    }\n\n    registerContainerController(RadioContainerController: RadioContainerController):void{\n        this.RadioContainerController =  RadioContainerController;\n    }\n\n    getRadioContainerController() : RadioContainerController{\n        return this.RadioContainerController;\n    }\n}\n\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { RadioOptionType } from \"./radio-option.types\";\nimport { IRadioRenderer, OptionElementModel } from \"../../radio-configuration.types\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\n\nexport class RadioOption extends EventEmitter implements RadioOptionType {\n    private option      : OptionElementModel;\n    private radioEventHandler !: EventHandler;\n    constructor(option : OptionElementModel) {\n        super();\n        this.option = option;\n    }\n    getOption(): OptionElementModel {\n        return this.option;\n    }\n    getId(): string {\n        return this.option.id;\n    }\n\n    getValue() {\n        return this.option.value;\n    }\n\n    isDisabled() : boolean {\n        return this.option.disabled ?? false;\n    }\n\n    getLabel() : string | null {\n        return this.option.label ?? null;\n    }\n\n    updateDisable(disabled : boolean) : void {\n        this.option.disabled = disabled;\n    }\n\n    getRenderer(): new () => IRadioRenderer {\n        return this.option.optionRenderer!;\n    }\n\n    getRendererParams(): object {\n        return this.option.optionRendererParams!;\n    }\n\n    getCustomData() {\n        return this.option.customData;\n    }\n\n    isHidden(): boolean {\n        return this.option.hidden ?? false;\n    }\n\n    isReadonly(): boolean {\n        return this.option.readonly ?? false;\n    }\n\n    getClassName(): string {\n        return this.option.className ?? '';\n    }\n\n    updateOption(option : OptionElementModel) : void {\n        this.option = option;\n        this.dispatchEvent({\n            type : \"EVENT_OPTION_UPDATED\"\n        })\n    } \n\n    addEventListener( eventType: string, listener: EventListener, async?: boolean, _options?: AddEventListenerOptions, ): void {\n\t\tif (!this.radioEventHandler) {\n\t\t\tthis.radioEventHandler = new EventHandler();\n\t\t}\n\t\tthis.radioEventHandler.addEventListener(eventType, listener, async);\n\t}\n\n\tremoveEventListener( eventType: string, listener: EventListener, async?: boolean, _options?: AddEventListenerOptions, ): void {\n\t\tif (!this.radioEventHandler) {\n            return;\n        }\n\n        this.radioEventHandler.removeEventListener(eventType, listener, async);\n\t}\n\n\n\n\n    \n}","import { AutoWired, BEAN_NAME, Bean, PostConstruct } from \"@dg/corecomponent\";\nimport { IRadioOptionHandler } from \"./radio-option-handler\";\nimport { GenericDataStore } from \"./generic-data-store\";\nimport { IGenericDataStore } from \"./generic-data-store.types\";\nimport { RadioOptionType } from \"./radio-option.types\";\nimport { RadioOption } from \"./radio-option\";\nimport { OptionElementModel } from \"../../radio-configuration.types\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nexport interface IRadioOptionManager{\n    getSelectedOption()                            : RadioOptionType,\n    updateSelectedOption(id:string)                : void,\n    isOptionSelected(id:string)                    : boolean,\n    selectOption (id:string)                       : void,\n    disableOption (id:string)                      : void;\n    reorderOptions(optionIds: string[])            : void;\n    getOptionById(id: string)                      : RadioOptionType | undefined;\n    getOptions()                                   : RadioOptionType[];\n    updateOptions(newOptions: OptionElementModel[]): void;\n    removeOptions(options : OptionElementModel[])  : void;\n    addOptions(options : OptionElementModel[])     : void;\n    getName():string\n    getPreviousOption(): RadioOptionType | undefined;\n    getNextOption(): RadioOptionType | undefined;\n}\n\n@Bean(\"RADIO_OPTION_MANAGER\")\nexport class RadioOptionManager extends EventEmitter implements IRadioOptionManager{\n\n    selectedOption       !:RadioOptionType;\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: IRadioOptionHandler;\n\n    private options : IGenericDataStore<RadioOptionType> = new GenericDataStore<RadioOptionType>();\n    private name !: string\n    \n    @PostConstruct()\n    init(){\n        const options = this.optionHandler?.getOptions() ?? [];\n        this.updateOptions(options);\n        this.setName()\n    }\n\n    setName(){\n        this.name = this.optionHandler.getName()? this.optionHandler.getName() : generateName()\n    }\n\n    getOptions() : RadioOptionType[] {\n        return this.options.getAllData();\n    }\n\n    getSelectedOption():RadioOptionType{\n        return this.selectedOption;\n    }\n    updateSelectedOption(id:string):void{\n        this.selectedOption = this.options.getData(id)!;\n    }\n\n    isOptionSelected(id:string):boolean{\n        return this.selectedOption?.getId() === id;\n    }\n\n\n    selectOption (_id:string):void{\n\n    }\n\n    disableOption (_id:string):void{\n\n    }\n\n    getOptionById(id: string): RadioOptionType | undefined {\n        return this.options.getData(id)\n    }\n\n    reorderOptions(optionIds: string[]): void {\n        const options : IGenericDataStore<RadioOptionType> = new GenericDataStore<RadioOptionType>();\n        optionIds.forEach((id) => {\n            const option = this.options.getData(id);\n            if(option) {\n                options.addData(option.getId(), option);\n            }\n        })\n        \n        this.options = options;\n    }\n\n    updateOptions(newOptions: OptionElementModel[]): void {\n        const newDataStore: IGenericDataStore<RadioOptionType> = new GenericDataStore<RadioOptionType>();\n        const incomingIds = new Set<string>();\n\n        newOptions.forEach((optionModel) => {\n            const id = optionModel.id;\n            incomingIds.add(id);\n\n            const existingOption = this.options.getData(id);\n            if (existingOption) {\n                existingOption.updateOption(optionModel);\n                newDataStore.addData(id, existingOption);\n            } else {\n                const newOption = new RadioOption(optionModel);\n                newDataStore.addData(id, newOption);\n            }\n        });\n\n        this.options.getAllData().forEach((existingOption) => {\n            const id = existingOption.getId();\n            if (!incomingIds.has(id)) {\n                this.options.removeData(existingOption.getId());\n            }\n        });\n\n        this.options = newDataStore;\n\n        if (this.selectedOption && !this.options.hasData(this.selectedOption.getId())) {\n            this.selectedOption = undefined as any;\n        }\n\n        this.dispatchEvent({\n            type: \"EVENT_RADIO_OPTION_UPDATE\"\n        });\n\n    }\n\n    addOptions(options : OptionElementModel[]) : void {\n        options.forEach((option) => {\n            const hasOption = this.options.hasData(option.id);\n            if(!hasOption) {\n                this.options.addData(option.id, new RadioOption(option));\n            }\n        })\n\n        this.dispatchEvent({\n            type: \"EVENT_RADIO_OPTION_UPDATE\"\n        });\n    }\n\n    removeOptions(options : OptionElementModel[]) : void {\n        options.forEach((option) => {\n            const hasOption = this.options.hasData(option.id);\n            if(hasOption) {\n                this.options.removeData(option.id);\n            }\n        })\n\n        this.dispatchEvent({\n            type: \"EVENT_RADIO_OPTION_UPDATE\"\n        });\n    }\n\n\n\n    getName():string{\n        return this.name\n    }\n    getPreviousOption(): RadioOptionType | undefined {\n        const options = this.getOptions();\n        if (options.length === 0) return undefined;\n    \n        if (!this.selectedOption) {\n            this.selectedOption = options[options.length - 1];\n            return this.selectedOption;\n        }\n    \n\n        const currentIndex = options.findIndex(opt => opt.getId() === this.selectedOption.getId());\n        \n        if (currentIndex > 0) {\n            return options[currentIndex - 1];\n        }\n        return undefined;\n    }\n    \n    getNextOption(): RadioOptionType | undefined {\n        const options = this.getOptions();\n    if (options.length === 0) return undefined;\n\n    if (!this.selectedOption) {\n        this.selectedOption = options[0];\n        return this.selectedOption;\n    }\n    \n\n        const currentIndex = options.findIndex(opt => opt.getId() === this.selectedOption.getId());\n        \n        if (currentIndex >= 0 && currentIndex < options.length - 1) {\n            return options[currentIndex + 1];\n        }\n        return undefined;\n    }\n    \n\n}\n\nfunction generateName() {\n    const randomText = Math.random().toString(36).substring(2, 10);\n    return `dg-component--${randomText}`;\n  }","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IRadioOptionHandler } from \"../model/radio-option-handler\";\nimport { IRadioHandler } from \"../model/radio-controller-handler\";\nimport { getRadioRootUtilityClass } from \"../radio-root/radio-root-classes\";\nimport { RadioContainerCompType } from \"./radio-container-types\";\nimport { OptionElementModel } from \"../../radio-configuration.types\";\nimport { IRadioOptionManager } from \"../model/radio-ds\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport type { RadioRenderControllers } from \"../model/render-controller\";\n\n\nconst useUtilityClasses = () =>{\n    const slots ={\n        root : {\n            slot : 'container',\n            modifiers:[\n            ],\n        },\n\n    };\n    return composeClasses(slots, getRadioRootUtilityClass);\n}\n\nexport class RadioContainerController extends EventEmitter{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: IRadioOptionHandler;\n    @AutoWired(\"controllerHandler\") protected RadioHandler !: IRadioHandler;\n    @AutoWired(\"RADIO_OPTION_MANAGER\") protected radioOptionManager!: IRadioOptionManager;\n    @AutoWired(RADIO_BEAN_NAME.RADIO_RENDER_CONTROLLER) private radioRenderController !: RadioRenderControllers;\n    private comp!: RadioContainerCompType\n\n    \n\n    setComponent(component: RadioContainerCompType): void {\n        this.comp = component;\n        this.applyClasses();\n        this.registerContainerController();\n        this.updateRadios();\n        this.addListener(this.eventHandler, 'EVENT_RADIO_UPDATED', this.updateRadios.bind(this));\n        // this.RadioHandler.registerRadioRootController(this);\n    }\n\n    registerContainerController():void{\n        this.RadioHandler.registerContainerController(this);\n    }\n\n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCssClass(classes.root);\n    }\n\n    refresh() : void {\n        this.applyClasses();\n    }\n\n    getProperty(): any{\n        return {\n            getOptions : ()=>this.optionHandler.getOptions(),\n        }\n    }\n\n\n    getElement() : HTMLElement | undefined {\n        return this.comp?.getGui();\n    }\n\n    hide(){\n        const compGui = this.comp?.getGui();\n        if (compGui) {\n          compGui.style.display = 'none';\n        }\t\n\t}\n\n\tshow(){\n        const compGui = this.comp?.getGui();\n        if (compGui) {\n          compGui.style.display = 'flex';\n        }\t\n\t}\n\n    addOption(options:OptionElementModel[]){\n        this.optionHandler.addOptions(options);\n        this.comp.rerenderOptions(this.comp.getParentComp(),this);\n    }\n\n    removeOption(options:OptionElementModel[]){\n        this.optionHandler.removeOptions(options);\n        this.comp.rerenderOptions(this.comp.getParentComp(),this);\n    }\n\n    rerenderOptions(): void {\n        this.comp.rerenderOptions(this.comp.getParentComp(), this);\n    }\n\n    private updateRadios() : void {\n        const controllers = this.radioRenderController.getControllers();\n        this.comp.setRadioControllers(controllers);\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport {clearElement, PostConstruct, queryAssignedNodes, removeFromParent} from \"@dg/corecomponent\"\nimport { RadioInputWrapperCompType } from \"./radio-input-wrapper-types\";\nimport { RadioInputWrapperController } from \"./radio-input-wrapper-controller\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\n\n\nfunction getRadioInputWrapperTemplate() {\n    const radioInputWrapper = document.createElement(\"label\");\n\n    const radioInput = document.createElement(\"input\");\n    radioInput.type = \"radio\";\n    radioInput.classList.add(\"dg-radio__input\");\n    radioInput.setAttribute(\"ref\", \"radio\");\n    radioInput.tabIndex = -1;\n\n\n      \n\n    const labelSpan = document.createElement(\"span\");\n    labelSpan.classList.add(\"dg-radio__input-label\");\n    labelSpan.setAttribute('ref', 'radio-label')\n\n\n    radioInputWrapper.appendChild(radioInput);\n\n    // if (!props.isShowAsBlock) {\n        const customSpan = document.createElement(\"radio-custom-input\");\n        customSpan.setAttribute(\"ref\", \"custom\");\n        // customSpan.classList.add(\"dg-radio__input--custom\");\n        radioInputWrapper.appendChild(customSpan);\n\n    // }\n\n    radioInputWrapper.appendChild(labelSpan);\n    \n    return radioInputWrapper;\n}\n\n\n\nexport class RadioInputWrapperComponent extends Component{\n\n    @queryAssignedNodes('radio') radio !                  : HTMLElement;\n    @queryAssignedNodes('radio-label') radioLabelElement !: HTMLSpanElement;\n\n    private renderer       : any;\n\tprivate rendererElement: any;\n    private controller      !: RadioInputWrapperController;\n    private parentElement : HTMLElement | null = null;\n\n    constructor(controller : RadioInputWrapperController, parentElement : HTMLElement) {\n        super();\n        this.controller    = controller;\n        this.parentElement = parentElement;\n    }\n    @PostConstruct()\n    init() : void {\n\t\tconst component :RadioInputWrapperCompType ={\n            getGui              : () =>this.getGui(),\n            addOrRemoveCssClass : (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n            getRadio            : () => this.getRadio(),\n            setRendererDetails  : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getRadioLabelElement: () => this.radioLabelElement as HTMLSpanElement\n\t\t}\n\n        const props            = this.controller.getProperty();\n        const inputWrapperComp = getRadioInputWrapperTemplate();\n        this.setTemplate(inputWrapperComp,{custom : props});\n\t\tthis.controller.setComponent(component);\n    }\n\n    private addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n    getRadio():HTMLInputElement{\n        return this.radio as HTMLInputElement;\n    }\n\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n        const inputWrapperComp =  getRadioInputWrapperTemplate();\n\n\t\tthis.setTemplate(inputWrapperComp);\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\tclearElement(parentElement);\n\t\t\tparentElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n    public destroy(): void {\n        super.destroy();\n    }\n\n    public detach() : void {\n        this.parentElement?.removeChild(this.getGui());\n        this.parentElement = null;\n    }\n\n    public getID() : string {\n        return this.controller.getID();\n    }\n\n}","import { Component } from \"@dg/corecomponent/Component.js\";\nimport {PostConstruct} from \"@dg/corecomponent\"\nimport { RadioContainerCompType } from \"./radio-container-types\";\nimport { RadioContainerController } from \"./radio-container-controller\";\nimport type { RadioInputWrapperController } from \"../radio-input-wrapper/radio-input-wrapper-controller\";\nimport { RadioInputWrapperComponent } from \"../radio-input-wrapper/radio-input-wrapper-view\";\nimport { _setDomChildOrder } from \"../../../token/src/utilities/dom\";\n\nfunction getRadioContainerTemplate(){\n    const container = document.createElement(\"div\");\n    return container;\n}\n\n\nexport class RadioContainerComponent extends Component{\n\n    private appendTo!: HTMLElement | null;\n    private radioComps : { [key: string]: RadioInputWrapperComponent | null} = {};\n    \n\tconstructor(appendTo : HTMLElement | null){\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n    @PostConstruct()\n    init() : void {\n\t\tconst component :RadioContainerCompType ={\n            getGui             : () =>this.getGui(),\n            addOrRemoveCssClass: (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n            getParentComp      : ()=>this.getParentComponent(),\n            rerenderOptions    : (parentComp:any,controller:RadioContainerController) => this.rerenderOptions(parentComp,controller),\n            setRadioControllers: (controllers : RadioInputWrapperController[]) => this.setRadioController(controllers)\n\t\t}\n\n        const controller = this.createManagedBean(new RadioContainerController());\n        const containerComp =  getRadioContainerTemplate();\n        this.setTemplate(containerComp);\n\t\tcontroller.setComponent(component);\n        this.appendTo && this.appendElementIntoUserDom();\n    }\n    private addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n    private appendElementIntoUserDom() :void{\n        const eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(()=>{\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = null;\n\t\t})\n    }\n\n    rerenderOptions(_parentComp:any,_controller:RadioContainerController){\n        // const props =  controller.getProperty();\n        // this.destroy();\n        // this.setTemplate(getRadioContainerTemplate(props));\n        // parentComp.appendChild(this.getGui());\n        // controller.refresh()\n    }\n\n    protected destroy(): void {\n\t\tthis.getGui().remove();    \n\t}\n\n    private setRadioController(controllers : RadioInputWrapperController[]) : void {\n        const CellComponent = Object.assign({}, this.radioComps);\n\n        controllers.forEach((cellController) => {\n            const instanceID = cellController.getID();\n            if(this.radioComps[instanceID] == null) {\n                this.newCellComponent(cellController);\n            }else {\n                CellComponent[instanceID] = null;\n            }\n        })\n\n        const removeCellComponents = Object.values(CellComponent).filter(component => component != null) as RadioInputWrapperComponent[];\n        this.destroyCells(removeCellComponents);\n        this.ensureDomOrder(controllers);\n    }\n\n    private ensureDomOrder(controllers: RadioInputWrapperController[]): void {\n            const elementsInOrder: HTMLElement[] = [];\n            controllers.forEach((tokenController) => {\n                const tokenComp = this.radioComps[tokenController.getID()];\n                if (tokenComp) {\n                    elementsInOrder.push(tokenComp.getGui());\n                }\n            });\n\n    \n            _setDomChildOrder(this.getGui(), elementsInOrder);\n        }\n    \n        private newCellComponent(controller: RadioInputWrapperController): void {\n            const cellComp = this.createManagedBean(new RadioInputWrapperComponent(controller, this.getGui()));\n            this.radioComps[controller.getID()] = cellComp;\n            this.getGui() && this.getGui().appendChild(cellComp.getGui());\n        }\n    \n        private destroyCells(tokenComps: RadioInputWrapperComponent[]): void {\n            tokenComps.forEach(tokenComps => {\n                if (!tokenComps) { return; }\n    \n                const instanceId = tokenComps.getID();\n                if (this.radioComps[instanceId] !== tokenComps) {return; }\n                tokenComps.detach();\n                tokenComps.destroy();\n                this.radioComps[instanceId] = null;\n            });\n        }\n\n}","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { composeClasses } from \"@dg/utils\";\nimport { IRadioOptionHandler } from \"../model/radio-option-handler\";\nimport { IRadioHandler } from \"../model/radio-controller-handler\";\nimport { getRadioRootUtilityClass } from \"../radio-root/radio-root-classes\";\nimport { RadioCustomInputCompType } from \"./radio-custom-input-types\";\nimport { IRadioConfiguration, OptionElementModel, RendererParams } from \"../../radio-configuration.types\";\nimport { IRadioOptionManager } from \"../model/radio-ds\";\nimport { RADIO_BEAN_NAME } from \"../../constants/beanname-constants\";\nimport { RadioUserComponentHandlerTypes } from \"../model/radio-user-component-handler.types\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\n\n\nconst useUtilityClasses = () =>{\n    const slots ={\n        root : {\n            slot : 'input--custom',\n            modifiers:[\n                \n            ],\n        },\n    };\n    return composeClasses(slots, getRadioRootUtilityClass);\n}\n\nexport class RadioCustomInputController extends EventEmitter{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler !: IRadioOptionHandler;\n    @AutoWired(\"controllerHandler\") protected RadioHandler !: IRadioHandler;\n    @AutoWired(\"RADIO_OPTION_MANAGER\") protected radioOptionManager!: IRadioOptionManager;\n    @AutoWired(RADIO_BEAN_NAME.RADIO_CONFIGURATION) configuration!: IRadioConfiguration;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: RadioUserComponentHandlerTypes;\n\n\n    private comp!: RadioCustomInputCompType\n    private option!: OptionElementModel;\n  \n    setComponent(component: RadioCustomInputCompType): void {\n        this.comp = component;\n        this.option = this.comp.getParams().option;\n        // this.applyClasses();\n\n        this.setRendererDetails();\n        this.applyClasses();\n\n    }\n\n\n    \n\n    private applyClasses() : void {\n        const classes = useUtilityClasses();\n        this.comp.addOrRemoveCssClass(classes.root);\n    }\n\n\n\n    refresh() : void {\n        this.applyClasses();\n    }\n\n\n\n    getProperty(): any{\n        return {\n            isShowAsBlock : this.optionHandler.isShowAsBlock()\n        }\n    }\n\n    getElement() : HTMLElement | undefined {\n        return this.comp?.getGui();\n    }\n\n\n\n    setRendererDetails() : void {\n        \n        const rendererWrapper = this.createOptionRendererWrapper();\n        const params          = this.createRendererParam();\n        const  userDetails    = this.userComponentHandler.getOptionRendererDetails(rendererWrapper, params) as IComponentDetails;\n\n        this.comp.setRendererDetails(userDetails);\n    }\n    private createOptionRendererWrapper() {\n        \n        return {\n\t\t\tgetRenderer          : () => this.option.optionRenderer,\n\t\t\tgetUserRendererParams: () => this.option.optionRendererParams,\n\n\t\t};\n    }\n    private createRendererParam() : RendererParams {\n        return {\n            option       : this.option,\n            optionParams : this.option.optionRendererParams as Object,\n            parentElement: this.comp.getGui()\n\t\t};\n    }\n}\n\n","import { Component } from \"@dg/corecomponent/Component.js\";\nimport {clearElement, PostConstruct, removeFromParent} from \"@dg/corecomponent\"\nimport { RadioCustomInputCompType,  } from \"./radio-custom-input-types\";\nimport { RadioCustomInputController } from \"./radio-custom-input-controller\";\nimport { IComponentDetails } from \"../../../utility/component-detail.types\";\n\n\nfunction getRadioInputWrapperTemplate(_props: any) {\n    const customSpan = document.createElement(\"span\");\n    return customSpan;\n}\n\n\n\nexport class RadioCustomInputComponent extends Component{\n\n    // @queryAssignedNodes('radio') radio !: HTMLElement;\n\n    private renderer       : any;\n\tprivate rendererElement: any;\n    private controller      !: RadioCustomInputController;\n    private params !: any;\n\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n    @PostConstruct()\n    init() : void {\n\t\tconst component :RadioCustomInputCompType ={\n\t\t\tgetGui : () =>this.getGui(),\n\t\t\taddOrRemoveCssClass : (className :string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n            setRendererDetails : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getParams : () => this.params,\n\t\t}\n\n        this.controller = this.createManagedBean(new RadioCustomInputController());\n\n        const props = this.controller.getProperty();\n\n        const inputWrapperComp =  getRadioInputWrapperTemplate(props);\n\n        this.setTemplate(inputWrapperComp);\n\t\tthis.controller.setComponent(component);\n    }\n\n    private addOrRemoveCSSClass(className : string ): void{\n\t\tconst element = this.getGui();\n\t\telement && (element.className =  className);\n\t}\n\n\n    private setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}else {\n\t\t\tthis.destroyRenderer();\n\t\t\tthis.insertValueWithoutCellRenderer()\n\t\t}\n\t}\n\n\t private destroyRenderer(): void {\n\t\tthis.renderer = this.context.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n\tprivate insertValueWithoutCellRenderer() {\n\t\tconst parentElement = this.getGui();\n        clearElement(parentElement);\n        const props = this.controller.getProperty();\n        const inputWrapperComp =  getRadioInputWrapperTemplate(props);\n\n\t\tthis.setTemplate(inputWrapperComp);\n\t}\n\n\tprivate afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\n            const spanElement = this.getGui() as HTMLElement;\n            spanElement.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport {IUserParams} from \"../utility/user-params.types\"\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { IRadioConfiguration } from \"./radio-configuration.types\";\nimport { RadioStateManager } from \"./core/model/radio-state-manager\";\nimport { RadioUserComponentHandler } from \"./core/model/radio-user-component-handler\";\nimport { RadioAPI } from \"./core/model/radio-api\";\nimport { RadioOptionHandler } from \"./core/model/radio-option-handler\";\nimport { ControllerHandler } from \"./core/model/radio-controller-handler\";\nimport { RadioOptionManager } from \"./core/model/radio-ds\";\nimport { RadioContainerComponent } from \"./core/radio-container/radio-container-view\";\nimport { RadioInputWrapperComponent } from \"./core/radio-input-wrapper/radio-input-wrapper-view\";\nimport { Label } from \"../label/label-view\";\nimport { DescriptionComponent } from \"../description/description-view\";\nimport { RadioCustomInputComponent } from \"./core/radio-custom-input/rradio-custom-input-view\";\nimport { ErrorComponent } from \"../error/error-view\";\nimport { RadioRenderControllers } from \"./core/model/render-controller\";\n\n\nlet nextInstanceId = 1;\n\nexport class RadioCoreComponent {\n    initializeSelect(configuration: IRadioConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n        const instanceID = String(nextInstanceId++);\n\n        const beanClasses = this.CreateBeanClasses();\n\n        const context = new Context();\n\n        const userConfigurations = this.createUserConfiguration(\n            configuration,\n            params,\n            instanceID\n        );\n\n        // Model classes\n        context.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n        this.registerCoreComponent(context);\n        // Default user component registry\n        this.registerDefaultUserComponent(context);\n        createUI(context);\n\n        (window as any).context = context;\n    }\n\n    private CreateBeanClasses(): Set<any> {\n        let beanList = [\n            RadioStateManager,\n            RadioUserComponentHandler,\n            RadioAPI,\n            RadioOptionHandler,\n            RadioOptionManager,\n            ControllerHandler,\n            ComponentsRegistry,\n            UserComponentRegistry,\n            ComponentMetadataProvider,\n            EventHandler,\n            RadioRenderControllers\n        ];\n        return new Set(beanList);\n    }\n\n    private createUserConfiguration(configuration: any, params: IUserParams, instanceID: string): {\n        configuration: any;\n        frameWorkOverrides: IFrameworkOverrides | null;\n        globalEventListener: Function | null;\n        frameworkComponentWrapper: any | null;\n        instanceID: string;\n    } {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n        if (!frameWorkOverrides) {\n            frameWorkOverrides = new VanillaFrameWorkOverrider();\n        }\n        return {\n            configuration,\n            frameWorkOverrides,\n            instanceID,\n            frameworkComponentWrapper: params.frameworkComponentWrapper,\n            globalEventListener: params.globalEventListener ?? null,\n        };\n    }\n\n    private registerDefaultUserComponent(context: Context): void {\n        const userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n        const defaultComponent = {\n            // [PropertyName.REMOVE_SELECT_RENDERER]: SelectIconRenderer,\n            // [PropertyName.LABEL_SELECT_RENDERER]: SelectIconRenderer\n        };\n\n        traverseObject(defaultComponent, (name: string, component: any) => {\n            userComponentRegistry.registerDefaultComponent(name, component);\n        });\n    }\n\n    private registerCoreComponent(context: Context): void {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n    let components: ComponentMeta[] = [\n        {\n            componentName: 'radio-container',\n            componentClass: RadioContainerComponent,\n        },\n        {\n            componentName: 'radio-input-wrapper',\n            componentClass: RadioInputWrapperComponent,\n        },\n        {\n\t\t\tcomponentName: 'radio-label',\n\t\t\tcomponentClass: Label\n\t\t},\n        {\n\t\t\tcomponentName: 'radio-helper-text',\n\t\t\tcomponentClass: DescriptionComponent,\n\t\t},\n\n        {\n\t\t\tcomponentName: 'radio-custom-input',\n\t\t\tcomponentClass: RadioCustomInputComponent,\n\t\t},\n        {\n            componentName : 'radio-error',\n            componentClass : ErrorComponent\n        }\n        \n    ];\n\n    return components;\n}\n\n","export const DialogBeanName = {\n    DIALOG_OPTIONS: 'dialogOptions',\n    DIALOG_API: 'dialogAPI',\n    DIALOG_ELEMENT: 'dialogElement',\n    DIALOG_POP_HANDLER: 'dialogPopHandler',\n    DIALOG_CONTROLLER_HANDLER: 'dialogControllerHandler',\n    DIALOG_USER_COMPONENT_HANDLER: 'dialogUserComponentHandler'\n} ","export class DialogRenderer {\n    private parentElement: HTMLElement;\n    private dialogElement: HTMLElement;\n\n    constructor() {\n        this.parentElement = document.createElement('div');\n        this.dialogElement = document.createElement('div');\n        this.init();\n    }\n\n    init(): void {\n        this.parentElement.className = 'dg-dialog-container';\n        this.dialogElement.className = 'dg-dialog-content';\n        this.parentElement.appendChild(this.dialogElement);\n    }\n\n    getElement(): HTMLElement {\n        return this.parentElement;\n    }\n\n    setContent(content: HTMLElement | string): void {\n        this.dialogElement.innerHTML = '';\n        \n        if (typeof content === 'string') {\n            this.dialogElement.textContent = content;\n        } else {\n            this.dialogElement.appendChild(content);\n        }\n    }\n\n    destroy(): void {\n        // Clean up resources\n        if (this.parentElement && this.parentElement.parentNode) {\n            this.parentElement.parentNode.removeChild(this.parentElement);\n        }\n    }\n} ","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from '@dg/corecomponent';\nimport { UserComponentHandler } from '@dg/corecomponent/UserComponentHandler.js';\nimport { UserComponentRegistry } from '@dg/corecomponent/UserComponentRegistry.js';\nimport { ComponentMetadata } from '@dg/corecomponent/ComponentMetadataProvider.js';\nexport const enum PropertyName {\n    DIALOG_RENDERER = 'dialogRenderer',\n}\n\nexport interface IComponentMeta {\n    componentName: string | null;\n    frameworkComponent: any | null;\n    jsComponent: any | null;\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class DialogUserComponentHandler extends UserComponentHandler {\n    \n    @AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n    \n    // Track components being instantiated to prevent recursion\n    private componentsBeingInstantiated = new Set<any>();\n\n    getDialogRendererDetails(item: any, params?: any) {\n        return this.getComponentDetails(item, PropertyName.DIALOG_RENDERER, params, PropertyName.DIALOG_RENDERER);\n    }\n\n    protected getComponentDetails(item: any, propertyName: PropertyName, params?: any, defautName?: string): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n        let { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const lookUpRegistry = (name: string) => {\n            const userComponentRegistry = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n            const item = userComponentRegistry.retrieve(name);\n            if (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n                frameworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n        };\n\n        if (componentName != null) {\n            lookUpRegistry(componentName);\n        }\n\n        if (jsComponent == null && frameworkComponent == null && defautName != null) {\n            lookUpRegistry(defautName);\n        }\n\n        if (!jsComponent && !frameworkComponent) {\n            return undefined;\n        }\n\n        const componentFramework = jsComponent == null;\n        const componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        // Check if component is already being instantiated - if so, prevent recursion\n        if (this.componentsBeingInstantiated.has(componentClass)) {\n            return undefined;\n        }\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n        return {\n            componentFramework,\n            componentClass,\n            params: mergedParams,\n            propertyName,\n            newInstance: () => this.newInstance(componentClass, componentFramework, propertyName, mergedParams),\n        };\n    }\n\n    protected getComponentMeta(item: any, propertyName: PropertyName, _params?: any): IComponentMeta {\n        let componentName: string | null = null;\n        let jsComponent: any = null;\n        let frameworkComponent: any = null;\n\n        const assignComponentNameOrComponentClass = (component: any) => {\n            if (typeof component === 'string') {\n                componentName = component;\n            } else if (component != null && component !== true) {\n                const isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent(component);\n                if (isFrameworkComponent) {\n                    frameworkComponent = component;\n                } else {\n                    jsComponent = component;\n                }\n            }\n        };\n\n        assignComponentNameOrComponentClass(this.getComponent(item, propertyName));\n\n        return {\n            componentName,\n            frameworkComponent,\n            jsComponent,\n        };\n    }\n\n    protected getComponent(item: any, propertyName: PropertyName): any {\n        switch (propertyName) {\n            case PropertyName.DIALOG_RENDERER:\n                return item.getRenderer();\n        }\n    }\n\n    protected newInstance(component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any) {\n        // Add the component to the set of components being instantiated\n        this.componentsBeingInstantiated.add(component);\n\n        try {\n            let instance: any;\n            const frameworkComponentWrapper = this.getBeanInstanceByBeanName(BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n            const componentMetaDataProvider = this.getBeanInstanceByBeanName(BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n            \n            if (!componentFrameWork) {\n                try {\n                    instance = new component();\n                } catch (error) {\n                    this.componentsBeingInstantiated.delete(component);\n                    return Promise.reject(error);\n                }\n            } else { \n                try {\n                    const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n                    instance = frameworkComponentWrapper.wrap(component, componentMeta.mandatoryMethodList, componentMeta.optionalMethodList);\n                } catch (error) {\n                    this.componentsBeingInstantiated.delete(component);\n                    return Promise.reject(error);\n                }\n            }\n\n            let initPromise;\n            try {\n                initPromise = this.initComponent(instance, params);\n            } catch (error) {\n                this.componentsBeingInstantiated.delete(component);\n                return Promise.reject(error);\n            }\n            \n            // Create a promise that removes the component from the set when resolved or rejected\n            const cleanupPromise = (promise: Promise<any>) => {\n                return promise.then(result => {\n                    this.componentsBeingInstantiated.delete(component);\n                    return result;\n                }).catch(error => {\n                    this.componentsBeingInstantiated.delete(component);\n                    throw error;\n                });\n            };\n\n            if (initPromise == null) {\n                this.componentsBeingInstantiated.delete(component);\n                return Promise.resolve(instance);\n            }\n\n            return cleanupPromise(Promise.resolve(initPromise).then(() => {\n                return instance;\n            }));\n        } catch (error) {\n            // Make sure to remove the component from the set even if an error occurs\n            this.componentsBeingInstantiated.delete(component);\n            return Promise.reject(error);\n        }\n    }\n\n    protected initComponent(instance: any, params: any): Promise<any> | any {\n        this.context.createBean(instance);\n        if (instance.init == null) {\n            return;\n        }\n        return instance.init(params);\n    }\n\n    private getMergeParams(item: any, propertyName: PropertyName, params: any): any {\n        return { ...params, ...this.getUserParams(item, propertyName, params) };\n    }\n\n    getUserParams(item: any, propertyName: PropertyName, params: any): any {\n        switch (propertyName) {\n            case PropertyName.DIALOG_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n    }\n\n    private getUserRendererParams(item: any, params: any): any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult: any = {};\n\n        if (typeof rendererParams == 'function') {\n            rendererParamsResult = rendererParams(params);\n        } else if (typeof rendererParams == 'object') {\n            rendererParamsResult = rendererParams;\n        }\n\n        return rendererParamsResult;\n    }\n}","import { Bean } from \"@dg/corecomponent\";\nimport { DialogBeanName } from \"./Constants/DialogBeanName\";\nimport { DialogHandler } from \"./DialogHandler\";\n\n@Bean(DialogBeanName.DIALOG_CONTROLLER_HANDLER)\nexport class DialogControllerHandler {\n    private dialogHandler: DialogHandler | null = null;\n\n    registerDialogHandler(handler: DialogHandler): void {\n        this.dialogHandler = handler;\n    }\n\n    getDialogHandler(): DialogHandler | null {\n        return this.dialogHandler;\n    }\n} ","export const DialogEvents = {\n    DIALOG_OPEN: 'dialogOpen',\n    DIALOG_CLOSE: 'dialogClose',\n    DIALOG_REFRESH: 'dialogRefresh',\n    DIALOG_HIDE: 'dialogHide',\n    DIALOG_SHOW: 'dialogShow',\n    DIALOG_SHOWN: 'dialogShown',\n    DIALOG_FOCUS: 'dialogFocus',\n    DIALOG_BLUR: 'dialogBlur',\n    DIALOG_KEYDOWN: 'dialogKeydown',\n    DIALOG_DRAG_START: 'dialogDragStart',\n    DIALOG_DRAG: 'dialogDrag',\n    DIALOG_DRAG_END: 'dialogDragEnd',\n    DIALOG_RESIZE_START: 'dialogResizeStart',\n    DIALOG_RESIZE: 'dialogResize',\n    DIALOG_RESIZE_END: 'dialogResizeEnd'\n} ","export const DEFAULT_DIALOG_VALUES = {\n    DEFAULT_SHOW_DELAY: 0,\n    DEFAULT_HIDE_DELAY: 0,\n    DEFAULT_WIDTH: '300px',\n    DEFAULT_HEIGHT: 'auto',\n    DEFAULT_POSITION: 'center',\n    DEFAULT_MODAL: true,\n    DEFAULT_CLOSE_ON_ESCAPE: true,\n    DEFAULT_DRAGGABLE: false,\n    DEFAULT_RESIZABLE: false,\n    DEFAULT_SHOW_HEADER: true,\n    DEFAULT_SHOW_FOOTER: false\n};\n\nexport enum DialogStates {\n    IDLE,\n    OPENING,\n    OPEN,\n    CLOSING,\n    CLOSED\n}\n\nexport enum DialogPositions {\n    CENTER = 'center',\n    TOP = 'top',\n    RIGHT = 'right',\n    BOTTOM = 'bottom',\n    LEFT = 'left',\n    TOP_LEFT = 'top-left',\n    TOP_RIGHT = 'top-right',\n    BOTTOM_LEFT = 'bottom-left',\n    BOTTOM_RIGHT = 'bottom-right'\n} ","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { IDialogConfiguration } from \"./Interface/IDialogConfiguration\";\nimport { DEFAULT_DIALOG_VALUES } from \"./Constants/DefaultDialogValues\";\nimport { IDialogOptionsHandler } from \"./Interface/IDialogOptionsHandler\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DialogBeanName } from \"./Constants/DialogBeanName\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class DialogOptionsHandler extends EventEmitter implements IDialogOptionsHandler {\n\n    @AutoWired(DialogBeanName.DIALOG_OPTIONS) private options !: IDialogConfiguration;\n    \n    getOnOpen(): Function | undefined {\n        return this.options.onOpen;\n    }\n    getOnClose(): Function | undefined {\n        return this.options.onClose;\n    }\n    getOnBeforeOpen(): Function | undefined {\n        return this.options.onBeforeOpen;\n    }\n    getOnBeforeClose(): Function | undefined {\n        return this.options.onBeforeClose;\n    }\n    getOnEscape(): Function | undefined {\n        return this.options.onEscape;\n    }\n\n\n    public getAppendTo(): HTMLElement | undefined {\n        return this.options.appendTo;\n    }\n\n    public getContentRenderer(): HTMLElement | undefined {\n        return this.options.contentRenderer;\n    }\n\n    public getRendererParams(): any {\n        return this.options.contentRendererParams;\n    }\n\n    public getModal(): boolean {\n        return this.options.modal === undefined ? DEFAULT_DIALOG_VALUES.DEFAULT_MODAL : this.options.modal;\n    }\n\n    public getCloseOnEscape(): boolean {\n        return this.options.closeOnEscape === undefined ? DEFAULT_DIALOG_VALUES.DEFAULT_CLOSE_ON_ESCAPE : this.options.closeOnEscape;\n    }\n\n    public getAriaLabel(): string | undefined {\n        return this.options.ariaLabel;\n    }\n\n    public getAriaDescribedBy(): string | undefined {\n        return this.options.ariaDescribedBy;\n    }\n\n    public getInstanceID(): string | undefined {\n        return this.options.instanceID;\n    }\n\n    public getPosition(): string | undefined {\n        return this.options.position || DEFAULT_DIALOG_VALUES.DEFAULT_POSITION;\n    }\n\n    public getPreventCloseOnOverlayClick(): boolean | undefined {\n        return this.options.preventCloseOnOverlayClick;\n    }\n\n} ","import { AutoWired, BEAN_NAME, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DialogEvents } from \"./Constants/DialogEvents\";\nimport { DialogOptionsHandler } from \"./DialogOptionsHandler\";\nimport { DialogUserComponentHandler } from \"./Components/DialogUserComponentHandler\";\n\nenum DialogStates {\n    IDLE = 'IDLE',\n    OPENING = 'OPENING',\n    DISPLAYING = 'DISPLAYING',\n    CLOSING = 'CLOSING'\n}\n\nexport class CustomDialogHandler extends EventEmitter {\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionsHandler!: DialogOptionsHandler;\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) private userComponentHandler!: DialogUserComponentHandler;\n\n    private containerElement: HTMLElement | null = null;\n    private dialogComponent: any;\n    private dialogComponentElement: HTMLElement | null = null;\n    private dialogPopupDestroyFunction: (() => void) | undefined;\n    private dialogInstanceCount = 0;\n    private dialogOverlay: HTMLElement | null = null;\n    \n    private state = DialogStates.IDLE;\n    private isDestroyed = false;\n    private isCreatingInstance = false;\n\n    // Add a static flag to track if we're already in the process of creating a dialog\n    private static isDialogBeingCreated = false;\n\n    // Add a flag to track if we're currently dispatching a close event\n    private _isDispatchingCloseEvent = false;\n\n    constructor(containerElement: HTMLElement = document.body) {\n        super();\n        this.containerElement = containerElement;\n        // Make sure the container element exists and has a valid parent\n    }\n\n    @PostConstruct()\n    init(): void {\n        // Don't add any event listeners for DIALOG_CLOSE to avoid recursion\n        // We'll handle closing directly\n        \n        // Add escape key listener if closeOnEscape is true\n        // const optionsHandler = this.getBeanInstanceByBeanName(BEAN_NAME.OPTION_HANDLER) as DialogOptionsHandler;\n        if (this.optionsHandler.getCloseOnEscape()) {\n            document.addEventListener('keydown', this.handleKeyDown);\n        }\n        \n    }\n\n    private handleKeyDown = (event: KeyboardEvent): void => {\n        if (event.key === 'Escape' && this.optionsHandler.getCloseOnEscape()) {\n            this.hideDialog();\n        }\n        \n        // Handle keydown events without relying on the getOnKeydown method\n        const options = this.optionsHandler as any;\n        if (options && typeof options.getOnKeydown === 'function') {\n            const onKeydown = options.getOnKeydown();\n            if (onKeydown) {\n                onKeydown(event);\n            }\n        }\n    }\n\n    public showDialog(): void {\n        \n        // Use both instance and static flags to prevent recursion across instances\n        if (CustomDialogHandler.isDialogBeingCreated || this.isCreatingInstance) {\n            return;\n        }\n        \n        if (this.state === DialogStates.DISPLAYING) {\n            return;\n        }\n        \n        this.state = DialogStates.OPENING;\n        this.dialogInstanceCount++;\n        \n        const params = this.getDialogParams();\n        const itemDetails = {\n            getRenderer: () => this.optionsHandler.getContentRenderer(),\n            getUserRendererParams: () => this.optionsHandler.getRendererParams()\n        };\n\n        try {\n            this.isCreatingInstance = true;\n            CustomDialogHandler.isDialogBeingCreated = true;\n            \n            // Add a timeout to reset flags in case something goes wrong\n            setTimeout(() => {\n                if (this.isCreatingInstance) {\n                    this.isCreatingInstance = false;\n                    CustomDialogHandler.isDialogBeingCreated = false;\n                }\n            }, 5000); // 5 second timeout\n            \n            const userDetails = this.userComponentHandler?.getDialogRendererDetails(itemDetails, params);\n\n            if (userDetails) {\n                const instance = userDetails.newInstance();\n                if (instance) {\n                    const currentInstanceCount = this.dialogInstanceCount;\n                    instance.then((component: any) => {\n                        this.isCreatingInstance = false;\n                        CustomDialogHandler.isDialogBeingCreated = false;\n                        this.afterDialogRendererCallback(currentInstanceCount, component);\n                    }).catch((_error: any) => {\n                        this.isCreatingInstance = false;\n                        CustomDialogHandler.isDialogBeingCreated = false;\n                        this.state = DialogStates.IDLE;\n                    });\n                } else {\n                    this.isCreatingInstance = false;\n                    CustomDialogHandler.isDialogBeingCreated = false;\n                }\n            } else {\n                this.isCreatingInstance = false;\n                CustomDialogHandler.isDialogBeingCreated = false;\n                this.state = DialogStates.IDLE;\n            }\n        } catch (error) {\n            this.isCreatingInstance = false;\n            CustomDialogHandler.isDialogBeingCreated = false;\n            this.state = DialogStates.IDLE;\n        }\n    }\n\n    private afterDialogRendererCallback(dialogInstanceCopy: number, dialogComponent: any): void {\n        \n        if (this.dialogInstanceCount !== dialogInstanceCopy || this.state !== DialogStates.OPENING) {\n            this.cleanupComponent(dialogComponent);\n            return;\n        }\n\n        // Get component's element\n        let eGui;\n        try {\n            eGui = dialogComponent.getElement ? dialogComponent.getElement() : dialogComponent.getGui();\n            if (!eGui) {\n                this.cleanupComponent(dialogComponent);\n                this.state = DialogStates.IDLE;\n                return;\n            }\n        } catch (error) {\n            this.cleanupComponent(dialogComponent);\n            this.state = DialogStates.IDLE;\n            return;\n        }\n        \n        this.dialogComponentElement = eGui;\n        this.dialogComponent = dialogComponent;\n        \n        \n        if (!eGui.classList.contains('dg-dialog-content')) {\n            eGui.classList.add('dg-dialog-content');\n        }\n        \n        // Create dialog container\n        const dialogContainer = document.createElement('div');\n        dialogContainer.classList.add('dg-dialog');\n        dialogContainer.style.zIndex = '1001'; // Higher than overlay\n        \n        // Set accessibility attributes\n        const ariaLabel = this.optionsHandler.getAriaLabel();\n        if (ariaLabel) {\n            dialogContainer.setAttribute('aria-label', ariaLabel);\n        }\n\n        // Set accessibility attributes\n        dialogContainer.setAttribute('role', 'dialog'); // Add role=\"dialog\"\n        \n        const ariaDescribedBy = this.optionsHandler.getAriaDescribedBy();\n        if (ariaDescribedBy) {\n            dialogContainer.setAttribute('aria-describedby', ariaDescribedBy);\n        }\n        \n        const instanceID = this.optionsHandler.getInstanceID();\n        if (instanceID) {\n            dialogContainer.id = instanceID;\n        }\n        \n        // Set some default styling to ensure dialog is visible\n        dialogContainer.style.backgroundColor = 'white';\n        dialogContainer.style.borderRadius = '4px';\n        dialogContainer.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.1)';\n        dialogContainer.style.padding = '20px';\n        dialogContainer.style.maxWidth = '90vw';\n        dialogContainer.style.maxHeight = '90vh';\n        dialogContainer.style.overflow = 'auto';\n        \n        // Apply positioning\n        dialogContainer.style.position = 'absolute';\n        const position = this.optionsHandler.getPosition() || 'center';\n        \n        switch (position) {\n            case 'center':\n            default:\n                dialogContainer.style.top = '50%';\n                dialogContainer.style.left = '50%';\n                dialogContainer.style.transform = 'translate(-50%, -50%)';\n                break;\n            case 'top':\n                dialogContainer.style.top = '20px';\n                dialogContainer.style.left = '50%';\n                dialogContainer.style.transform = 'translateX(-50%)';\n                break;\n            case 'bottom':\n                dialogContainer.style.bottom = '20px';\n                dialogContainer.style.left = '50%';\n                dialogContainer.style.transform = 'translateX(-50%)';\n                break;\n        }\n        \n        // Set dimensions if provided\n        const options = this.optionsHandler as any;\n        let width = null;\n        let height = null;\n        \n        if (typeof options.getWidth === 'function') {\n            width = options.getWidth();\n        }\n        \n        if (width) {\n            dialogContainer.style.width = typeof width === 'number' ? `${width}px` : width.toString();\n        } else {\n            // Default width if none provided\n            dialogContainer.style.minWidth = '300px';\n        }\n        \n        if (typeof options.getHeight === 'function') {\n            height = options.getHeight();\n        }\n        \n        if (height) {\n            dialogContainer.style.height = typeof height === 'number' ? `${height}px` : height.toString();\n        }\n        \n        // Add the content\n        dialogContainer.appendChild(eGui);\n\n        //remove dialog container\n        this.addDestroyFunc(()=>{\n            dialogContainer.remove();\n        })\n        \n        // Add modal overlay if modal is true\n        if (this.optionsHandler.getModal()) {\n            this.addModalOverlay();\n        }\n        \n        // Make sure the container element is valid\n        if (!this.containerElement || !this.containerElement.appendChild) {\n            this.cleanupComponent(dialogComponent);\n            this.state = DialogStates.IDLE;\n            return;\n        }\n        \n        // Append to container\n        try {\n            this.containerElement.appendChild(dialogContainer);\n            dialogContainer.style.display = 'flex';\n        } catch (error) {\n            this.cleanupComponent(dialogComponent);\n            this.state = DialogStates.IDLE;\n            return;\n        }\n        \n        // Set state to displaying\n        this.state = DialogStates.DISPLAYING;\n        \n        // Dispatch open event\n        this.dispatchOpenEvent();\n        \n        // Call onOpen callback if defined\n        const onOpen = this.optionsHandler.getOnOpen();\n        if (onOpen) {\n            onOpen();\n        }\n    }\n\n    private addModalOverlay(): void {\n        // Add modal overlay to prevent interaction with background\n        const overlay = document.createElement('div');\n        overlay.classList.add('dg-dialog-overlay');\n        overlay.style.position = 'fixed';\n        overlay.style.top = '0';\n        overlay.style.left = '0';\n        overlay.style.right = '0';\n        overlay.style.bottom = '0';\n        overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n        overlay.style.zIndex = '1000';\n        \n        // Check if preventCloseOnOverlayClick is false before adding the click listener\n        if (!this.optionsHandler.getPreventCloseOnOverlayClick()) {\n            overlay.addEventListener('click', () => this.hideDialog());\n        }\n\n        this.containerElement!.appendChild(overlay);\n        this.dialogOverlay = overlay;\n    }\n\n    private removeModalOverlay(): void {\n        if (this.dialogOverlay && this.dialogOverlay.parentNode) {\n            this.dialogOverlay.parentNode.removeChild(this.dialogOverlay);\n            this.dialogOverlay = null;\n        }\n    }\n\n    public hideDialog(): void {\n        \n        if (this.state !== DialogStates.DISPLAYING) {\n            return;\n        }\n        \n        this.state = DialogStates.CLOSING;\n        \n        try {\n            // Hide the dialog container\n            const dialogContainer = document.querySelector('.dg-dialog');\n            if (dialogContainer) {\n                if (dialogContainer.parentNode) {\n                    dialogContainer.parentNode.removeChild(dialogContainer);\n                }\n            } else {\n            }\n            \n            // Remove modal overlay if exists\n            this.removeModalOverlay();\n            \n            // Call onClose callback if defined\n            const onClose = this.optionsHandler.getOnClose();\n            if (onClose) {\n                try {\n                    onClose();\n                } catch (error) {\n                }\n            }\n            \n            // Clean up dialog component without dispatching events\n            if (this.dialogComponent) {\n                this.cleanupDialogComponentWithoutEvents();\n            }\n            \n            // Set state to idle\n            this.state = DialogStates.IDLE;\n        } catch (error) {\n            // Force reset state in case of error\n            this.state = DialogStates.IDLE;\n        }\n    }\n\n    // New method to clean up without dispatching events\n    private cleanupDialogComponentWithoutEvents(): void {\n        \n        if (!this.dialogComponent) {\n            return;\n        }\n        \n        const dialogPopupDestroyFunction = this.dialogPopupDestroyFunction;\n        const dialogComponent = this.dialogComponent;\n        \n        // Cleanup\n        try {\n            if (dialogPopupDestroyFunction) {\n                dialogPopupDestroyFunction();\n            }\n            \n            this.cleanupComponent(dialogComponent);\n        } catch (error) {\n        }\n        \n        this.dialogPopupDestroyFunction = undefined;\n        this.dialogComponent = undefined;\n        this.dialogComponentElement = null;\n        \n        // We don't call dispatchCloseEvent() here to prevent recursion\n    }\n    \n    private dispatchOpenEvent(): void {\n        // Use a different event type to prevent recursion\n        this.dispatchEvent({\n            type: DialogEvents.DIALOG_SHOWN, // Use DIALOG_SHOWN instead of DIALOG_OPEN\n            element: this.containerElement,\n            dialogElement: this.dialogComponentElement\n        });\n    }\n    \n    dispatchCloseEvent(): void {\n        // Important: Use a flag to prevent recursive event dispatching\n        if (this._isDispatchingCloseEvent) {\n            return;\n        }\n        \n        try {\n            this._isDispatchingCloseEvent = true;\n            this.dispatchEvent({\n                type: DialogEvents.DIALOG_CLOSE,\n                element: this.containerElement\n            });\n        } finally {\n            this._isDispatchingCloseEvent = false;\n        }\n    }\n    \n    private getDialogParams(): any {\n        return {\n            hideDialogCallback: () => this.hideDialog()\n        };\n    }\n    \n    private cleanupComponent<T>(instance: T): T | undefined {\n        if (instance && (instance as any).destroy) {\n            (instance as any).destroy();\n        }\n        return undefined;\n    }\n    \n    // Add missing destroyDialogComponent method to fix the linter error\n    private destroyDialogComponent(): void {\n        \n        if (!this.dialogComponent) {\n            return;\n        }\n        \n        try {\n            if (this.dialogPopupDestroyFunction) {\n                this.dialogPopupDestroyFunction();\n                this.dialogPopupDestroyFunction = undefined;\n            }\n            \n            this.cleanupComponent(this.dialogComponent);\n            this.dialogComponent = undefined;\n            this.dialogComponentElement = null;\n        } catch (error) {\n        }\n    }\n    \n    public destroy(): void {\n        if (this.isDestroyed) {\n            return;\n        }\n        \n        this.isDestroyed = true;\n        this.state = DialogStates.CLOSING;\n\n        // Remove event listeners\n        document.removeEventListener('keydown', this.handleKeyDown);\n        \n        // Clean up the dialog component if it exists\n         this.destroyDialogComponent();\n        \n        // Remove modal overlay if exists\n        this.removeModalOverlay();\n        \n        // Remove ONLY the dialog element, not its parent container\n        if (this.dialogComponentElement && this.dialogComponentElement.parentNode) {\n            try {\n                this.dialogComponentElement.remove();\n            } catch (error) {\n            \n            }\n        }\n        // Clean up references\n        this.dialogComponentElement = null;\n        this.dialogComponent = null;\n        // Call super.destroy()\n        super.destroy();\n    }\n} ","import { PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DialogEvents } from \"./Constants/DialogEvents\";\nimport { CustomDialogHandler } from \"./CustomDialogHandler\";\n\nexport interface DialogHandlerParams {\n    closeOnBackdropClick?: boolean;\n    onClose?: () => void;\n    onOpen?: () => void;\n    destroyOnClose?: boolean;\n    title?: string;\n    content?: string;\n    width?: string;\n    height?: string;\n    modal?: boolean;\n    closeOnEscape?: boolean;\n}\n\n// Simply extend EventEmitter without a bean annotation\nexport class DialogHandler extends EventEmitter {\n    \n    private customDialogHandler : CustomDialogHandler | null = null;\n    private targetElement: HTMLElement;\n    private isDestroyed = false;\n    private isInitialized = false;\n    \n    // Add a flag to prevent recursive calls\n    private isShowingDialog = false;\n\n    constructor(element: HTMLElement = document.body) {\n        super();\n        if (!element) {\n            this.targetElement = document.body;\n        } else {\n            this.targetElement = element;\n        }\n    }\n\n    @PostConstruct()\n    init(): void {\n        if (this.isInitialized) {\n            return; // Prevent multiple initializations\n        }\n        \n        \n        try {\n            // Create custom dialog handler\n            this.customDialogHandler =this.createManagedBean(new CustomDialogHandler(this.targetElement));\n            \n            // Initialize the custom dialog handler\n            this.customDialogHandler.init();\n            \n            // Only listen for DIALOG_SHOWN events to avoid recursion with DIALOG_OPEN\n            this.customDialogHandler.addEventListener(DialogEvents.DIALOG_SHOWN, this.handleDialogShown);\n            \n            // Listen for external events\n            this.addEventListener(DialogEvents.DIALOG_OPEN, this.handleDialogOpen);\n            \n            this.isInitialized = true;\n        } catch (error) {\n        }\n    }\n    \n    // Use arrow functions to maintain 'this' context\n    private handleDialogShown = (event: any) => {\n        // Forward the event with a different type to prevent recursion\n        const openEvent = { ...event, type: DialogEvents.DIALOG_OPEN };\n        this.dispatchEvent(openEvent);\n    };\n    \n    private handleDialogOpen = () => {\n        if (!this.customDialogHandler) return;\n        // Only show dialog if we're not already showing one\n        if (!this.isShowingDialog) {\n            this.showDialog();\n        }\n    };\n\n    public getElement(): HTMLElement {\n        const dialogElement = this.targetElement.querySelector('.dg-dialog') as HTMLElement;\n        return dialogElement || this.targetElement;\n    }\n    \n    /**\n     * Closes the dialog\n     */\n    public close(): void {\n        \n        try {\n            if (this.customDialogHandler) {\n                this.customDialogHandler.hideDialog();\n            }\n        } catch (error) {\n        }\n    }\n\n    /**\n     * Completely destroys the dialog instance\n     */\n\n    /**\n     * Shows a dialog\n     * @param component Optional component to show in the dialog\n     * @param params Optional dialog parameters\n     */\n    public showDialog(_component?: any, _params?: DialogHandlerParams): void {\n        // Prevent recursive calls\n        if (this.isShowingDialog) {\n            return;\n        }\n        \n        try {\n            this.isShowingDialog = true;\n            \n            \n            if (!this.customDialogHandler) {\n                this.isShowingDialog = false;\n                return;\n            }\n            \n            // Call the showDialog method on customDialogHandler\n            // This method doesn't need parameters in the CustomDialogHandler\n            this.customDialogHandler.showDialog();\n        } catch (error) {\n        } finally {\n            // Reset flag after a short delay to prevent immediate recursive calls\n            setTimeout(() => {\n                this.isShowingDialog = false;\n            }, 100);\n        }\n    }\n\n    public destroyDialogComponent(): void {\n        if (this.customDialogHandler) {\n            this.customDialogHandler.destroy();\n            this.customDialogHandler = null;\n        }\n    }\n    \n    public destroy(): void {\n        if (this.isDestroyed) {\n            return;\n        }\n    \n        this.isDestroyed = true;\n    \n        // Remove event listeners to prevent memory leaks\n        if (this.customDialogHandler) {\n            this.customDialogHandler.removeEventListener(DialogEvents.DIALOG_SHOWN, this.handleDialogShown);\n            this.removeEventListener(DialogEvents.DIALOG_OPEN, this.handleDialogOpen);\n    \n            // Destroy the custom dialog handler\n            this.customDialogHandler.destroy();\n        }\n        \n        this.destroyDialogComponent();\n\n        super.destroy();\n    }\n}\n","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nimport { DialogBeanName } from \"./Constants/DialogBeanName\";\nimport { IDialogConfiguration } from \"./Interface/IDialogConfiguration\";\nimport { DialogEvents } from \"./Constants/DialogEvents\";\nimport { IDialogAPI } from \"./Interface/IDialogAPI\";\nimport { DialogControllerHandler } from \"./ControllerHandler\";\n\n@Bean(DialogBeanName.DIALOG_API)\nexport class DialogAPI extends EventEmitter implements IDialogAPI {\n\n    private isDestroyed = false; // Add a flag to track if the instance is already destroye\n\n\n    @AutoWired(BEAN_NAME.BEANS) private getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n    updateProperties(_options: IDialogConfiguration, _force: boolean = false): void {\n        const controller = this.getBeanInstanceByBeanName(DialogBeanName.DIALOG_CONTROLLER_HANDLER) as DialogControllerHandler;\n        const dialogHandler = controller.getDialogHandler();\n        if (dialogHandler) {\n            // dialogHandler.updateProperties(options, force);\n        }\n    }\n\n    open(): void {\n        this.dispatchEvent({\n            type: DialogEvents.DIALOG_OPEN\n        });\n    }\n\n    close(): void {\n        const controller = this.getBeanInstanceByBeanName(DialogBeanName.DIALOG_CONTROLLER_HANDLER) as DialogControllerHandler;\n        const dialogHandler = controller.getDialogHandler();\n    \n        if (dialogHandler) {\n            dialogHandler.close(); // Call the close method of DialogHandler\n        }\n    }\n\n    hide(): void {\n        this.dispatchEvent({\n            type: DialogEvents.DIALOG_HIDE\n        });\n    }\n\n    show(): void {\n        this.dispatchEvent({\n            type: DialogEvents.DIALOG_SHOW\n        });\n    }\n\n    getElement(): HTMLElement {\n        const controller = this.getBeanInstanceByBeanName(DialogBeanName.DIALOG_CONTROLLER_HANDLER) as DialogControllerHandler;\n        const dialogHandler = controller.getDialogHandler();\n        return dialogHandler ? dialogHandler.getElement() : document.createElement('div');\n    }\n\n    destroy(): void {\n        if (this.isDestroyed) {\n            return;\n        }\n        this.isDestroyed = true;\n\n        const controller = this.getBeanInstanceByBeanName(DialogBeanName.DIALOG_CONTROLLER_HANDLER) as DialogControllerHandler;\n        const dialogHandler = controller.getDialogHandler();\n        \n        if (dialogHandler) {\n            dialogHandler.destroy();\n        }\n        \n        // Call super.destroy() to clean up EventEmitter resources\n        super.destroy();\n        \n        // Then call context.destroy() if needed\n        if (this.context) {\n            this.context.destroy();\n        }\n    }\n\n    dispatchRefreshEvent(): void {\n        this.dispatchEvent({\n            type: DialogEvents.DIALOG_REFRESH\n        });\n    }\n} ","import { Bean } from \"@dg/corecomponent\";\nimport { DialogBeanName } from \"./Constants/DialogBeanName\";\nimport { CorePopupHandler } from \"../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(DialogBeanName.DIALOG_POP_HANDLER)\nexport class DialogPopHandler extends CorePopupHandler {\n    // Extend CorePopupHandler with dialog-specific behavior if needed\n} ","import { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { IDialogAPI } from \"./Interface/IDialogAPI\";\nimport { IDialogConfiguration } from \"./Interface/IDialogConfiguration\";\nimport { DialogBeanName } from \"./Constants/DialogBeanName\";\nimport { DialogRenderer } from \"./Components/DialogRenderer\";\nimport { DialogUserComponentHandler } from \"./Components/DialogUserComponentHandler\";\nimport { DialogControllerHandler } from \"./ControllerHandler\";\nimport { DialogHandler } from \"./DialogHandler\";\nimport { DialogAPI } from \"./DialogAPI\";\nimport { DialogPopHandler } from \"./DialogPopHandler\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { DialogOptionsHandler } from \"./DialogOptionsHandler\";\nimport \"../src/style/dialog.css\";\n\nexport interface IUserParams {\n    globalEventListener?: Function;\n    frameworkOverrides?: IFrameworkOverrides;\n    frameworkComponentWrapper?: any;\n}\n\nexport class Dialog {\n    public api!: IDialogAPI;\n    \n    constructor(configuration: IDialogConfiguration, params?: IUserParams) {\n        const setContextApi = (api: IDialogAPI) => {\n            this.api = api;\n        }\n        new DialogCoreComponent().initializeDialog(\n            configuration,\n            setContextApi,\n            params,\n        );\n    }\n}\n\nclass DialogCoreComponent {\n    initializeDialog(configuration: IDialogConfiguration, callBack: CallableFunction, params: IUserParams = {}): void {\n        const userConfigurations = this.createUserConfiguration(\n            configuration,\n            params\n        );\n        const beanClasses = this.CreateBeanClasses();\n\n        const context = new Context();\n\n        context.registerBeanClasses(beanClasses, userConfigurations);\n        \n        this.registryDefaultComponent(context);\n\n        const dialog = context.createBean(new DialogHandler());\n\n        this.registerHandler(context, dialog);\n        \n        this.setApi(context, callBack);\n\n        (window as any).context = context;\n    }\n\n    private setApi(context: Context, callBack: CallableFunction): void {\n        const api = context.getBean(DialogBeanName.DIALOG_API) as IDialogAPI;\n        callBack && callBack(api);\n    }\n\n    private registerHandler(context: Context, handler: DialogHandler): void {\n        const controller = context.getBean(DialogBeanName.DIALOG_CONTROLLER_HANDLER) as DialogControllerHandler;\n        controller.registerDialogHandler(handler);\n    } \n\n    private CreateBeanClasses(): Set<any> {\n        return new Set([\n            DialogOptionsHandler,\n            EventHandler,\n            ComponentsRegistry,\n            UserComponentRegistry,\n            DialogUserComponentHandler,\n            DialogAPI,\n            DialogPopHandler,\n            ComponentMetadataProvider,\n            DialogControllerHandler,\n        ]);\n    }\n\n    private registryDefaultComponent(context: Context): void {\n        const userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n        const defaultComponent = {\n            dialogRenderer: DialogRenderer\n        };\n\n        traverseObject(defaultComponent, (name: string, component: any) => {\n            userComponentRegistry.registerDefaultComponent(name, component);\n        });\n    }\n\n    private createUserConfiguration(configuration: any, params: IUserParams): {\n        dialogOptions: any;\n        frameWorkOverrides: IFrameworkOverrides | null;\n        globalEventListener: Function | null;\n        frameworkComponentWrapper: any | null;\n    } {\n        let frameWorkOverrides = params.frameworkOverrides ?? null;\n        if (!frameWorkOverrides) {\n            frameWorkOverrides = new VanillaFrameWorkOverrider();\n        }\n        return {\n            dialogOptions: configuration,\n            frameWorkOverrides,\n            frameworkComponentWrapper: params.frameworkComponentWrapper,\n            globalEventListener: params.globalEventListener ?? null,\n        };\n    }\n} ","export const DATE_RANGE_PICKER_BEAN_NAME = {\n\tAPI          : 'dateRangePickerApi',\n\tCONFIGURATION: 'configuration',\n\tDATA_MANAGER : 'dataManager',\n\tINTERACTOR   : 'interactor',\n\tCONTROLLER   : 'CONTROLLER'\n\t\n\n}","\n\n\nexport const DATE_RANGE_FIELD_BEAN_NAME = {\n    INTERACTOR   : 'INTERACTOR',\n    CONTROLLER   : 'CONTROLLER',\n    DATA_MANAGER : 'DATA_MANAGER',\n    API          : 'API',\n    CONFIGURATION: 'configuration'\n\n}","\n\n\nexport const DATE_RANGE_PIKCER_CUSTOM_EVENTS = {\n    UPDATE_PROPERTIES_IN_FROM_PICKER: 'UPDATE_PROPERTIES_IN_FROM_PICKER',\n    SET_MINIMUM_DATE                : 'SET_MINIMUM_DATE',\n    SET_MAXIMUM_DATE                : 'SET_MAXIMUM_DATE',\n    DESTROY_PICKER                  : 'DESTROY_PICKER',\n    DESTROY                         : 'DESTROY_RANGE_PICKER',\n    FOCUS_INPUT_ELEMENT             : \"FOCUS_INPUT_ELEMENT\"\n\n}","import { AutoWired } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DateRangePickerRootControllerType, DateRangePickerRootViewType, RootComponentPropertyType } from \"./date-range-picker-root.types\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../../../date-range-field/src/constant/bean-name-constant\";\nimport { DateRangePickerControllerHandlerType } from \"../model/date-range-picker-controller.type\";\nimport { DATE_RANGE_PIKCER_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\n\n\nexport class DateRangePickerRootController extends AbstractController<DateRangePickerRootViewType> implements DateRangePickerRootControllerType {\n\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER) controllerHandler !: DateRangePickerControllerHandlerType;\n\n\n    setComponent(component: DateRangePickerRootViewType): void {\n        this.component = component;\n        this.controllerHandler.registerDateRangePickerFieldController(this);\n        this.setTabindex();\n        this.registerEvents();\n    }\n\n    private registerEvents(){\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY,this.destroy.bind(this));\n\t\tthis.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.FOCUS_INPUT_ELEMENT,this.focusInputElement.bind(this));\n\n    }\n\n    private setTabindex(){\n\t\tconst element = this.component?.getElement() as HTMLElement;\n        element.setAttribute(\"tabindex\", \"0\");\n\t}\n\n\n\n    getProperty(): RootComponentPropertyType{\n        const  shouldRenderHeaderComponent = this.optionsHandler.getHeaderTitle() ?? false;\n        const shouldRenderFooterComponent = this.optionsHandler.shouldImmediateCommit() === false || this.optionsHandler.shouldRenderClearButton();\n\n        return {\n            shouldRenderHeaderComponent,\n            shouldRenderFooterComponent\n            \n        }\n    }\n\n\n    getElement(): HTMLElement {\n        return this.component?.getElement() as HTMLElement\n    }\n\n\n    destroy(): void {\n        this.optionsHandler.onDestroy();\n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY_PICKER\n        })\n        this.component?.destroy();\n\t\tsuper.destroy();\n\n    }\n\n    focusInputElement():void{\n\t\tconst inputElement = this.optionsHandler.getInputElement();\n\t\tinputElement && inputElement.focus();\n\t}\n\n\n}","\nimport { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateRangePickerRootViewType } from \"./date-range-picker-root.types\";\nimport { DateRangePickerRootController } from \"./date-range-picker-root-controller\";\nimport { DateRangePickerRootTemplate } from \"../templates/date-range-picker-root-template\";\n\n\n\n\n\nexport class DateRangePickerRootView extends Component {\n    @queryAssignedNodes('label') LabelElement \t\t\t !: HTMLElement;\n\t@queryAssignedNodes('description') descriptionElement \t\t\t !: HTMLElement;\n\n    private appendTo: HTMLElement | undefined;\n\tconstructor(appendTo: HTMLElement | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n    @PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: DateRangePickerRootViewType = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tdestroy: () => this.destroy(),\n\t\t\tgetLabelElement : ()=> this.getLabelElement(),\n\t\t\tgetDescriptionElement : ()=> this.getDescriptionElement(),\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new DateRangePickerRootController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = DateRangePickerRootTemplate(props);\n\n\n\t\t\n\t\tthis.setTemplate(template);\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tgetElement(){\n\t\treturn this.getGui();\n\t}\n\n  \n\t getLabelElement():any{\n\t\treturn this.LabelElement ? this.LabelElement  : null\n\t}\n\n\t getDescriptionElement():any{\n\t\treturn this.descriptionElement ? this.descriptionElement : null;\n\t}\n\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = undefined;\n\t\t});\n\t}\n\n    protected destroy(): void {\n\t\tthis.getGui()?.remove();\n\t\t// super.destroy();\n\t}\n\n\n    \n    \n    \n\n}","import { RootComponentPropertyType } from \"../date-range-picker-root/date-range-picker-root.types\";\n\n\n\nexport function DateRangePickerRootTemplate(params : RootComponentPropertyType){\n\n    const root = document.createElement('div');\n    root.className = 'dg-date-range-picker__root';\n    root.setAttribute('ref', 'main');\n\n    \n    if(params.shouldRenderHeaderComponent){\n        const headerComponent = document.createElement('dg-date-range-picker-header')\n        root.append(headerComponent)\n    }\n\n    const container = document.createElement('div');\n    container.classList.add('dg-date-range-picker__container')\n    root.append(container)\n\n    \n    const fromList = document.createElement('dg-date-range-picker-from-list')\n    container.append(fromList);\n\n\n    const toList = document.createElement('dg-date-range-picker-to-list')\n    container.append(toList)\n\n    if(params.shouldRenderFooterComponent){\n        const footer = document.createElement('dg-date-range-picker-footer')\n        root.append(footer);\n    }\n\n    \n    return root;\n\n\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { DateTimeUserComponentHandlerTypes } from './date-range-picker-user-component-handler.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER      = 'prefixRenderer',\n\tSUFFIX_RENDERER      = 'suffixRenderer',\n\tDESCRIPTION_RENDERER = 'descriptionRenderer',\n\tBUTTON_RENDERER      = 'buttonRenderer',\n\tERROR_RENDERER       = 'errorRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class DateRangePickerUserComponentHandler extends UserComponentHandler implements DateTimeUserComponentHandlerTypes{\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.DESCRIPTION_RENDERER, params, PropertyName.DESCRIPTION_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\t\n\tprotected getComponentDetails( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DESCRIPTION_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateRangePickerApiType } from \"./date-range-picker-api.types\";\nimport { DateRangePickerConfiguration } from \"../../date-range-picker-configuration.types\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../../../date-range-field/src/constant/bean-name-constant\";\nimport { DateRangePickerControllerHandlerType } from \"./date-range-picker-controller.type\";\n\n\n\n\n\n\n\n@Bean(DATE_RANGE_PICKER_BEAN_NAME.API)\nexport class DateRangePickerApi  extends EventEmitter implements DateRangePickerApiType{\n\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER) controllerHandler !: DateRangePickerControllerHandlerType;\n\n\n    getElement(): HTMLElement {\n        const rootController = this.controllerHandler.getDateRangePickerFieldController()\n        return rootController.getElement();\n       \n    }\n    getValue(): Date | null {\n        throw new Error(\"Method not implemented.\");\n    }\n    focus(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    blur(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    hide(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    show(): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    setValue(_value: any): void {\n        throw new Error(\"Method not implemented.\");\n    }\n    updateProperties(_properties: DateRangePickerConfiguration): void {\n        throw new Error(\"Method not implemented.\");\n    }\n\n     destroy(): void {\n        \n    }\n  \n\n   \n}","import { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DateRangePickerHeaderComponentType, DateRangePickerHeaderControllerType, HeaderComponentPropertyType } from \"./date-range-picker-header.types\";\n\n\n\n\n\nexport class DateRangePickerHeaderController extends AbstractController<DateRangePickerHeaderComponentType> implements DateRangePickerHeaderControllerType{\n\n\n\n    setComponent(component : DateRangePickerHeaderComponentType ) :void {\n        this.component = component\n\n    }\n\n\n    getProperties(): HeaderComponentPropertyType{\n        return {\n            headerTitle : this.optionsHandler.getHeaderTitle()\n        }\n    }\n}\n","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateRangePickerHeaderComponentType } from \"./date-range-picker-header.types\";\nimport { DateRangePickerHeaderController } from \"./date-range-picker-header-controller\";\nimport { DateRangePickerHeaderTemplate } from \"../templates/date-range-picker-header-template\";\n\n\n\n\nexport class DateRangePickerHeaderComponent extends Component{\n\n\n    @PostConstruct()\n\tinit(): void {\n\n\t\tconst component : DateRangePickerHeaderComponentType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string,force : boolean) => this.addOrRemoveCssClass(className,force),\n\t\t};\n\n        const controller = this.createManagedBean(new DateRangePickerHeaderController());\n\t\tconst props = controller.getProperties()\n        const template = DateRangePickerHeaderTemplate(props)\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n    }\n} \n    \n\t","import { HeaderComponentPropertyType } from \"../date-range-picker-header/date-range-picker-header.types\";\n\n\n\nexport function DateRangePickerHeaderTemplate(params : HeaderComponentPropertyType){\n    \n    const root = document.createElement('div');\n    root.className = 'dg-date-range-picker__header';\n\n    const title = document.createElement('div');\n    title.classList.add('dg-date-range-picker__header-title');\n    title.innerText = params.headerTitle\n    root.append(title);\n\n    return root;\n\n\n}","import { AutoWired } from \"@dg/corecomponent\";\nimport { Calendar } from \"../../../../calendar/src/calendar\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DATE_RANGE_PIKCER_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateRangePickerFromComponentType, DateRangePickerFromControllerType, FromComponentPropertyType } from \"./date-range-picker-from-picker.types\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateRangeChangeEvent, DateRangePickerDataManagerType } from \"../model/date-range-picker-data-manager.types\";\n\n\n\n\n\nexport class DateRangePickerFromController extends AbstractController<DateRangePickerFromComponentType> implements DateRangePickerFromControllerType{\n\n    \n    @AutoWired(DATE_RANGE_PICKER_BEAN_NAME.DATA_MANAGER) dataManger !: DateRangePickerDataManagerType\n    \n    private datepicker : any\n\n    setComponent(component : DateRangePickerFromComponentType ) :void {\n        this.component = component\n        this.createDatePicker()\n        this.registerEvents();\n\n\n    }\n\n    private registerEvents(){\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.UPDATE_PROPERTIES_IN_FROM_PICKER,this.updateProperties.bind(this))\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MAXIMUM_DATE,this.setMaximumDate.bind(this))\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY_PICKER,this.destroyPicker.bind(this));\n\n\n\n    }\n\n    getProperties(): FromComponentPropertyType{\n    \n        return {\n            fromTitle : this.optionsHandler.getFromLabel()\n\n        }\n    }\n\n\n    private createDatePicker():void{\n        const datePickerConfiguration = this.createDatePickerConfiguration();\n        this.datepicker = new Calendar(datePickerConfiguration);\n        this.dataManger.onDateRangeChange(this.onDateRangeChange.bind(this));\n\n    }\n\n    private createDatePickerConfiguration():any{\n        const element = this.component?.getElement() as HTMLElement;\n\n        const datePickerConfiguration = {\n                appendTo         : element,\n                value            : this.dataManger.getFromDate(),\n                minDate          : this.optionsHandler.getMinDate(),\n                maxDate          : this.dataManger.getToDate() ?? this.optionsHandler.getToValue(),\n                closeOnSelect    : false,\n                inputElement     : this.optionsHandler.getInputElement(),\n                id               : createId(),\n                monthFormat      : 'MMM',\n                format           : 'DD/MM/YYYY',\n                type             : 'datepicker',\n                showAdjacentDates: false,\n\n                onChange         : (value:any)=>{\n                                        this.dataManger.setFromDate(value);\n                                        this.dispatchEvent({\n                                            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MINIMUM_DATE,\n                                            value \n                                        })\n                                 }, \n        }\n\n\n        return datePickerConfiguration\n    }\n\n    private updateProperties(params : {type : string,properties :any}){\n        // this.datepicker.api.setDate(params.properties.value)\n        this.datepicker.api.updateProperties(params.properties)\n\n    }\n\n    private setMaximumDate(params : {type : string,value :Date}){\n        this.updateProperties({\n            type : '',\n            properties:{ maxDate : params.value}\n        })\n    }\n\n    private onDateRangeChange(params: DateRangeChangeEvent){\n        const immediateCommit = this.optionsHandler.shouldImmediateCommit();\n        if(immediateCommit){\n                 this.optionsHandler.onDateRangeChange(params.range);\n        }\n\n    }\n\n    private destroyPicker(){\n        if(this.datepicker){\n            this.datepicker.api.destroy();\n            this.datepicker = null\n        }\n        \n    }\n\n   \n}\n\n\nfunction createId(){\n    return `datepicker-${Math.random().toString(36).substring(2, 9)}`;\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateRangePickerFromComponentType } from \"./date-range-picker-from-picker.types\";\nimport { DateRangePickerFromController } from \"./date-range-picker-from-picker-controller\";\nimport { DateRangePickerFromTemplate } from \"../templates/date-range-picker-from-template\";\n\n\n\n\n\nexport class DateRangePickerFromComponent extends Component{\n\n\n    @PostConstruct()\n\tinit(): void {\n\n\t\tconst component : DateRangePickerFromComponentType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string,force : boolean) => this.addOrRemoveCssClass(className,force),\n\t\t};\n\n        const controller = this.createManagedBean(new DateRangePickerFromController());\n\t\tconst props = controller.getProperties()\n        const template = DateRangePickerFromTemplate(props)\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n    }\n} \n    \n\t","import { FromComponentPropertyType } from \"../date-range-picker-from-picker/date-range-picker-from-picker.types\";\n\n\n\n\n\nexport function DateRangePickerFromTemplate(params : FromComponentPropertyType){\n    \n    const list = document.createElement('div');\n    list.className = 'dg-date-range-picker__list';\n\n    const fromTitle = document.createElement('div');\n    fromTitle.classList.add('dg-date-range-picker__list-title');\n    fromTitle.classList.add('dg-date-range-picker__fromlabel')\n    fromTitle.innerText = params.fromTitle\n    list.append(fromTitle);\n\n    return list;\n\n\n}","import { AutoWired } from \"@dg/corecomponent\";\nimport { Calendar } from \"../../../../calendar/src/calendar\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DATE_RANGE_PIKCER_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateRangePickerToComponentType, DateRangePickerToControllerType, ToComponentPropertyType } from \"./date-range-picker-to-picker.types\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateRangePickerDataManagerType } from \"../model/date-range-picker-data-manager.types\";\n\n\n\n\n\nexport class DateRangePickerToController extends AbstractController<DateRangePickerToComponentType> implements DateRangePickerToControllerType{\n\n    private datepicker : any\n    @AutoWired(DATE_RANGE_PICKER_BEAN_NAME.DATA_MANAGER) dataManger !: DateRangePickerDataManagerType\n\n\n    setComponent(component : DateRangePickerToComponentType ) :void {\n        this.component = component\n        this.createDatePicker()\n        this.registerEvents();\n\n\n    }\n\n    private registerEvents(){\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.UPDATE_PROPERTIES_IN_FROM_PICKER,this.updateProperties.bind(this))\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MINIMUM_DATE,this.setMinimumDate.bind(this));\n        this.addListener(this.eventHandler,DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY_PICKER,this.destroyPicker.bind(this));\n        \n\n\n\n    }\n\n    getProperties(): ToComponentPropertyType{\n    \n        return {\n            toTitle : this.optionsHandler.getToLabel()\n\n        }\n    }\n\n\n    private createDatePicker():void{\n        const datePickerConfiguration = this.createDatePickerConfiguration();\n        this.datepicker = new Calendar(datePickerConfiguration);\n\n\n    }\n\n    private createDatePickerConfiguration():any{\n        const element = this.component?.getElement() as HTMLElement;\n\n        const datePickerConfiguration = {\n                appendTo         : element,\n                value            : this.dataManger.getToDate(),\n                closeOnSelect    : false,\n                shouldDeselect   : true,\n                inputElement     : this.optionsHandler.getInputElement(),\n                maxDate          : this.optionsHandler.getMaxDate(),\n                minDate          :this.dataManger.getFromDate() ?? this.optionsHandler.getFromValue(),\n                id               : createId(),\n                monthFormat      : 'MMM',\n                format           : 'DD/MM/YYYY',\n                type             : 'datepicker',\n                showAdjacentDates: false,\n\n                onChange         : (value:any)=>{\n\n                            this.dataManger.setToDate(value);\n                            const validationParams = this.dataManger.validateDateRange();\n                            // const closeOnSelect = this.optionsHandler.shouldCloseOnSelect();\n                            const immediateCommit = this.optionsHandler.shouldImmediateCommit();\n\n\n\n                            this.dispatchEvent({\n                                type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MAXIMUM_DATE,\n                                value \n                            })\n\n                            if(validationParams.areBothDatesSelected && immediateCommit){\n                                this.dispatchEvent({\n                                    type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY,\n                                    value \n                                })\n\n                            }\n                  },\n                            \n                onDeselect:(_value:Date)=>{\n                            this.dispatchEvent({\n                                type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MAXIMUM_DATE,\n                                value : null \n                            })\n                            this.dataManger.setToDate(null)\n\n                }\n        }\n\n\n        return datePickerConfiguration\n    }\n\n    private updateProperties(params : {type : string,properties :any}){\n        // this.datepicker.api.setDate(params.properties.value)\n        this.datepicker.api.updateProperties(params.properties)\n\n    }\n\n    private setMinimumDate(params : {type : string,value :Date}){\n        this.updateProperties({\n            type : '',\n            properties:{ minDate: params.value}\n        })\n    }\n\n    private destroyPicker(){\n        if(this.datepicker){\n            this.datepicker.api.destroy();\n            this.datepicker = null\n        }\n        \n    }\n   \n}\n\n\nfunction createId(){\n    return `datepicker-${Math.random().toString(36).substring(2, 9)}`;\n}","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateRangePickerToComponentType } from \"./date-range-picker-to-picker.types\";\nimport { DateRangePickerToController } from \"./date-range-picker-to-picker-controller\";\nimport { DateRangePickerToTemplate } from \"../templates/date-range-picker-to-template\";\n\n\n\n\n\n\nexport class DateRangePickerToComponent extends Component{\n\n\n    @PostConstruct()\n\tinit(): void {\n\n\t\tconst component : DateRangePickerToComponentType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string,force : boolean) => this.addOrRemoveCssClass(className,force),\n\t\t};\n\n        const controller = this.createManagedBean(new DateRangePickerToController());\n\t\tconst props = controller.getProperties()\n        const template = DateRangePickerToTemplate(props)\n        this.setTemplate(template);\n\t\tcontroller.setComponent(component);\n    }\n} \n    \n\t","import { ToComponentPropertyType } from \"../date-range-picker-to-picker/date-range-picker-to-picker.types\";\n\n\nexport function DateRangePickerToTemplate(params : ToComponentPropertyType){\n    \n    const list = document.createElement('div');\n    list.className = 'dg-date-range-picker__list';\n\n    const toTitle = document.createElement('div');\n    toTitle.classList.add('dg-date-range-picker__list-title');\n    toTitle.classList.add('dg-date-range-picker__tolabel')\n\n    toTitle.innerText = params.toTitle\n    list.append(toTitle);\n\n    return list;\n\n\n}","import { AutoWired, Bean, BEAN_NAME, PostConstruct } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { \n    DateRangePickerDataManagerType, \n    DateRange, \n    DateRangeValidation, \n    DateRangeConstraints, \n    DateRangeChangeEvent \n} from \"./date-range-picker-data-manager.types\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateRangePickerOptionHandlerType } from \"../../../../date-range-field/src/core/model/date-range-field-option-handler.types\";\n\n@Bean(DATE_RANGE_PICKER_BEAN_NAME.DATA_MANAGER)\nexport class DatePickerRangePickerDataManager extends EventEmitter implements DateRangePickerDataManagerType {\n    \n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: DateRangePickerOptionHandlerType;\n    private fromDate: Date | null = null;\n    private toDate: Date | null = null;\n    private constraints: DateRangeConstraints = {};\n    private initialized: boolean = false;\n    private changeCallbacks: ((event: DateRangeChangeEvent) => void)[] = [];\n\n    @PostConstruct()\n    init(): void {\n        // Initialize constraints from option handler\n        const minDate = this.optionHandler.getMinDate?.() ?? null;\n        const maxDate = this.optionHandler.getMaxDate?.() ?? null;\n        const minDaysToSelect = this.optionHandler.getMinDaysToSelect?.() ?? null;\n        const maxDaysToSelect = this.optionHandler.getMaxDaysToSelect?.() ?? null;\n\n        const initialConstraints: DateRangeConstraints = {};\n        if (minDate) initialConstraints.minDate = minDate;\n        if (maxDate) initialConstraints.maxDate = maxDate;\n        if (minDaysToSelect !== null) initialConstraints.minRange = minDaysToSelect as number;\n        if (maxDaysToSelect !== null) initialConstraints.maxRange = maxDaysToSelect as number;\n        this.setConstraints(initialConstraints);\n\n        // Initialize dates from option handler\n        const from = this.optionHandler.getFromValue?.() ?? null;\n        const to = this.optionHandler.getToValue?.() ?? null;\n\n        if (from) this.fromDate = from;\n        if (to) this.toDate = to;\n\n        this.initialized = true;\n    }\n\n    // Core data management\n    getFromDate(): Date | null {\n        return this.fromDate;\n    }\n\n    getToDate(): Date | null {\n        return this.toDate;\n    }\n\n    getDateRange(): DateRange {\n        return {\n            from: this.fromDate,\n            to: this.toDate\n        };\n    }\n\n    setFromDate(date: Date | null): void {\n        const previousRange = this.getDateRange();\n        this.fromDate = date;\n        \n        // Auto-adjust to date if it's before from date\n        if (date && this.toDate && this.toDate < date) {\n            this.toDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'from',\n            value: date,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    setToDate(date: Date | null): void {\n        const previousRange = this.getDateRange();\n        this.toDate = date;\n        \n        // Auto-adjust from date if it's after to date\n        if (date && this.fromDate && this.fromDate > date) {\n            this.fromDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'to',\n            value: date,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    setDateRange(range: DateRange): void {\n        const previousRange = this.getDateRange();\n        this.fromDate = range.from;\n        this.toDate = range.to;\n        \n        this.emitDateRangeChange({\n            type: 'range',\n            value: null,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    clearDateRange(): void {\n        const previousRange = this.getDateRange();\n        this.fromDate = null;\n        this.toDate = null;\n        \n        this.emitDateRangeChange({\n            type: 'clear',\n            value: null,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    // Validation\n    validateDateRange(): DateRangeValidation {\n        const errors: string[] = [];\n        const warnings: string[] = [];\n        let isValid = true;\n\n        // Boolean flag to indicate both dates are selected\n        const areBothDatesSelected = this.fromDate !== null && this.toDate !== null;\n\n        // Check if both dates are provided\n        if (!areBothDatesSelected) {\n            if (!this.fromDate && !this.toDate) {\n                // Both empty is valid (no selection)\n                return { isValid: true, errors: [], warnings: [], areBothDatesSelected };\n            } else {\n                // Only one date selected - this might be valid depending on use case\n                warnings.push('Only one date selected in range');\n            }\n        }\n\n        // Check date order\n        if (areBothDatesSelected && this.fromDate! > this.toDate!) {\n            errors.push('From date cannot be after to date');\n            isValid = false;\n        }\n\n        // Check constraints\n        if (this.fromDate && this.constraints.minDate && this.fromDate < this.constraints.minDate) {\n            errors.push('From date is before minimum allowed date');\n            isValid = false;\n        }\n\n        if (this.toDate && this.constraints.maxDate && this.toDate > this.constraints.maxDate) {\n            errors.push('To date is after maximum allowed date');\n            isValid = false;\n        }\n\n        // Check range constraints\n        if (areBothDatesSelected) {\n            const daysDiff = this.getDaysDifference();\n            if (daysDiff !== null) {\n                if (this.constraints.minRange && daysDiff < this.constraints.minRange) {\n                    errors.push(`Date range must be at least ${this.constraints.minRange} days`);\n                    isValid = false;\n                }\n                if (this.constraints.maxRange && daysDiff > this.constraints.maxRange) {\n                    errors.push(`Date range cannot exceed ${this.constraints.maxRange} days`);\n                    isValid = false;\n                }\n            }\n        }\n\n        return { isValid, errors, warnings, areBothDatesSelected };\n    }\n\n    validateDate(date: Date, type: 'from' | 'to'): boolean {\n        // Check if date is disabled\n        if (this.isDateDisabled(date)) {\n            return false;\n        }\n\n        // Check min/max constraints\n        if (this.constraints.minDate && date < this.constraints.minDate) {\n            return false;\n        }\n        if (this.constraints.maxDate && date > this.constraints.maxDate) {\n            return false;\n        }\n\n        // Check range constraints\n        if (type === 'from' && this.toDate) {\n            const daysDiff = Math.ceil((this.toDate.getTime() - date.getTime()) / (1000 * 60 * 60 * 24));\n            if (this.constraints.minRange && daysDiff < this.constraints.minRange) {\n                return false;\n            }\n            if (this.constraints.maxRange && daysDiff > this.constraints.maxRange) {\n                return false;\n            }\n        }\n\n        if (type === 'to' && this.fromDate) {\n            const daysDiff = Math.ceil((date.getTime() - this.fromDate.getTime()) / (1000 * 60 * 60 * 24));\n            if (this.constraints.minRange && daysDiff < this.constraints.minRange) {\n                return false;\n            }\n            if (this.constraints.maxRange && daysDiff > this.constraints.maxRange) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    isDateInRange(date: Date): boolean {\n        if (!this.fromDate || !this.toDate) {\n            return false;\n        }\n        return date >= this.fromDate && date <= this.toDate;\n    }\n\n    // Constraints\n    setConstraints(constraints: DateRangeConstraints): void {\n        this.constraints = { ...constraints };\n    }\n\n    getConstraints(): DateRangeConstraints {\n        return { ...this.constraints };\n    }\n\n    isDateDisabled(date: Date): boolean {\n        // Check disabled dates\n        if (this.constraints.disabledDates) {\n            for (const disabledDate of this.constraints.disabledDates) {\n                if (this.isSameDay(date, disabledDate)) {\n                    return true;\n                }\n            }\n        }\n\n        // Check disabled days of week\n        if (this.constraints.disabledDays) {\n            const dayOfWeek = date.getDay();\n            if (this.constraints.disabledDays.includes(dayOfWeek)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    // Event handling\n    onDateRangeChange(callback: (event: DateRangeChangeEvent) => void): void {\n        this.changeCallbacks.push(callback);\n    }\n\n    offDateRangeChange(callback: (event: DateRangeChangeEvent) => void): void {\n        const index = this.changeCallbacks.indexOf(callback);\n        if (index > -1) {\n            this.changeCallbacks.splice(index, 1);\n        }\n    }\n\n    emitDateRangeChange(event: DateRangeChangeEvent): void {\n        this.changeCallbacks.forEach(callback => callback(event));\n    }\n\n    // Utility methods\n    getDaysDifference(): number | null {\n        if (!this.fromDate || !this.toDate) {\n            return null;\n        }\n        return Math.ceil((this.toDate.getTime() - this.fromDate.getTime()) / (1000 * 60 * 60 * 24));\n    }\n\n    isRangeComplete(): boolean {\n        return this.fromDate !== null && this.toDate !== null;\n    }\n\n    formatDateRange(format: string = 'DD/MM/YYYY'): string {\n        if (!this.fromDate || !this.toDate) {\n            return '';\n        }\n        \n        const fromStr = this.formatDate(this.fromDate, format);\n        const toStr = this.formatDate(this.toDate, format);\n        return `${fromStr} - ${toStr}`;\n    }\n\n    getDateRangeAsString(): string {\n        return this.formatDateRange();\n    }\n\n    // State management\n    isInitialized(): boolean {\n        return this.initialized;\n    }\n\n    reset(): void {\n        this.fromDate = null;\n        this.toDate = null;\n        this.constraints = {};\n        this.changeCallbacks = [];\n    }\n\n    // Helper methods\n    private isSameDay(date1: Date, date2: Date): boolean {\n        return date1.getFullYear() === date2.getFullYear() &&\n               date1.getMonth() === date2.getMonth() &&\n               date1.getDate() === date2.getDate();\n    }\n\n    private formatDate(date: Date, format: string): string {\n        const day = date.getDate().toString().padStart(2, '0');\n        const month = (date.getMonth() + 1).toString().padStart(2, '0');\n        const year = date.getFullYear();\n        \n        return format\n            .replace('DD', day)\n            .replace('MM', month)\n            .replace('YYYY', year.toString());\n    }\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateRangePickerConfiguration } from \"../../date-range-picker-configuration.types\";\nimport { DateRangePickerOptionHandlerType } from \"./date-range-picker-option-handler.types\";\nimport { DateRange } from \"./date-range-picker-data-manager.types\";\n\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class DateRangePickerOptionHandler extends EventEmitter implements DateRangePickerOptionHandlerType{\n\n    @AutoWired(DATE_RANGE_PICKER_BEAN_NAME.CONFIGURATION) configuration!: DateRangePickerConfiguration;\n\n\n\n    getHeaderTitle() : string | null{\n        return this.configuration.headerTitle ?? null\n    }\n\n    getFromLabel():string  {\n        return this.configuration.fromLabel ?? 'From'\n\n    }\n\n    getToLabel():string  {\n        return this.configuration.toLabel ?? 'To'\n\n    }\n\n\n\n    getFromValue():Date|null{\n        return this.configuration.fromValue ?? null\n    }\n    \n    getToValue():Date|null{\n        return this.configuration.toValue ?? null\n    }\n\n    getMinDate():Date | null{\n        return this.configuration.minDate ?? null\n    }\n\n    getMaxDate():Date | null{\n        return this.configuration.maxDate ?? null\n    }\n\n    getMinDaysToSelect(): number | null{\n        return this.configuration.minDaysToSelect ?? null\n    }\n\n    getMaxDaysToSelect(): number |null{\n        return this.configuration.maxDaysToSelect ?? null\n    }\n\n    shouldImmediateCommit():boolean{\n        return this.configuration.immediateCommit ?? true\n    }\n\n    onDateRangeChange(params : DateRange):void{\n        if(this.configuration.onDateRangeChange){\n            this.configuration.onDateRangeChange(params)\n        }\n    }\n\n    getFormat():string{\n        return this.configuration.format ?? 'DD/MM/YYYY'\n    }\n\n    getInputElement():HTMLElement | null{\n        return this.configuration.inputElement ?? null\n    }\n\n    onDestroy():void{\n        if(this.configuration.onDestroy){\n            this.configuration.onDestroy()\n        }\n    }\n\n    shouldCloseOnSelect():boolean{\n        return this.configuration.closeOnSelect ?? true;\n    }\n\n    shouldRenderClearButton():boolean{\n        return this.configuration.clearButton ?? false\n    }\n\n    getClearButtonLabel():string {\n        return this.configuration.clearButtonLabel ?? 'Clear'\n    }\n\n    onClear():void{\n        if(this.configuration.onClear){\n            this.configuration.onClear()\n        }\n    }\n\n    shouldHideCancelButton():boolean{\n        return this.configuration.hideCancelButton ?? false\n    }\n\n    getCancelButtonLabel():string {\n        return this.configuration.cancelButtonLabel ?? 'Cancel'\n    }\n\n    onCancel():void{\n        if(this.configuration.onCancel){\n            this.configuration.onCancel()\n        }\n    }\n\n    getOkButtonLabel():string {\n        return this.configuration.submitButtonLabel ?? 'OK'\n    }\n\n\n}","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateRangePickerControllerHandlerType } from \"./date-range-picker-controller.type\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\n\n\n@Bean(DATE_RANGE_PICKER_BEAN_NAME.CONTROLLER)\nexport class DateRangePickerControllerHandler extends EventEmitter implements DateRangePickerControllerHandlerType{\n\tprivate dateTimeCtrl!: any;\n\n\tregisterDateRangePickerFieldController(dateTimeCtrl: any): void {\n\t\tthis.dateTimeCtrl = dateTimeCtrl;\n\t}\n\tgetDateRangePickerFieldController(): any {\n\t\treturn this.dateTimeCtrl;\n\t}\n}","\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { DateRangePickerButtonType } from \"./date-range-picker-button.types\";\n\n// const useUtilityClasses = (ownerState : any) => {\n//     const {disabled, role} = ownerState;\n// \tconst slots = {\n// \t\troot    : {\n//             slot     : role,\n//             modifiers: [\n//                 disabled && 'disabled'\n//             ]\n//         }\n// \t};\n\n// \treturn composeClasses(slots, getDateRangePickerRootUtilityClass);\n// };\n\nexport class DateRangePickerButtonController extends EventEmitter {\n\n\n    @AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER) userComponentHandler !: any;\n    \n    private comp !: DateRangePickerButtonType;\n\n    // private ownerState : {disabled : boolean|null,spinButton :boolean} = {disabled : null,spinButton:false};\n    // private ownerState : any\n    setComp(comp : DateRangePickerButtonType) : void {\n        this.comp = comp;\n        this.applyStaticClasses();\n        this.applyState();\n        this.setRendererDetails();\n        // this.addListener(this.eventHandler, 'EVENT_VALUE_UPDATE', this.applyState.bind(this));\n    }\n\n    private applyStaticClasses() {\n        // const ownerState = this.getOwnerState();\n        // const classes = useUtilityClasses(ownerState);\n        // this.comp.addOrRemoveCssClass(classes.root, true);\n    }\n\n    private applyState() : void {\n\n        // const ownerState = this.getOwnerState();\n\n        // if(this.ownerState.disabled === ownerState.disabled ) {\n        //     return;\n        // }\n\n        // this.ownerState = ownerState;\n        // const element = this.comp.getElement();\n        // element.classList.toggle('dg-number__increment--disabled', ownerState.disabled);\n        // element.classList.toggle('dg-button__root--disabled', ownerState.disabled);\n\n\n    }\n\n    private setRendererDetails() : void {\n        \n        const params          = this.createRendererParams();\n        const rendererWrapper = this.createRendererWrapper();\n        const compDetails     = this.userComponentHandler.getButtonRendererDetails(rendererWrapper, params);\n\n        this.comp.setRendererDetails(compDetails);\n    }\n\n    private createRendererParams() {\n        const params = this.comp.getParams() ?? {};\n        return {\n            parentElement: this.comp.getElement(),\n            callback     : (event:any) => params.callback && params.callback(event),\n            showIcon     : false,\n            label        : params.label,\n            showText     : true,\n            tabindex     : params.tabindex,\n            classes      : params.classes,\n            disabled : params.disabled\n\n            // disabled     : params.isDisabled(),\n            // readonly     : params.isReadonly(),\n            // ariaLabel    : params.getRole(),\n            // classes      : params.getClasses(),\n            // getSvgClasses : ()=>\"dg-number__spinbutton-svg\"\n\n\t\t};\n    }\n\n    private createRendererWrapper() {\n        const {getRenderer, getRendererParams} = this.comp.getParams() ?? {};\n        return {\n\t\t\tgetRenderer          : () => getRenderer ? getRenderer() : undefined,\n\t\t\tgetUserRendererParams: () => getRendererParams ? getRendererParams() : undefined\n\t\t}\n    } \n\n    // private getOwnerState() {\n    //     // const { isDisabled, getRole , getSpinButton} = this.comp.getParams() ?? {};\n    //     return {\n    //         disabled : false,\n    //         // role : getRole(),\n    //         // spinButton : getSpinButton()\n    //     }\n    // }\n}","import { PostConstruct, clearElement, removeFromParent } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateRangePickerButtonController } from \"./date-range-picker-button-controller\";\nimport { DateRangePickerButtonType } from \"./date-range-picker-button.types\";\nimport { IComponentDetails } from \"../../../../utility/component-detail.types\";\nimport { DateRangePickerButtonTemplate } from \"../templates/date-range-picker-button-template\";\n\n\n\n\nexport class DateRangePickerButtonComponent extends Component {\n\tprivate renderer: any;\n\tprivate rendererElement: any;\n    private params : any;\n\n    constructor(params : any) {\n        super();\n        this.params = params;\n    }\n\n\t@PostConstruct()\n\tinit() {\n\t\tthis.setTemplate(DateRangePickerButtonTemplate());\n\t\tconst comp : DateRangePickerButtonType = {\n            addOrRemoveCssClass: (className: string, force: boolean) => this.addOrRemoveCssClass(className, force),\n            setRendererDetails : (rendererDetails: IComponentDetails) => this.setRendererDetails(rendererDetails),\n            getElement         : () => this.getGui(),\n            getParams          : () => this.params\n\t\t};\n\n\t\tconst controller = this.createBean(new DateRangePickerButtonController());\n\t\tcontroller.setComp(comp);\n\t}\n\n\tprivate setRendererDetails(rendererDetails: IComponentDetails): void {\n\t\tif (rendererDetails) {\n\t\t\tthis.destroyRenderer();\n\t\t\tconst callback = this.afterRenderer.bind(this);\n\t\t\tconst componentInstance = rendererDetails.newInstance();\n\t\t\tif (componentInstance) {\n\t\t\t\tcomponentInstance.then(callback);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate destroyRenderer(): void {\n\t\tthis.renderer = this.destroyBean(this.renderer);\n\t\tremoveFromParent(this.rendererElement);\n\t\tthis.rendererElement = null;\n\t}\n\n    private afterRenderer(renderer: any) {\n\t\tthis.renderer = renderer;\n\t\tthis.rendererElement = renderer.getElement?.() ?? null;\n\t\tif (this.rendererElement) {\n\t\t\tconst parentElement = this.getGui() as HTMLElement;\n\t\t\t\n\t\t\t// const parentcomp = this.getParentComponent();\n\t\t\tclearElement(parentElement);\n\t\t\t// parentElement.remove();\n\t\t\tthis.setTemplate(this.rendererElement);\n\t\t\tparentElement.replaceWith(this.rendererElement);\n\t\t\t// parentcomp?.appendChild(this.rendererElement);\n\t\t}\n\t}\n\n\taddOrRemoveCssClass(className: string, _addOrRemove: boolean): void {\n\t\tconst element = this.getGui();\n\t\telement.className = className;\n\t}\n}","\n\n\nexport function DateRangePickerButtonTemplate(_params ?: any){\n    \n    const container = document.createElement('div');\n\n    return container;\n\n\n}\n\n\n\n\n","import { AutoWired } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DATE_RANGE_PIKCER_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateRangeChangeEvent, DateRangePickerDataManagerType } from \"../model/date-range-picker-data-manager.types\";\nimport { DateRangePickerFooterComponentType, DateRangePickerFooterControllerType, FooterComponentPropertyType } from \"./date-range-picker-footer.types\";\n\n\n\n\n\nexport class DateRangePickerFooterController extends AbstractController<DateRangePickerFooterComponentType> implements DateRangePickerFooterControllerType{\n    @AutoWired(DATE_RANGE_PICKER_BEAN_NAME.DATA_MANAGER) dataManger !: DateRangePickerDataManagerType\n\n\n\n    setComponent(component : DateRangePickerFooterComponentType ) :void {\n        this.component = component;\n\n        if(this.optionsHandler.shouldImmediateCommit() === false){\n            this.dataManger.onDateRangeChange(this.propertyUpdateForOkButton.bind(this))\n        }\n\n        if(this.optionsHandler.shouldRenderClearButton()){\n         this.dataManger.onDateRangeChange(this.propertyUpdateForClearButton.bind(this))\n        }\n\n    }\n\n\n    getProperties(): FooterComponentPropertyType{\n        return {\n            immediateCommit        : this.optionsHandler.shouldImmediateCommit(),\n            shouldRenderClearButton: this.optionsHandler.shouldRenderClearButton(),\n            shouldHideCancelButton : this.optionsHandler.shouldHideCancelButton()\n        }\n    }\n\n    getParamsProperty(){\n     const   disabled = !this.dataManger.validateDateRange().areBothDatesSelected\n\n        return{\n            clearButton : {\n                            callback: (event :MouseEvent)=>{this.handleOnClear(event)},\n                            label   : this.optionsHandler.getClearButtonLabel(),\n                            tabindex: '-1',\n                            classes : ['dg-date-range-picker__clear-button'],\n                            disabled\n                        },\n            cancelButton : {\n                            callback: (event :MouseEvent)=>{this.handleOnCancel(event)},\n                            label   : this.optionsHandler.getCancelButtonLabel(),\n                            tabindex: '-1',\n                            classes : 'dg-date-range-picker__cancel-button'\n\n                        },\n            okButton : {\n                            callback: (event :MouseEvent)=>{this.handleOnOk(event)},\n                            label   : this.optionsHandler.getOkButtonLabel(),\n                            tabindex: '-1',\n                            classes : 'dg-date-range-picker__ok-button',\n                            disabled\n                         }\n        }\n    }\n\n    \n\n    private handleOnClear(_event :MouseEvent):void{\n\n        const immediateCommit = this.optionsHandler.shouldImmediateCommit();\n        if(immediateCommit){\n            this.optionsHandler.onClear();\n         \n        }\n        \n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.UPDATE_PROPERTIES_IN_FROM_PICKER,\n            properties : {value : null,minDate :null,maxDate :null}\n        }\n        )\n       \n        this.dataManger.setDateRange({from : null,to : null})\n\n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.FOCUS_INPUT_ELEMENT\n        })\n\n    }\n\n\n    private handleOnCancel(_event :MouseEvent):void{\n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.FOCUS_INPUT_ELEMENT\n        })\n        this.dispatchEvent({type:DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY})\n       \n\n\n    }\n\n    private handleOnOk(_event :MouseEvent):void{\n        const dateRange = this.dataManger.getDateRange()\n        this.optionsHandler.onDateRangeChange(dateRange);\n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.FOCUS_INPUT_ELEMENT\n        })\n        this.dispatchEvent({type:DATE_RANGE_PIKCER_CUSTOM_EVENTS.DESTROY})\n       \n    }\n\n\n    private propertyUpdateForClearButton(params : DateRangeChangeEvent){\n        const clearButton = this.component?.getClearButton() ;\n\n        if(params.range.from || params.range.to){\n            clearButton.renderer.button.api.updateProperties({disabled : false});\n        }else{\n            clearButton.renderer.button.api.updateProperties({disabled : true});\n        }\n    }\n\n    private propertyUpdateForOkButton(params : DateRangeChangeEvent){\n        const okButton = this.component?.getOkButton() ;\n\n        if(params.range.from && params.range.to){\n            okButton.renderer.button.api.updateProperties({disabled : false});\n        }else{\n            okButton.renderer.button.api.updateProperties({disabled : true});\n\n        }\n\n    }\n}\n","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { DateRangePickerFooterComponentType } from \"./date-range-picker-footer.types\";\nimport { DateRangePickerFooterController } from \"./date-range-picker-footer-controller\";\nimport { DateRangePickerFooterTemplate } from \"../templates/date-range-picker-footer-new-template\";\n\n\n\n\n\nexport class DateRangePickerFooterComponent extends Component{\n\n\t@queryAssignedNodes('clearButton') clearButton !: HTMLElement\n\t@queryAssignedNodes('okButton') okButton !: HTMLElement\n\n\n    @PostConstruct()\n\tinit(): void {\n\n\t\tconst component : DateRangePickerFooterComponentType  = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string,force : boolean) => this.addOrRemoveCssClass(className,force),\n\t\t\tgetClearButton :()=>this.getClearButton(),\n\t\t\tgetOkButton :()=>this.getOkButton()\n\t\t};\n\n        const controller = this.createManagedBean(new DateRangePickerFooterController());\n\t\tconst props = controller.getProperties()\n        const template = DateRangePickerFooterTemplate(props)\n\n\t\tconst paramsProps = controller.getParamsProperty()\n\n        this.setTemplate(template,{\n\t\t\tclearButton :paramsProps.clearButton,\n\t\t\tcancelButton : paramsProps.cancelButton,\n\t\t\tokButton : paramsProps.okButton\n\t\t});\n\t\tcontroller.setComponent(component);\n    }\n\n\n\tgetClearButton():any{\n\t\treturn this.clearButton\n\t}\n\n\tgetOkButton():any{\n\t\treturn this.okButton\n\t}\n} \n    \n\t","import { FooterComponentPropertyType } from \"../date-range-picker-footer/date-range-picker-footer.types\";\n\n\n\n\nexport function DateRangePickerFooterTemplate(params : FooterComponentPropertyType){\n    \n    const container = document.createElement('div');\n    container.className = 'dg-date-range-picker__footer';\n\n    const leftContainer = document.createElement('div');\n    leftContainer.classList.add('dg-date-range-picker__footer-left')\n    container.appendChild(leftContainer);\n\n    const rightContainer = document.createElement('div');\n    rightContainer.classList.add('dg-date-range-picker__footer-right')\n    container.appendChild(rightContainer);\n\n    if(params.shouldRenderClearButton){\n        const clearButton = document.createElement('dg-date-range-picker-button');\n        clearButton.setAttribute('ref','clearButton');\n\n        if(!params.immediateCommit){\n            leftContainer.appendChild(clearButton)\n        }else{\n            rightContainer.appendChild(clearButton)\n\n        }\n    }\n\n\n    if(!params.immediateCommit){\n        if(!params.shouldHideCancelButton){\n            const cancelButton = document.createElement('dg-date-range-picker-button');\n            cancelButton.setAttribute('ref','cancelButton');\n            rightContainer.appendChild(cancelButton);\n        }\n       \n        const okButton = document.createElement('dg-date-range-picker-button');\n        okButton.setAttribute('ref','okButton');\n        rightContainer.appendChild(okButton);\n\n    }\n\n\n\n    return container;\n\n\n}","import { Button } from \"../../../../button/src/button\";\nimport { IButtonConfiguration } from \"../../../../button/src/button-configuration.types\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\n\nexport class ButtonRenderer implements ICustomRenderer{\n    private params : any;\n    private button !: Button|null;\n    \n    init(params : any) {\n        this.params = params;\n        const configuration = this.createConfiguration();\n        this.button = new Button(configuration);\n    }\n\n    getElement(): HTMLElement {\n        return this.button?.api?.getElement() as HTMLElement;\n    }\n\n    private createConfiguration() : IButtonConfiguration {\n        return {\n            text    : this.params.label,\n            callback: this.params.callback,\n            icon    : this.params.icon,\n            showIcon: this.params.showIcon,\n            showText: this.params.showText,\n            disabled: this.params.disabled,\n            readonly : this.params.readonly,\n            ariaLabel : this.params.ariaLabel,\n            classes : this.params.classes,\n            getSvgClasses : this.params.getSvgClasses,\n            tabindex : this.params.tabindex\n        }\n    }\n\n    destroy() : void {\n        this.button?.api?.destroy();\n        this.button = null;\n        this.params = null;\n    }\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IUserParams } from \"../../utility/user-params.types\";\nimport { ComponentsRegistry, ComponentMeta } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { DateRangePickerUserComponentHandler } from \"./core/model/date-range-picker-user-component-handler\";\n\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\n\n\nimport { DateRangePickerApi } from \"./core/model/date-range-picker-api\";\nimport { DateRangePickerConfiguration } from \"./date-range-picker-configuration.types\";\n\nimport { DateRangePickerHeaderComponent } from \"./core/date-range-picker-header/date-range-picker-header-view\";\nimport { DateRangePickerFromComponent } from \"./core/date-range-picker-from-picker/date-range-picker-from-picker-view\";\nimport { DateRangePickerToComponent } from \"./core/date-range-picker-to-picker/date-range-picker-to-picker-view\";\nimport { DatePickerRangePickerDataManager } from \"./core/model/date-range-picker-data-manager\";\nimport { DateRangePickerRootView } from \"./core/date-range-picker-root/date-range-picker-root-view\";\nimport { DateRangePickerOptionHandler } from \"./core/model/date-range-picker-option-handler\";\nimport { DateRangePickerControllerHandler } from \"./core/model/date-range-picker-controller\";\nimport { DateRangePickerButtonComponent } from \"./core/date-range-picker-buttons/date-range-picker-button-view.ts\";\nimport { DateRangePickerFooterComponent } from \"./core/date-range-picker-footer/date-range-picker-footer-view\";\nimport { ButtonRenderer } from \"./core/user-component/button-renderer\";\n\n\nlet nextInstanceId = 1;\n\n\nexport class DateRangePickerCoreComponent {\n\tinitialize( configuration: DateRangePickerConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\t\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\n\t\tconst beanClasses = this.CreateBeanClasses();\n\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(\n\t\t\tconfiguration,\n\t\t\tparams,\n\t\t\tinstanceID\n\t\t);\n\n        // Model classes\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n        // Default component registry\n\t\tthis.registerCoreComponent(context);\n        // Default user compoent registry\n\t\tthis.registerDefaultUserComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate CreateBeanClasses(): Set<any> {\n\t\tlet beanList = [\n            DateRangePickerApi,\n            DateRangePickerOptionHandler,\n            DateRangePickerUserComponentHandler,\n\n\t\t\tComponentsRegistry,\n\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n\t\t\tEventHandler,\n            DatePickerRangePickerDataManager,\n            DateRangePickerControllerHandler\n\n            \n\t\t];\n\t\treturn new Set(beanList);\n\t}\n\n\tprivate createuserConfiguration( configuration: any, params: IUserParams, instanceID : string): {\n\t\tconfiguration: any;\n\t\tframeWorkOverrides: IFrameworkOverrides | null;\n\t\tglobalEventListener: Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t\tinstanceID : string;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaultComponent = {\n            buttonRenderer : ButtonRenderer\n\n        };\n\n\t\ttraverseObject(defaultComponent, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\n\tprivate registerCoreComponent(context : Context) {\n        const registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n        const components = createComponentList();\n        registry.setupComponents(components);\n    }\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\tlet components: ComponentMeta[] = [\n\n\n        {\n            componentName : 'dg-date-range-picker-header',\n            componentClass : DateRangePickerHeaderComponent\n        },\n        {\n            componentName : 'dg-date-range-picker-from-list',\n            componentClass : DateRangePickerFromComponent\n        },\n        {\n            componentName : 'dg-date-range-picker-to-list',\n            componentClass : DateRangePickerToComponent\n        },\n        {\n            componentName : 'dg-date-range-picker',\n            componentClass : DateRangePickerRootView\n        },\n        {\n            componentName : 'dg-date-range-picker-button',\n            componentClass : DateRangePickerButtonComponent\n        },\n        {\n            componentName : 'dg-date-range-picker-footer',\n            componentClass : DateRangePickerFooterComponent\n        }\n        \n        \n\n\t\t\n    ];\n\n\treturn components;\n}\n\n","import { DateRangePickerConfiguration } from \"./date-range-picker-configuration.types\";\nimport { IUserParams } from \"../../utility/user-params.types\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { DateRangePickerApiType } from \"./core/model/date-range-picker-api.types\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"./constant/bean-name-constant\";\nimport { DateRangePickerRootView } from \"./core/date-range-picker-root/date-range-picker-root-view\";\nimport { DateRangePickerCoreComponent } from \"./date-range-picker-core-component\";\n\n\n\n\n\n\nexport class DateRangePicker {\n\tpublic api: DateRangePickerApiType | undefined;\n\tconstructor(configuration: DateRangePickerConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(DATE_RANGE_PICKER_BEAN_NAME.API) as DateRangePickerApiType;\n            context.createBean(new DateRangePickerRootView(configuration.appendTo));\n\t\t};\n\t\tnew DateRangePickerCoreComponent().initialize(configuration, params, createUI);\n\t}\n}","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DATE_RANGE_PICKER_BEAN_NAME } from \"../../../../date-range-picker/src/constant/bean-name-constant\";\nimport { DateRangePickerOptionHandlerType } from \"./date-range-field-option-handler.types\";\nimport { DateRangeFieldConfiguration, IRenderer } from \"../../date-range-configuration.types\";\nimport { DateRange } from \"./date-range-field-data-manager.types\";\n\n\n\n\n\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class DateRangeFieldOptionHandler extends EventEmitter implements DateRangePickerOptionHandlerType{\n\n    @AutoWired(DATE_RANGE_PICKER_BEAN_NAME.CONFIGURATION) configuration!: DateRangeFieldConfiguration;\n\n\n\n    getHeaderTitle() : string | null{\n        return this.configuration.headerTitle ?? null\n    }\n\n    isDisabled():boolean{\n        return this.configuration.disabled ?? false\n    }\n\n    isReadonly():boolean{\n        return this.configuration.readonly ?? false\n    }\n\n    getFromLabel():string  {\n        return this.configuration.fromLabel ?? 'From'\n\n    }\n\n    getToLabel():string  {\n        return this.configuration.toLabel ?? 'To'\n\n    }\n\n    getLabel():string{\n        return this.configuration.label ?? ''\n    }\n    \n    getDescription():string{\n        return this.configuration.description ?? ''\n    }\n\n    getPlaceholder():string{\n        return this.configuration.placeholder ?? 'Select Date Range'\n    }\n\n    getFromValue():Date|null{\n        return this.configuration.fromValue ?? null\n    }\n    \n    getToValue():Date|null{\n        return this.configuration.toValue ?? null\n    }\n\n    getMinDate():Date | null{\n        return this.configuration.min ?? null\n    }\n\n    getMaxDate():Date | null{\n        return this.configuration.max ?? null\n    }\n    \n\n    getMinDaysToSelect(): number | null{\n        return this.configuration.minDaysToSelect ?? null\n    }\n    \n\n    getMaxDaysToSelect(): number |null{\n        return this.configuration.maxDaysToSelect ?? null\n    }\n\n    shouldImmediateCommit():boolean{\n        return this.configuration.immediateCommit ?? false\n    }\n\n    getDateRangePickerAppendTo():HTMLElement{\n        return this.configuration.dateRangePickerAppendTo ?? document.body\n    }\n\n    getHorizontalSpacing(): number{\n        return this.configuration.horizontalSpacing ?? 0\n    }\n\n    getVerticalSpacing():number{\n        return this.configuration.verticalSpacing ?? 0\n    }\n\n    getFormat():string{\n        return this.configuration.format ?? 'DD/MM/YYYY'\n    }\n\n    shouldIgnoreEmptyDOM():boolean{\n        return this.configuration.ignoreEmptyDOM ?? false;\n    }\n\n    isRequired():boolean{\n        return this.configuration.required ?? false\n    }\n\n    getAriaLabelledby(): string {\n\t\treturn this.configuration.ariaLabelledby ?? 'date-range-field';\n\t}\n\n    getAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? 'date-range-field-helper';\n\t}\n\n    getDescriptionRenderer(): { new(): IRenderer } | undefined {\n        return this.configuration.descriptionRenderer;\n    }\n\n    getDescriptionRendererParams(): object | undefined {\n        return this.configuration.descriptionRendererParams;\n    }\n\n    getValidationMessageRenderer(): (new() => IRenderer) | undefined {\n        return this.configuration.validationMessageRenderer;\n    }\n\n    getValidationMessageRendererParams(): object | undefined {\n        return this.configuration.validationMessageRendererParams;\n    }\n\n    shouldCloseOnSelect():boolean{\n        return this.configuration.closeOnSelect ?? true;\n    }\n\n    shouldRenderClearButton():boolean{\n        return this.configuration.clearButton ?? false\n    }\n\n    getClearButtonLabel():string {\n        return this.configuration.clearButtonLabel ?? 'Clear'\n    }\n\n    onClear():void{\n        if(this.configuration.onClear){\n            this.configuration.onClear()\n        }\n    }\n    shouldHideCancelButton():boolean{\n        return this.configuration.hideCancelButton ?? false;\n    }\n\n    getCancelButtonLabel():string {\n        return this.configuration.cancelButtonLabel ?? 'Cancel'\n    }\n\n    onCancel():void{\n        if(this.configuration.onCancel){\n            this.configuration.onCancel()\n        }\n    }\n\n\n    getOkButtonLabel():string {\n        return this.configuration.submitButtonLabel ?? 'OK'\n    }\n\n\n    onDateRangeChange(params : DateRange):void{\n        if(this.configuration.onChange){\n            this.configuration.onChange(params)\n        }\n    }\n\n    onBlur(event : FocusEvent):void{\n        if(this.configuration.onBlur){\n            this.configuration.onBlur(event)\n        }\n    }\n\n    onFocus(event : FocusEvent):void{\n        if(this.configuration.onFocus){\n            this.configuration.onFocus(event)\n        }\n    }\n\n    onClick(event :MouseEvent):void{\n        if(this.configuration.onClick){\n            this.configuration.onClick(event)\n        }\n\n    }\n\n    onDestroy():void{\n        if(this.configuration.onDestroy){\n            this.configuration.onDestroy()\n        }\n\n    }\n\n    onPickerShow():void{\n        if(this.configuration.onPickerShow){\n            this.configuration.onPickerShow()\n        }\n    }\n\n    onPickerHide():void{\n        if(this.configuration.onPickerHide){\n            this.configuration.onPickerHide()\n        }\n    }\n\n    getLabelRenderer() {\n        return this.configuration.labelRenderer;\n    }\n\n    getLabelRendererParams() {\n        return this.configuration.labelRendererParams ?? {};\n    }\n}","\n\n\nexport const DATE_RANGE_FIELD_CUSTOM_EVENTS = {\n    CREATE_RANGE_PICKER : 'CREATE_RANGE_PICKER',\n    DESTROY_RANGE_PICKER: 'DESTROY_RANGE_PICKER',\n    CLEAR_VALUE         : 'CLEAR_VALUE',\n    PROPERTY_CHANGED    : 'PROPERTY_CHANGED',\n    BLUR_INPUT_ELEMENT  : 'BLUR_INPUT_ELEMENT',\n    \n\n}","import { AutoWired } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DateRangeChangeEvent, DateRangeFieldModelType } from \"../model/date-range-field-data-manager.types\";\nimport { DateRangeFieldComponentType, DateTimeInputControllerType, InputComponentPropertyType } from \"./date-range-field-input.type\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../constant/bean-name-constant\";\n// import { formatDateToString } from \"../utils/date-utils\";\nimport { DATE_RANGE_FIELD_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\n\n\n\n\nexport class DateRangeFieldInputController extends AbstractController<DateRangeFieldComponentType> implements DateTimeInputControllerType {\n     @AutoWired(DATE_RANGE_FIELD_BEAN_NAME.DATA_MANAGER) dataManager !: DateRangeFieldModelType;\n\n    setComponent(component: DateRangeFieldComponentType): void {\n        this.component =component\n        this.registerEvents()\n        this.setTabindex()\n        const validDateRange = this.dataManager.validateDateRange()\n\n\n        if(validDateRange.isFromSelected || validDateRange.isToSelected){\n            this.setValue( {\n                type: 'to',\n                value:  null,\n                range: this.dataManager.getDateRange(),\n                previousRange: {from :null,to : null},\n            })\n        }\n \n        \n    }\n\n    getProperty(): InputComponentPropertyType{\n        return{\n            placeholder : this.optionsHandler.getPlaceholder()\n        }\n    }\n\n    registerEvents(){\n        this.dataManager.onDateRangeChange(this.setValue.bind(this));\n        this.addListener(this.eventHandler,DATE_RANGE_FIELD_CUSTOM_EVENTS.CLEAR_VALUE,this.clearValue.bind(this))\n        this.addListener(this.eventHandler,DATE_RANGE_FIELD_CUSTOM_EVENTS.PROPERTY_CHANGED,this.setPlaceholder.bind(this))\n        this.addListener(this.eventHandler,DATE_RANGE_FIELD_CUSTOM_EVENTS.PROPERTY_CHANGED,this.setTabindex.bind(this))\n    }\n\n    private setTabindex():void{\n        if(!this.optionsHandler.isDisabled()){\n            const element = this.component?.getElement();\n            element?.setAttribute('tabindex','0')\n        }\n    }\n\n    private setValue(_param :DateRangeChangeEvent):void {\n        const inputElement = this.component?.getInputElement() as HTMLElement;\n        // const format = this.optionsHandler.getFormat();\n        // const fromValue = formatDateToString(param.range.from,format);\n        // const toValue = formatDateToString(param.range.to,format);\n        const value = this.dataManager.getFormattedCoupledValue();\n        if (inputElement) {\n            inputElement.innerText = value\n        }\n\n    }\n\n    private clearValue ():void{\n        const inputElement = this.component?.getInputElement() as HTMLElement;\n        const placeholder = this.optionsHandler.getPlaceholder()\n        if(inputElement && placeholder){\n            inputElement.innerText = placeholder\n        }else if(inputElement){\n            inputElement.innerText = ''\n        }     \n    }\n\n    private setPlaceholder():void{\n        const inputElement = this.component?.getInputElement() as HTMLElement;\n\n        const validDateRange = this.dataManager.validateDateRange()\n        if(validDateRange.isFromSelected && validDateRange.isToSelected ){\n            const placeholder = this.optionsHandler.getPlaceholder();\n            inputElement.innerText = placeholder\n        }\n\n    }\n\n}\n","import { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport { Component } from '@dg/corecomponent/Component.js';\nimport { DateRangeFieldComponentType } from './date-range-field-input.type';\nimport { DateRangeFieldInputController } from './date-range-field-input-controller';\nimport { DateRangeFieldInputTemplate } from '../template/date-range-field-input-template';\n\n\n\n\n\n\n\nexport class DateRangeFieldInputView extends Component {\n\n\t@queryAssignedNodes('date-range-field-input') inputElement \t\t\t !: any;\n\n    @PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: DateRangeFieldComponentType = {\n\t\t\tgetElement             : () => this.getGui(),\n\t\t\taddOrRemoveCssClass: (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tdestroy: () => this.destroy(),\n\t\t\tgetInputElement :()=> this.getInputElement()\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new DateRangeFieldInputController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = DateRangeFieldInputTemplate(props);\n\n\t\t\n\t\tthis.setTemplate(template);\n\n\t\tcontroller.setComponent(component);\n\n\t}\n\n\tgetInputElement():HTMLElement{\n\t\treturn this.inputElement\n\t}\n\n  \n\n\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\n}\n\n\n","import { InputComponentPropertyType } from \"../date-range-field-input/date-range-field-input.type\";\n\n\n\n\n\n\n\n\n\n\nexport function DateRangeFieldInputTemplate(params : InputComponentPropertyType){\n\n    const container = document.createElement('div');\n    container.classList.add('dg-date-range-field__input-container');\n    container.classList.add('dg-field__input-wrapper')\n\n    const inputDiv = document.createElement('div');\n    inputDiv.classList.add('dg-date-range-field__input');\n    inputDiv.classList.add('dg-field__input')\n    inputDiv.setAttribute('ref','date-range-field-input')\n    inputDiv.innerText = params.placeholder\n\n    container.append(inputDiv)\n\n    const iconContainer = document.createElement('div');\n    iconContainer.classList.add('dg-arrow__icon')\n    iconContainer.innerHTML = `<svg class=\"dg-selectbox__arrow arrowicon__svg\" viewBox=\"0 0 48 48\"><path class=\"cls-1\" d=\"M12,19.478L15.571,16l9.286,9.739L34.143,16,37,19.478,24.857,32Z\"></path></svg>`\n\n    container.append(iconContainer)\n\n\n    return container;\n\n\n}\n\n\n\n\n","import { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateRangeFieldControllerHandlerType } from \"./date-range-field-controller.type\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../constant/bean-name-constant\";\n\n\n\n@Bean(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER)\nexport class DateRangeFieldControllerHandler extends EventEmitter implements DateRangeFieldControllerHandlerType{\n\tprivate dateTimeCtrl!: any;\n\n\tregisterDateRangeFieldController(dateTimeCtrl: any): void {\n\t\tthis.dateTimeCtrl = dateTimeCtrl;\n\t}\n\tgetDateRangeFieldController(): any {\n\t\treturn this.dateTimeCtrl;\n\t}\n}","import { BEAN_NAME, Bean } from \"@dg/corecomponent\";\nimport { CorePopupHandler } from \"../../../../utility/PopupHandler/CorePopupHandler\";\n\n@Bean(BEAN_NAME.POPUP_HANDLER)\nexport class PopupHandler extends CorePopupHandler {\n   \n}","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateRangePickerInteractorType } from \"./date-range-picker-interactor.type\";\nimport { AutoWired, Bean, BEAN_NAME, PostConstruct } from \"@dg/corecomponent\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DATE_RANGE_FIELD_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { DateRangePickerConfiguration } from \"../../../../date-range-picker/src/date-range-picker-configuration.types\";\nimport { DateRangePicker } from \"../../../../date-range-picker/src/date-range-picker\";\nimport { DateRangeFieldControllerHandlerType } from \"./date-range-field-controller.type\";\nimport { PopupComponentPositionParams, Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { PopupHandler } from \"./popup-handler\";\nimport { DateRange, DateRangeFieldModelType } from \"./date-range-field-data-manager.types\";\n\n\n\n\n\n\n@Bean(DATE_RANGE_FIELD_BEAN_NAME.INTERACTOR)\nexport class DateRangePickerInteractor extends EventEmitter implements DateRangePickerInteractorType{\n\n    @AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER) controllerHandler !: DateRangeFieldControllerHandlerType;\n    @AutoWired(DATE_RANGE_FIELD_BEAN_NAME.DATA_MANAGER) dataManager !: DateRangeFieldModelType;\n    @AutoWired(BEAN_NAME.POPUP_HANDLER) protected popupHandler !: PopupHandler;\n\n\n    private dateRangePicker : any;\n    private hasPickerMounted : boolean = false\n    private popupDestroy :any;\n\n\n\n    @PostConstruct()\n    init(){\n        this.addListener(this.eventHandler, DATE_RANGE_FIELD_CUSTOM_EVENTS.CREATE_RANGE_PICKER, this.createRangePicker.bind(this));\n        this.addListener(this.eventHandler, DATE_RANGE_FIELD_CUSTOM_EVENTS.DESTROY_RANGE_PICKER, (params : any) => this.destroyRangePicker(params.event));\n    }\n\n    private createRangePicker():void{\n        const sourceElement = this.controllerHandler.getDateRangeFieldController().getInputElement() as HTMLElement;\n\n        if (this.dateRangePicker) {\n            // this.destroyCalendar();\n            // return\n        } \n        else {\n            \n            const calendarParams : DateRangePickerConfiguration = { \n                appendTo       : this.optionsHandler.getDateRangePickerAppendTo(),\n                fromValue      : this.dataManager.getFromDate() as Date,\n                toValue        : this.dataManager.getToDate() as Date,\n                fromLabel      : this.optionsHandler.getFromLabel(),\n                toLabel        : this.optionsHandler.getToLabel(),\n                inputElement   : sourceElement,\n                headerTitle    : this.optionsHandler.getHeaderTitle(),\n                closeOnSelect  : this.optionsHandler.shouldCloseOnSelect(),\n                immediateCommit: this.optionsHandler.shouldImmediateCommit(),\n                minDate        : this.dataManager.getMinDate(),\n                maxDate        : this.dataManager.getMaxDate(),\n                minDaysToSelect: this.optionsHandler.getMinDaysToSelect(),\n                maxDaysToSelect: this.optionsHandler.getMaxDaysToSelect(),\n\n                clearButton      : this.optionsHandler.shouldRenderClearButton(),\n                clearButtonLabel : this.optionsHandler.getClearButtonLabel(),\n                hideCancelButton : this.optionsHandler.shouldHideCancelButton(),\n                cancelButtonLabel: this.optionsHandler.getCancelButtonLabel(),\n                submitButtonLabel: this.optionsHandler.getOkButtonLabel(),\n\n                \n                onClear : ()=> {\n                    this.optionsHandler.onClear();\n\n                    this.dataManager.setDateRange({\n                        from : null,\n                        to : null\n                    })\n                    this.dispatchEvent({type : DATE_RANGE_FIELD_CUSTOM_EVENTS.CLEAR_VALUE})\n                },\n\n                onCancel : ()=> {\n                    this.optionsHandler.onCancel()\n                },\n\n\n                onDateRangeChange   : (params:DateRange)=>{\n                                        if(params.from && params.to){\n                                            this.dataManager.setDateRange({\n                                                from: params.from,\n                                                to  : params.to\n                                            })\n                                        }\n                                    },\n                            \n                onDestroy :()=>{\n                                    this.popupDestroy();\n                                    this.dateRangePicker = null;\n                                     this.hasPickerMounted = false\n                                    this.dispatchEvent({type:DATE_RANGE_FIELD_CUSTOM_EVENTS.BLUR_INPUT_ELEMENT})\n                                },\n\n               \n            }\n\n\n            this.dateRangePicker = new DateRangePicker(calendarParams);\n            const calendarElement = this.dateRangePicker.api.getElement();\n\n            \n            const positionParams: PopupComponentPositionParams = {\n                popUpElement    : calendarElement,\n                // sourceElement : this.optionsHandler.getAppendTo(),\n                sourceElement,\n                position        : Position.bottomLeft,\n                keepWithinBounds : true,\n                gapX : this.optionsHandler.getHorizontalSpacing(),\n                gapY : this.optionsHandler.getVerticalSpacing(),\n            };\n    \n            const positionCallback = this.popupHandler.positionPopupByComponent.bind(this.popupHandler, positionParams,this.optionsHandler.getDateRangePickerAppendTo());\n    \n            const addPopup = this.popupHandler.addPopup({\n                                childElement   : calendarElement,\n                                anchorToElement:sourceElement,\n                                // anchorToElement: this.component?.getElement() as HTMLElement,\n                                popupParentElement: this.optionsHandler.getDateRangePickerAppendTo(),\n                                positionCallback,\n                                ariaLabel : ''\n                            });\n            this.popupDestroy = addPopup.hideFunction;\n            this.hasPickerMounted = true;\n            this.optionsHandler.onPickerShow();\n\n        }\n        // this.stateManager.setState(true);\n\n    }\n\n    isPickerLaunched():boolean{\n        return this.hasPickerMounted\n    }\n\n    setPickerLaunched(force :boolean):void{\n        this.hasPickerMounted =force\n    }\n\n    private destroyRangePicker(_event : any) : void{\n        if(this.dateRangePicker){\n            this.dateRangePicker.api.destroy();\n            this.popupDestroy();\n            this.dateRangePicker = null;\n            this.hasPickerMounted = false;\n            this.optionsHandler.onPickerHide();\n\n\n            // this.stateManager.setState(false);\n            // if(event) { // need to check with implementation\n            //     // event.preventDefault();\n            //     // event.stopPropagation();\n            // }\n\n        }\n\n    }\n\n}","import dayjs, { Dayjs } from \"dayjs\";\n\nexport type DateInput = Date | string | number | Dayjs | null | undefined;\n\n/**\n * Formats a given date-like input using dayjs.\n * - Returns empty string for null/undefined/invalid dates.\n * - Defaults to \"YYYY-MM-DD\" when no format is provided.\n */\nexport function formatDateToString(inputDate: DateInput, outputFormat: string = \"YYYY-MM-DD\"): string {\n\tif (inputDate === null || inputDate === undefined) {\n\t\treturn \"\";\n\t}\n\n\tconst parsed = dayjs(inputDate as unknown as string | number | Date | Dayjs);\n\tif (!parsed.isValid()) {\n\t\treturn \"\";\n\t}\n\n\treturn parsed.format(outputFormat);\n}\n\n\n/**\n * Converts a Dayjs instance to a native Date object.\n * - Returns null for null/undefined inputs or invalid Dayjs instances.\n */\nexport function dayjsToDate(value: Dayjs | null | undefined): Date | null {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (!dayjs.isDayjs(value) || !value.isValid()) {\n\t\treturn null;\n\t}\n\n\treturn value.toDate();\n}\n\n\n","import { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { DateRange, DateRangeChangeEvent, DateRangeConstraints, DateRangeFieldModelType, DateRangeValidation } from \"./date-range-field-data-manager.types\";\nimport { AutoWired, Bean, BEAN_NAME, PostConstruct } from \"@dg/corecomponent\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateRangePickerOptionHandlerType } from \"./date-range-field-option-handler.types\";\nimport { formatDateToString } from \"../utils/date-utils\";\n\n\n\n\n\n@Bean(DATE_RANGE_FIELD_BEAN_NAME.DATA_MANAGER)\nexport class DateRangeFieldModel extends EventEmitter implements DateRangeFieldModelType{\n\n    @AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: DateRangePickerOptionHandlerType;\n    private    fromDate                                          : Date | null = null;\n    private    toDate                                            : Date | null = null;\n    private    constraints                                       : DateRangeConstraints = {};\n    private    initialized                                       : boolean = false;\n    private    changeCallbacks                                   : ((event: DateRangeChangeEvent) => void)[] = [];\n    private    minDate                                           : Date | null = null\n    private    maxDate                                           : Date | null = null\n\n    @PostConstruct()\n    init(): void {\n        // Initialize constraints from option handler\n        this.minDate = this.optionHandler.getMinDate?.() ?? null;\n         this.maxDate = this.optionHandler.getMaxDate?.() ?? null;\n        const minDaysToSelect = this.optionHandler.getMinDaysToSelect?.() ?? null;\n        const maxDaysToSelect = this.optionHandler.getMaxDaysToSelect?.() ?? null;\n\n        // Validate min/max date relationship; if invalid, nullify both\n        if (this.minDate && this.maxDate && this.minDate > this.maxDate) {\n            this.minDate = null;\n            this.maxDate = null;\n        }\n\n        const initialConstraints: DateRangeConstraints = {};\n        if (this.minDate) initialConstraints.minDate = this.minDate;\n        if (this.maxDate) initialConstraints.maxDate = this.maxDate;\n        if (minDaysToSelect !== null) initialConstraints.minRange = minDaysToSelect as number;\n        if (maxDaysToSelect !== null) initialConstraints.maxRange = maxDaysToSelect as number;\n        this.setConstraints(initialConstraints);\n\n        // Initialize dates from option handler (may be Date or string)\n        let from = this.normalizeDateInput((this.optionHandler.getFromValue?.() as unknown) as Date | string | null);\n        let to = this.normalizeDateInput((this.optionHandler.getToValue?.() as unknown) as Date | string | null);\n\n        // Clamp/validate initial dates against constraints\n        if (from) {\n            if ((this.minDate && from < this.minDate) || (this.maxDate && from > this.maxDate)) {\n                from = null;\n            }\n        }\n\n        if (to) {\n            if ((this.minDate && to < this.minDate) || (this.maxDate && to > this.maxDate)) {\n                to = null;\n            }\n        }\n\n        // Ensure chronological order; if invalid, nullify the 'to' date\n        if (from && to && from > to) {\n            to = null;\n        }\n\n        if (from) this.fromDate = from;\n        if (to) this.toDate = to;\n        \n        // Emit change event if initial values are set to update the input\n        if (from || to) {\n            this.emitDateRangeChange({\n                type: 'range',\n                value: null,\n                range: this.getDateRange(),\n                previousRange: { from: null, to: null }\n            });\n        }\n\n        this.initialized = true;\n        this.onDateRangeChange((param : DateRangeChangeEvent)=>this.optionHandler.onDateRangeChange(param.range));\n\n\n    }\n\n    // Core data management\n    getFromDate(): Date | null {\n        return this.fromDate;\n    }\n\n    getToDate(): Date | null {\n        return this.toDate;\n    }\n\n    getMinDate():Date |null{\n        return this.minDate\n    }\n\n    getMaxDate():Date | null{\n        return this.maxDate\n    }\n\n    getDateRange(): DateRange {\n        return {\n            from: this.fromDate,\n            to: this.toDate\n        };\n    }\n\n    setFromDateUsingAPI(date: Date | string | null): void {\n        const normalized = this.normalizeDateInput(date as Date | string | null);\n        const previousRange = this.getDateRange();\n        this.fromDate = normalized;\n        \n        // Auto-adjust to date if it's before from date\n        if (normalized && this.toDate && this.toDate < normalized) {\n            this.toDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'from',\n            value: normalized,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    setToDateUsingAPI(date: Date | string | null): void {\n        const normalized = this.normalizeDateInput(date as Date | string | null);\n        const previousRange = this.getDateRange();\n        this.toDate = normalized;\n        \n        // Auto-adjust from date if it's after to date\n        if (normalized && this.fromDate && this.fromDate > normalized) {\n            this.fromDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'to',\n            value: normalized,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n    setFromDate(date: Date | string | null): void {\n        const normalized = this.normalizeDateInput(date as Date | string | null);\n        const previousRange = this.getDateRange();\n        this.fromDate = normalized;\n        \n        // Auto-adjust to date if it's before from date\n        if (normalized && this.toDate && this.toDate < normalized) {\n            this.toDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'from',\n            value: normalized,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    setToDate(date: Date | string | null): void {\n        const normalized = this.normalizeDateInput(date as Date | string | null);\n        const previousRange = this.getDateRange();\n        this.toDate = normalized;\n        \n        // Auto-adjust from date if it's after to date\n        if (normalized && this.fromDate && this.fromDate > normalized) {\n            this.fromDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'to',\n            value: normalized,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    setDateRange(range: DateRange): void {\n        const previousRange = this.getDateRange();\n        this.fromDate = this.normalizeDateInput((range.from as unknown) as Date | string | null);\n        this.toDate = this.normalizeDateInput((range.to as unknown) as Date | string | null);\n        \n        this.emitDateRangeChange({\n            type: 'range',\n            value: null,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    clearDateRange(): void {\n        const previousRange = this.getDateRange();\n        this.fromDate = null;\n        this.toDate = null;\n        \n        this.emitDateRangeChange({\n            type: 'clear',\n            value: null,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    // Validation\n    validateDateRange(): DateRangeValidation {\n        const errors: string[] = [];\n        const warnings: string[] = [];\n        let isValid = true;\n\n        // Selection flags\n        const isFromSelected = this.fromDate !== null;\n        const isToSelected = this.toDate !== null;\n        const areBothDatesSelected = isFromSelected && isToSelected;\n\n        // Check if both dates are provided\n        if (!areBothDatesSelected) {\n            if (!this.fromDate && !this.toDate) {\n                // Both empty is valid (no selection)\n                return { isValid: true, errors: [], warnings: [], areBothDatesSelected, isFromSelected, isToSelected };\n            } else {\n                // Only one date selected - this might be valid depending on use case\n                warnings.push('Only one date selected in range');\n            }\n        }\n\n        // Check date order\n        if (areBothDatesSelected && this.fromDate! > this.toDate!) {\n            errors.push('From date cannot be after to date');\n            isValid = false;\n        }\n\n        // Check constraints\n        if (this.fromDate && this.constraints.minDate && this.fromDate < this.constraints.minDate) {\n            errors.push('From date is before minimum allowed date');\n            isValid = false;\n        }\n\n        if (this.toDate && this.constraints.maxDate && this.toDate > this.constraints.maxDate) {\n            errors.push('To date is after maximum allowed date');\n            isValid = false;\n        }\n\n        // Check range constraints\n        if (areBothDatesSelected) {\n            const daysDiff = this.getDaysDifference();\n            if (daysDiff !== null) {\n                if (this.constraints.minRange && daysDiff < this.constraints.minRange) {\n                    errors.push(`Date range must be at least ${this.constraints.minRange} days`);\n                    isValid = false;\n                }\n                if (this.constraints.maxRange && daysDiff > this.constraints.maxRange) {\n                    errors.push(`Date range cannot exceed ${this.constraints.maxRange} days`);\n                    isValid = false;\n                }\n            }\n        }\n\n        return { isValid, errors, warnings, areBothDatesSelected, isFromSelected, isToSelected };\n    }\n\n    validateDate(date: Date, type: 'from' | 'to'): boolean {\n        // Check if date is disabled\n        if (this.isDateDisabled(date)) {\n            return false;\n        }\n\n        // Check min/max constraints\n        if (this.constraints.minDate && date < this.constraints.minDate) {\n            return false;\n        }\n        if (this.constraints.maxDate && date > this.constraints.maxDate) {\n            return false;\n        }\n\n        // Check range constraints\n        if (type === 'from' && this.toDate) {\n            const daysDiff = Math.ceil((this.toDate.getTime() - date.getTime()) / (1000 * 60 * 60 * 24));\n            if (this.constraints.minRange && daysDiff < this.constraints.minRange) {\n                return false;\n            }\n            if (this.constraints.maxRange && daysDiff > this.constraints.maxRange) {\n                return false;\n            }\n        }\n\n        if (type === 'to' && this.fromDate) {\n            const daysDiff = Math.ceil((date.getTime() - this.fromDate.getTime()) / (1000 * 60 * 60 * 24));\n            if (this.constraints.minRange && daysDiff < this.constraints.minRange) {\n                return false;\n            }\n            if (this.constraints.maxRange && daysDiff > this.constraints.maxRange) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    isDateInRange(date: Date): boolean {\n        if (!this.fromDate || !this.toDate) {\n            return false;\n        }\n        return date >= this.fromDate && date <= this.toDate;\n    }\n\n    // Constraints\n    setConstraints(constraints: DateRangeConstraints): void {\n        this.constraints = { ...constraints };\n    }\n\n    getConstraints(): DateRangeConstraints {\n        return { ...this.constraints };\n    }\n\n    isDateDisabled(date: Date): boolean {\n        // Check disabled dates\n        if (this.constraints.disabledDates) {\n            for (const disabledDate of this.constraints.disabledDates) {\n                if (this.isSameDay(date, disabledDate)) {\n                    return true;\n                }\n            }\n        }\n\n        // Check disabled days of week\n        if (this.constraints.disabledDays) {\n            const dayOfWeek = date.getDay();\n            if (this.constraints.disabledDays.includes(dayOfWeek)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    // Event handling\n    onDateRangeChange(callback: (event: DateRangeChangeEvent) => void): void {\n        this.changeCallbacks.push(callback);\n    }\n\n    offDateRangeChange(callback: (event: DateRangeChangeEvent) => void): void {\n        const index = this.changeCallbacks.indexOf(callback);\n        if (index > -1) {\n            this.changeCallbacks.splice(index, 1);\n        }\n    }\n\n    emitDateRangeChange(event: DateRangeChangeEvent): void {\n        this.changeCallbacks.forEach(callback => callback(event));\n    }\n\n    // Utility methods\n    getDaysDifference(): number | null {\n        if (!this.fromDate || !this.toDate) {\n            return null;\n        }\n        return Math.ceil((this.toDate.getTime() - this.fromDate.getTime()) / (1000 * 60 * 60 * 24));\n    }\n\n    isRangeComplete(): boolean {\n        return this.fromDate !== null && this.toDate !== null;\n    }\n\n    formatDateRange(format: string = 'DD/MM/YYYY'): string {\n        if (!this.fromDate || !this.toDate) {\n            return '';\n        }\n        \n        const fromStr = this.formatDate(this.fromDate, format);\n        const toStr = this.formatDate(this.toDate, format);\n        return `${fromStr} - ${toStr}`;\n    }\n\n    getDateRangeAsString(): string {\n        return this.formatDateRange();\n    }\n\n    getFormattedCoupledValue(format?: string): string {\n        const effectiveFormat = format || this.optionHandler.getFormat?.() || 'YYYY-MM-DD';\n        const from = formatDateToString(this.fromDate, effectiveFormat);\n        const to = formatDateToString(this.toDate, effectiveFormat);\n\n        const value = `${from} - ${to}`;\n        return value.trim() === '-'\n            ? ''\n            : value;\n    }\n    getFormattedValue(format?: string) : {from : string, to :  string}{\n        const effectiveFormat = format || this.optionHandler.getFormat?.() || 'YYYY-MM-DD';\n        const from = formatDateToString(this.fromDate, effectiveFormat);\n        const to = formatDateToString(this.toDate, effectiveFormat);\n\n        return {\n            from,\n            to\n        }\n    }\n\n    // State management\n    isInitialized(): boolean {\n        return this.initialized;\n    }\n\n    reset(): void {\n        this.fromDate = null;\n        this.toDate = null;\n        this.constraints = {};\n        this.changeCallbacks = [];\n    }\n\n    // Helper methods\n    private normalizeDateInput(value: Date | string | null): Date | null {\n        if (value === null) return null;\n        if (value instanceof Date) {\n            return isNaN(value.getTime()) ? null : value;\n        }\n        if (typeof value === 'string') {\n            const parsed = new Date(value);\n            return isNaN(parsed.getTime()) ? null : parsed;\n        }\n        return null;\n    }\n\n    private isSameDay(date1: Date, date2: Date): boolean {\n        return date1.getFullYear() === date2.getFullYear() &&\n               date1.getMonth() === date2.getMonth() &&\n               date1.getDate() === date2.getDate();\n    }\n\n    private formatDate(date: Date, format: string): string {\n        const day = date.getDate().toString().padStart(2, '0');\n        const month = (date.getMonth() + 1).toString().padStart(2, '0');\n        const year = date.getFullYear();\n        \n        return format\n            .replace('DD', day)\n            .replace('MM', month)\n            .replace('YYYY', year.toString());\n    }\n}","\nimport { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName, } from '@dg/corecomponent';\nimport {ComponentMetadata} from '@dg/corecomponent/ComponentMetadataProvider.js';\nimport {UserComponentHandler} from '@dg/corecomponent/UserComponentHandler.js';\nimport {UserComponentRegistry} from '@dg/corecomponent/UserComponentRegistry.js';\nimport { IComponentDetails } from '../../../../utility/component-detail.types';\nimport { DateFieldUserComponentHandlerTypes } from './date-range-field-user-component-handler.types';\nimport { ILabelUserComponentHandler } from '../../../../label/label.types';\n\nexport const enum PropertyName {\n\tPREFIX_RENDERER      = 'prefixRenderer',\n\tSUFFIX_RENDERER      = 'suffixRenderer',\n\tDESCRIPTION_RENDERER = 'descriptionRenderer',\n\tBUTTON_RENDERER      = 'buttonRenderer',\n\tERROR_RENDERER       = 'errorRenderer',\n\tLABEL_RENDERER       = 'labelRenderer'\n}\n\nexport interface IComponentMeta {\n\tcomponentName: string | null;\n\tframeworkComponent: any | null;\n\tjsComponent: any | null;\n}\n\n\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class DateRangeFieldUserComponentHandler extends UserComponentHandler implements DateFieldUserComponentHandlerTypes, ILabelUserComponentHandler{\n\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName !: getBeanInstanceByBeanName;\n\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, PropertyName.LABEL_RENDERER, params, PropertyName.LABEL_RENDERER);\n\t}\n\n\tgetPrefixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.PREFIX_RENDERER, params, PropertyName.PREFIX_RENDERER);\n\t}\n\n    getSuffixRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.SUFFIX_RENDERER, params, PropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.DESCRIPTION_RENDERER, params, PropertyName.DESCRIPTION_RENDERER);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.ERROR_RENDERER, params, PropertyName.ERROR_RENDERER);\n\t}\n\n\tgetButtonRendererDetails(item: any, params?: any) : IComponentDetails | undefined {\n\t\treturn this.getComponentDetails( item, PropertyName.BUTTON_RENDERER, params, PropertyName.BUTTON_RENDERER);\n\t}\n\t\n\tprotected getComponentDetails( item: any, propertyName: PropertyName, params?: any, defautName?: string, ): | { componentFramework: boolean; componentClass: any; params: any; propertyName: PropertyName; newInstance: () => any; } | undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n        const looUpRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName( BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst item = userComponentRegistry.retrieve(name);\n\t\t\tif (item) { \n                jsComponent = !item.componentFrameWork ? item.component : undefined;\n\t\t\t\tframeworkComponent = item.componentFrameWork ? item.component : undefined; \n            }\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlooUpRegistry(componentName);\n\t\t}\n\n\t\tif ( jsComponent == null && frameworkComponent == null && defautName != null ) {\n\t\t\tlooUpRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n        const mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams : mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance( componentClass, componentFramework, propertyName, mergedParams ),\n\t\t};\n\t}\n\n\tprotected getComponentMeta( item: any, propertyName: PropertyName, _params?: any, ): IComponentMeta {\n\t\tlet componentName: string | null = null;\n\t\tlet jsComponent: any = null;\n\t\tlet frameworkComponent: any = null;\n\n\t\tconst assignComponentNameOrComponentClass = (component: any) => {\n\t\t\tif (typeof component === 'string') {\n\t\t\t\tcomponentName = component;\n\t\t\t} else if (component != null && component !== true) {\n\t\t\t\tconst isFrameworkComponent = this.getFrameWorkOverrides().isFrameworkComponent( component, );\n\t\t\t\tif (isFrameworkComponent) {\n\t\t\t\t\tframeworkComponent = component;\n\t\t\t\t} else {\n\t\t\t\t\tjsComponent = component;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tassignComponentNameOrComponentClass( this.getComponent(item, propertyName), );\n\n\t\treturn {\n\t\t\tcomponentName,\n\t\t\tframeworkComponent,\n\t\t\tjsComponent,\n\t\t};\n\t}\n\n\tprotected getComponent( item: any, propertyName: PropertyName, ): any {\n\t\tswitch (propertyName) {\n\t\t\tcase PropertyName.PREFIX_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.DESCRIPTION_RENDERER:\n\t\t\tcase PropertyName.ERROR_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tcase PropertyName.BUTTON_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n    protected newInstance( component: { new (...args: any[]): any }, componentFrameWork: boolean, propertyName: PropertyName, params?: any, ) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName( BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName( BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else { \n            const componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : [],\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n    private getMergeParams(item : any, propertyName : PropertyName, params : any) : any {\n        return {...params, ...this.getUserParams(item, propertyName, params)};\n    }\n\n    private getUserParams(item : any, propertyName : PropertyName, params : any) : any {\n        switch(propertyName) {\n            case PropertyName.PREFIX_RENDERER:\n\t\t\tcase PropertyName.LABEL_RENDERER:\n                return this.getUserRendererParams(item, params);\n            default:\n                return {};\n        }\n\n    }\n\n    private getUserRendererParams(item : any, params : any) : any {\n        const rendererParams = item.getUserRendererParams();\n\n        let rendererParamsResult : any = {};\n\n        if (typeof rendererParams == 'function') {\n\t\t\trendererParamsResult = rendererParams(params);\n\t\t} else if (typeof rendererParams == 'object') {\n\t\t\trendererParamsResult = rendererParams;\n\t\t}\n\n        return rendererParamsResult;\n    }\n}\n","\n\n\nimport { AutoWired, Bean } from \"@dg/corecomponent\";\n\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\n\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../../../date-range-field/src/constant/bean-name-constant\";\nimport { DateRangeFieldApiType } from \"./date-range-field-api.types\";\nimport { DateRangeFieldControllerHandlerType } from \"./date-range-field-controller.type\";\nimport { DateRangeFieldConfiguration } from \"../../date-range-configuration.types\";\nimport { DateRange, DateRangeFieldModelType } from \"./date-range-field-data-manager.types\";\nimport { DATE_RANGE_FIELD_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\n\n\n\n\n\n\n\n@Bean(DATE_RANGE_FIELD_BEAN_NAME.API)\nexport class DateRangeFieldApi  extends EventEmitter implements DateRangeFieldApiType{\n\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER) controllerHandler !: DateRangeFieldControllerHandlerType;\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.DATA_MANAGER)  dataManager !: DateRangeFieldModelType ;\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONFIGURATION)  configuration !:  DateRangeFieldConfiguration;\n\n\n    getElement(): HTMLElement {\n        const rootController = this.controllerHandler.getDateRangeFieldController()\n        return rootController.getElement();\n       \n    }\n\n    getValue(): DateRange{\n        return this.dataManager.getDateRange();\n    }\n\n    focus(): void {\n        const rootController = this.controllerHandler.getDateRangeFieldController()\n        rootController.focusInputElement();\n    }\n    blur(): void {\n        const rootController = this.controllerHandler.getDateRangeFieldController()\n        rootController.blurInputElement();\n    }\n\n    hide(): void {\n        const rootController = this.controllerHandler.getDateRangeFieldController()\n        rootController.hide()\n    }\n    show(): void {\n        const rootController = this.controllerHandler.getDateRangeFieldController()\n        rootController.show()\n    }\n\n    setValue(range : DateRange): void {\n        this.dataManager.setDateRange(range)\n    }\n\n    updateProperties(properties: DateRangeFieldConfiguration): void {\n\n        Object.entries(properties).forEach(([key, value]) => {\n            if (value !== undefined) {\n                // Cast key as keyof INumberConfiguration to maintain type safety\n                (this.configuration as any)[key] = value; \n            }\n        });\n\n        // If fromValue/toValue are present (including explicit null), update both in data manager\n        const hasFrom = Object.prototype.hasOwnProperty.call(properties, 'fromValue');\n        const hasTo = Object.prototype.hasOwnProperty.call(properties, 'toValue');\n        if (hasFrom || hasTo) {\n            const current = this.dataManager.getDateRange();\n            const nextFrom = hasFrom ? (properties.fromValue as any) : current.from;\n            if(hasFrom) {this.dataManager.setFromDate(nextFrom)} \n            const nextTo = hasTo ? (properties.toValue as any) : current.to;\n            if(hasTo) {this.dataManager.setToDate(nextTo)}\n            // this.dataManager.setDateRange({ from: nextFrom as any, to: nextTo as any });\n        }\n\n        this.dispatchEvent({\n            type: DATE_RANGE_FIELD_CUSTOM_EVENTS.PROPERTY_CHANGED,\n            options: properties,\n        });\n\n      \n    }\n\n     destroy(): void {\n        const rootController = this.controllerHandler.getDateRangeFieldController()\n         rootController.destroyComponent();\n    }\n\n\n    getFormattedValue():{from : string, to : string}{\n        return this.dataManager.getFormattedValue()\n\n    }\n\n\n  \n\n   \n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { ComponentsRegistry, ComponentMeta } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { BEAN_NAME, traverseObject } from \"@dg/corecomponent\";\nimport { Label } from \"../../label/label-view\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { ErrorComponent } from \"../../error/error-view\";\nimport { DateRangeFieldOptionHandler } from \"./core/model/date-range-field-option-handler\";\nimport { DateRangeFieldInputView } from \"./core/date-range-field-input/date-range-field-input-view\";\nimport { DateRangeFieldControllerHandler } from \"./core/model/date-range-field-controller\";\nimport { DateRangePickerInteractor } from \"./core/model/date-range-picker-interactor\";\nimport { PopupHandler } from \"./core/model/popup-handler\";\nimport { DateRangeFieldModel } from \"./core/model/date-range-field-data-manager\";\nimport { DateRangeFieldUserComponentHandler } from \"./core/model/date-range-field-user-component-handler\";\nimport { DateRangeFieldApi } from \"./core/model/date-range-field-api\";\n\nlet nextInstanceId = 1;\n\nexport class DateRangeCoreComponent {\n\tinitialize(configuration: any, params: any = {}, createUI: CallableFunction): void {\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\t\tconst context = new Context();\n\t\tconst userConfigurations = this.createUserConfiguration(configuration, params, instanceID);\n\t\tcontext.registerBeanClasses(this.createBeanClasses(), userConfigurations);\n\t\tthis.registerCoreComponent(context);\n\t\tthis.registerDefaultUserComponent(context);\n\t\tcreateUI(context);\n\t\t(window as any).context = context;\n\t}\n\n\tprivate createBeanClasses(): Set<any> {\n\t\tconst beanList = [\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tComponentMetadataProvider,\n\t\t\tEventHandler,\n\t\t\tDateRangeFieldOptionHandler,\n\t\t\tDateRangeFieldControllerHandler,\n\t\t\tDateRangePickerInteractor,\n\t\t\tPopupHandler,\n\t\t\tDateRangeFieldModel,\n\t\t\tDateRangeFieldUserComponentHandler,\n\t\t\tDateRangeFieldApi\n\t\t];\n\t\treturn new Set(beanList);\n\t}\n\n\tprivate createUserConfiguration(configuration: any, params: any, instanceID: string): {\n\t\tconfiguration: any;\n\t\tframeWorkOverrides: IFrameworkOverrides | null;\n\t\tglobalEventListener: Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t\tinstanceID: string;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerDefaultUserComponent(context: Context): void {\n\t\tconst userComponentRegistry = context.getBean(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\tconst defaults = {} as Record<string, any>;\n\t\ttraverseObject(defaults, (name: string, component: any) => {\n\t\t\tuserComponentRegistry.registerDefaultComponent(name, component);\n\t\t});\n\t}\n\n\tprivate registerCoreComponent(context: Context) {\n\t\tconst registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n\t\tregistry.setupComponents(createComponentList());\n\t}\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\treturn [\n\t\t{ componentName: 'dg-date-range-field-label', componentClass: Label },\n\t\t{ componentName: 'dg-date-range-field-descritpion', componentClass: DescriptionComponent },\n\t\t{ componentName: 'dg-date-range-error', componentClass: ErrorComponent },\n\t\t{ componentName: 'dg-date-range-field-input', componentClass: DateRangeFieldInputView },\n\t\t\n\t];\n}\n\n\n","export class CSSRegistry {\n    private static nameSpaces : string | string[];\n\n    public static registerNameSpaces(names : string | string[]) : void {\n        CSSRegistry.nameSpaces = names;\n    }\n\n    public static getNameSpaces() : string | string[] {\n        return CSSRegistry.nameSpaces;\n    }\n}","import { generateUtilityClass } from \"@dg/utils\";\nimport { CSSRegistry } from \"../modules/CSSRegistry\";\n\n\nexport function getDateRangeFieldRootUtilityClass(slots: {slot : string, modifiers : string[]}): string {\n  const globalNameSpace = CSSRegistry.getNameSpaces() ?? [\"dg\"];\n  return generateUtilityClass('date-range-field', slots.slot, slots.modifiers, globalNameSpace as string[]);\n}\n","import { AutoWired } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { DateRangeFieldComponentType, DateRangeRootControllerType, RootComponentPropertyType } from \"./date-range-field-root.type\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"../../constant/bean-name-constant\";\nimport { DateRangeFieldControllerHandlerType } from \"../model/date-range-field-controller.type\";\nimport { DATE_RANGE_FIELD_CUSTOM_EVENTS } from \"../../constant/event-name\";\nimport { composeClasses } from \"@dg/utils\";\nimport { getDateRangeFieldRootUtilityClass } from \"./date-range-field-root-classes\";\nimport { DateRangePickerInteractorType } from \"../model/date-range-picker-interactor.type\";\n\n\n\nconst useUtilityClasses = (ownerState : any) => {\n\tconst { invalid, disabled, readonly } = ownerState;\n\tconst slots = {\n\t\troot: {\n\t\t\tslot: 'root',\n\t\t\tmodifiers: [\n\t\t\t\tinvalid && 'error',\n\t\t\t\tdisabled && 'disabled',\n\t\t\t\treadonly && 'readonly',\n\t\t\t],\n\t\t},\n\t};\n\n\treturn composeClasses(slots, getDateRangeFieldRootUtilityClass);\n};\n\n\n\n\nexport class DateRangeFieldRootController extends AbstractController<DateRangeFieldComponentType> implements DateRangeRootControllerType {\n\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER) controllerHandler !: DateRangeFieldControllerHandlerType;\n\t@AutoWired(DATE_RANGE_FIELD_BEAN_NAME.INTERACTOR) dateRangePickerInteractor !: DateRangePickerInteractorType;\n\n\n    private isElementIsFocused :boolean = false\n\n    setComponent(component: DateRangeFieldComponentType): void {\n        this.component =component\n        this.controllerHandler.registerDateRangeFieldController(this);\n        this.applyClassNames();\n        this.registerEvents();\n        this.addListener(this.eventHandler,DATE_RANGE_FIELD_CUSTOM_EVENTS.PROPERTY_CHANGED,this.refresh.bind(this))\n        this.addListener(this.eventHandler,DATE_RANGE_FIELD_CUSTOM_EVENTS.BLUR_INPUT_ELEMENT,this.blurInputElement.bind(this))\n        \n    }\n\n    private refresh(){\n        this.applyClassNames()\n    }\n\n    private applyClassNames(){\n\t\tconst ownerState = this.getOwnerState();\n\t\tconst classes = useUtilityClasses(ownerState);\n\t\tthis.component?.addOrRemoveCssClass(classes.root, true);\n\t\tthis.component?.getElement().classList.add(\"dg-field__root\");\n\n\t\townerState.disabled &&  this.component?.getElement().classList.add(\"dg-input__status--disabled\")\n\t\townerState.readonly &&  this.component?.getElement().classList.add(\"dg-input__status--readonly\")\n\t\townerState.focus &&  this.component?.getElement().classList.add(\"dg-input__status--focus\")\n\t\tthis.addErrorState();\n\t}\n\n    private addErrorState() : void {\n        const isValid = false;\n        this.component!.getElement().classList.toggle('dg-input__status--error', isValid);\n    }\n    private getOwnerState() {\n\t\treturn {\n\t\t\t// invalid : !this.numberModel.isValid(),\n\t\t\tdisabled: this.optionsHandler.isDisabled(),\n\t\t\treadonly: this.optionsHandler.isReadonly(),\n\t\t\tfocus   : this.isElementIsFocused,\n\t\t\t\n\t\t}\n\t}\n\n    getProperty(): RootComponentPropertyType{\n        return{\n            label      : this.optionsHandler.getLabel(),\n            description: this.optionsHandler.getDescription(),\n            ignoreEmptyDOM :this.optionsHandler.shouldIgnoreEmptyDOM()\n        }\n    }\n\n    registerEvents(){\n        const element = this.component?.getInputContainer() as HTMLElement;\n\n        element.addEventListener('click',this.handleOnClick.bind(this));\n        element.addEventListener('blur',this.onBlur.bind(this));\n        element.addEventListener('focus',this.oFocus.bind(this));\n        element.addEventListener('keydown',this.onKeydown.bind(this));\n    }\n\n    private onKeydown(event : KeyboardEvent):void{\n        const key = event.key;\n\n        if(key === 'Escape'){\n        this.dispatchEvent({type : DATE_RANGE_FIELD_CUSTOM_EVENTS.DESTROY_RANGE_PICKER})\n\n        }\n\n    }\n\n    private oFocus(event : FocusEvent){\n        if(this.optionsHandler.isReadonly() || this.optionsHandler.isDisabled()){\n            return\n        }\n        this.optionsHandler.onFocus(event);\n    }\n\n    private handleOnClick(event : MouseEvent){\n\n        if(this.optionsHandler.isReadonly() || this.optionsHandler.isDisabled()){\n            return\n        }\n\n        this.isElementIsFocused = true\n        this.optionsHandler.onClick(event)\n        this.applyClassNames()\n\n        if(!this.dateRangePickerInteractor.isPickerLaunched()){\n            this.dispatchEvent({\n                type : DATE_RANGE_FIELD_CUSTOM_EVENTS.CREATE_RANGE_PICKER\n            })\n\n        }else{\n            this.dispatchEvent({\n                type : DATE_RANGE_FIELD_CUSTOM_EVENTS.DESTROY_RANGE_PICKER\n            })\n        }\n        \n    }\n\n    private onBlur(event : FocusEvent){\n\n\n        const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n        // Find the range picker root\n        const rangePickerRoot = document.querySelector(\".dg-date-range-picker__root\");\n    \n        // If focus is still inside the range picker → do not destroy\n        if (relatedTarget && rangePickerRoot?.contains(relatedTarget)) {\n            return;\n        }\n        this.isElementIsFocused = false\n        this.applyClassNames();\n        this.optionsHandler.onBlur(event);\n\n        this.dispatchEvent({\n            type : DATE_RANGE_FIELD_CUSTOM_EVENTS.DESTROY_RANGE_PICKER\n        })\n\n    }\n\n    getInputElement():HTMLElement{\n        return this.component?.getInputContainer() as HTMLElement\n\n    }\n\n    focusInputElement():void{\n        const inputElement = this.component?.getInputContainer() as HTMLElement\n        inputElement.focus();\n    }\n\n\n    blurInputElement():void{\n        const inputElement = this.component?.getInputContainer() as HTMLElement\n        inputElement.blur();\n    }\n\n    getElement():HTMLElement{\n        return this.component?.getElement() as HTMLElement\n    }\n\n     destroyComponent(): void {\n        this.optionsHandler.onDestroy();\n        this.dispatchEvent({type : DATE_RANGE_FIELD_CUSTOM_EVENTS.DESTROY_RANGE_PICKER})\n\t\tthis.component?.destroy();\n        super.destroy()\n\n    }\n\n    hide():void{\n        const elem = this.component?.getElement();\n        if (!elem) return;\n        elem.style.display = \"none\";\n    }\n\n    show():void{\n        const elem = this.component?.getElement();\n        if (!elem) return;\n        elem.style.display = \"block\";\n\n    }\n\n}\n","import { PostConstruct, queryAssignedNodes } from '@dg/corecomponent';\nimport { Component } from '@dg/corecomponent/Component.js';\nimport { DateRangeFieldComponentType } from './date-range-field-root.type';\nimport { DateRangeFieldRootController } from './date-range-field-root-controller';\nimport { DateRangeFieldRootTemplate } from '../template/date-range-field-root-template';\n\n\n\n\n\n\nexport class DateRangeFieldRootView extends Component {\n\t@queryAssignedNodes('label') LabelElement \t\t\t !: HTMLElement;\n\t@queryAssignedNodes('description') descriptionElement \t\t\t !: HTMLElement;\n\t@queryAssignedNodes('inputContainer') inputContainer \t\t\t !: any;\n\t\n\n    private appendTo: HTMLElement | undefined;\n\tconstructor(appendTo: HTMLElement | undefined) {\n\t\tsuper();\n\t\tthis.appendTo = appendTo;\n\t}\n\n    @PostConstruct()\n\tinit(): void {\n\t\t// change for framework view\n\t\tconst component: DateRangeFieldComponentType = {\n\t\t\tgetElement           : () => this.getGui(),\n\t\t\taddOrRemoveCssClass  : (className : string, _addOrRemove : boolean) => this.addOrRemoveCSSClass(className),\n\t\t\tdestroy              : () => this.destroy(),\n\t\t\tgetLabelElement      : ()=> this.getLabelElement(),\n\t\t\tgetDescriptionElement: ()=> this.getDescriptionElement(),\n\t\t\tgetInputContainer    : ()=> this.getInputContainer(),\n\t\t};\n\n\t\tconst controller = this.createManagedBean(new DateRangeFieldRootController());\n\n\t\tconst props = controller.getProperty();\n\t\tconst template = DateRangeFieldRootTemplate(props);\n\n\t\t\n\t\tthis.setTemplate(template);\n\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t}\n\n\tgetElement(){\n\t\treturn this.getGui();\n\t}\n\n  \n\t getLabelElement():any{\n\t\treturn this.LabelElement ? this.LabelElement  : null\n\t}\n\n\t getDescriptionElement():any{\n\t\treturn this.descriptionElement ? this.descriptionElement : null;\n\t}\n\n\tgetInputContainer():HTMLElement{\n\t\treturn this.inputContainer.eGui\n\t}\n\n\n\tprivate addOrRemoveCSSClass(className: string) : void {\n\t\tconst element = this.getGui()\n\t\telement && (element.className = className);\n\t}\n\n\tprivate appendElementIntoUserDom() : void {\n\t\tconst eGui = this.getGui();\n\t\tthis.appendTo && this.appendTo.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.appendTo?.remove();\n\t\t\tthis.appendTo = undefined;\n\t\t});\n\t}\n\n}\n\n\n","import { RootComponentPropertyType } from \"../date-range-field-root/date-range-field-root.type\";\n\n\n\n\n\n\n\n\n\n\nexport function DateRangeFieldRootTemplate(params : RootComponentPropertyType){\n    \n    const container = document.createElement('div');\n    container.classList.add('dg-date-range-field__root');\n\n    if (params.ignoreEmptyDOM || params.label) {\n        const labelElement = document.createElement(\"dg-date-range-field-label\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n\n    const inputContainer = document.createElement('dg-date-range-field-input');\n    inputContainer.setAttribute('ref','inputContainer')\n    container.append(inputContainer);\n\n    \n    if (params.ignoreEmptyDOM || params.description) {\n        const labelElement = document.createElement(\"dg-date-range-field-descritpion\");\n        labelElement.setAttribute(\"ref\", \"label\");\n        container.appendChild(labelElement);\n    }\n\n\n    return container;\n\n\n}\n\n\n\n\n","const UPLOAD_BEAN_NAME = {\n\tUPLOAD_API: \"UploadAPI\",\n};\n\nexport { UPLOAD_BEAN_NAME };\n","import { IUploadProps } from \"../upload-configuration.types\";\n\n/** DOM id for the hidden file input; must match `UploadRenderer` and `UploadOptionHandler.getAriaLabelledby`. */\nexport function getUploadFileInputDomId(configuration: IUploadProps): string {\n\tconst raw =\n\t\tconfiguration.instanceID != null && String(configuration.instanceID).length > 0\n\t\t\t? String(configuration.instanceID).replace(/\\s/g, \"-\")\n\t\t\t: \"instance\";\n\treturn `dg-upload-file-${raw}`;\n}\n","import { IUploadFile, IUploadProps, IRenderer } from \"../../upload-configuration.types\";\nimport { IUploadAPI } from \"../model/upload-api.types\";\nimport { getUploadFileInputDomId } from \"../upload-file-input-id\";\n\nexport class UploadRenderer implements IRenderer {\n    private rootElement!: HTMLElement;\n    private fileInput!: HTMLInputElement;\n    private listContainer!: HTMLElement;\n    private files: IUploadFile[];\n    private activeUploads: Record<string, XMLHttpRequest | number>;\n    private props: IUploadProps;\n    private panelRendererImpl: IRenderer | undefined;\n    /** Object URLs created for local image previews; revoked on re-render and destroy */\n    private blobPreviewUrlByUid: Record<string, string> = {};\n    private previewOverlayEl: HTMLElement | null = null;\n    private previewOverlayOnKeyDown: ((ev: KeyboardEvent) => void) | null = null;\n\n    constructor(props: IUploadProps) {\n        this.props = props;\n        this.files = [...(props.fileList ?? props.defaultFileList ?? [])];\n        this.activeUploads = {};\n        this.init();\n    }\n\n    public init(): void {\n        this.rootElement = document.createElement(\"div\");\n        /* Outer shell uses `dg-upload__container` in `upload-root-template`; this node is the inner upload UI only */\n        this.rootElement.className = \"dg-upload__gui\";\n        this.rootElement.tabIndex = 0;\n\n        this.createFileInput();\n        this.createTrigger();\n        this.createListContainer();\n        this.bindPasteHandler();\n        this.renderList();\n    }\n\n    public getGui(): HTMLElement {\n        return this.rootElement;\n    }\n\n    public destroy(): void {\n        Object.values(this.activeUploads).forEach((activeUpload) => {\n            if (activeUpload instanceof XMLHttpRequest) {\n                activeUpload.abort();\n            } else {\n                window.clearInterval(activeUpload);\n            }\n        });\n        this.panelRendererImpl?.destroy?.();\n        this.panelRendererImpl = undefined;\n        this.closePreviewOverlay();\n        this.revokeBlobPreviewUrls();\n    }\n\n    public getAPI(): IUploadAPI {\n        return {\n            getFileList: () => [...this.files],\n            setFileList: (fileList: IUploadFile[]) => {\n                const next = [...fileList];\n                this.revokeBlobPreviewsNotInFileList(next);\n                this.files = next;\n                this.emitChange();\n                this.renderList();\n            },\n            clear: () => {\n                this.revokeBlobPreviewUrls();\n                this.files = [];\n                this.emitChange();\n                this.renderList();\n            },\n            upload: (file?: IUploadFile) => {\n                if (file) {\n                    this.uploadFile(file);\n                    return;\n                }\n                this.files.filter((item) => item.status === \"ready\").forEach((item) => this.uploadFile(item));\n            }\n        };\n    }\n\n    private createFileInput(): void {\n        this.fileInput = document.createElement(\"input\");\n        this.fileInput.type = \"file\";\n        this.fileInput.className = \"dg-upload__input\";\n        this.fileInput.style.display = \"none\";\n        this.fileInput.multiple = !!this.props.multiple;\n        this.fileInput.accept = this.props.accept ?? \"\";\n        if (this.props.directory) {\n            (this.fileInput as any).webkitdirectory = true;\n            this.fileInput.setAttribute(\"directory\", \"true\");\n        }\n        this.fileInput.addEventListener(\"change\", () => {\n            this.onFilesAdded(this.fileInput.files);\n            this.fileInput.value = \"\";\n        });\n        this.fileInput.id = getUploadFileInputDomId(this.props);\n        this.rootElement.appendChild(this.fileInput);\n    }\n\n    private hasFieldLayout(): boolean {\n        if (this.props.panelRenderer) {\n            return true;\n        }\n        const has = (s?: string) => typeof s === \"string\" && s.trim().length > 0;\n        return has(this.props.label) || has(this.props.placeholder) || has(this.props.description);\n    }\n\n    private usesPanelRenderer(): boolean {\n        return !!this.props.panelRenderer;\n    }\n\n    private getTriggerCaption(): string {\n        const ph = this.props.placeholder;\n        if (typeof ph === \"string\" && ph.trim()) {\n            return ph.trim();\n        }\n        const dragAndDrop = this.props.dragAndDrop ?? true;\n        return dragAndDrop ? \"Click or drag files here to upload\" : \"Click to select file\";\n    }\n\n    private createDefaultUploadIcon(): HTMLElement {\n        const wrap = document.createElement(\"span\");\n        wrap.className = \"dg-upload__trigger-icon\";\n        wrap.setAttribute(\"aria-hidden\", \"true\");\n        const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n        svg.setAttribute(\"width\", \"22\");\n        svg.setAttribute(\"height\", \"22\");\n        svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n        svg.setAttribute(\"fill\", \"none\");\n        svg.setAttribute(\"stroke\", \"currentColor\");\n        svg.setAttribute(\"stroke-width\", \"2\");\n        svg.setAttribute(\"stroke-linecap\", \"round\");\n        svg.setAttribute(\"stroke-linejoin\", \"round\");\n        const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n        path.setAttribute(\"d\", \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12\");\n        svg.appendChild(path);\n        wrap.appendChild(svg);\n        return wrap;\n    }\n\n    private createTrigger(): void {\n        const dragAndDrop = this.props.dragAndDrop ?? true;\n        const fieldLayout = this.hasFieldLayout();\n        const panelMode = this.usesPanelRenderer();\n        const trigger = document.createElement(\"div\");\n        trigger.className = \"dg-upload__trigger\";\n        if (dragAndDrop) {\n            trigger.classList.add(\"dg-upload__trigger--drop\");\n        }\n        if (fieldLayout) {\n            trigger.classList.add(\"dg-upload__trigger--field\");\n        }\n        if (panelMode) {\n            const Panel = this.props.panelRenderer!;\n            const impl = new Panel();\n            this.panelRendererImpl = impl;\n            impl.init?.({\n                uploadProps: this.props,\n                openFilePicker: () => this.fileInput.click(),\n                fileInput: this.fileInput\n            });\n            trigger.appendChild(impl.getGui());\n        } else if (fieldLayout) {\n            const textSpan = document.createElement(\"span\");\n            textSpan.className = \"dg-upload__trigger-text\";\n            textSpan.textContent = this.getTriggerCaption();\n            trigger.appendChild(textSpan);\n            trigger.appendChild(this.createDefaultUploadIcon());\n        } else {\n            trigger.textContent = this.getTriggerCaption();\n        }\n        if (!panelMode) {\n            trigger.addEventListener(\"click\", () => this.fileInput.click());\n        } else {\n            trigger.addEventListener(\"click\", (event) => {\n                if (event.target === trigger) {\n                    this.fileInput.click();\n                }\n            });\n        }\n\n        if (dragAndDrop) {\n            trigger.addEventListener(\"dragover\", (event) => {\n                event.preventDefault();\n                trigger.classList.add(\"dg-upload__trigger--active\");\n            });\n            trigger.addEventListener(\"dragleave\", () => {\n                trigger.classList.remove(\"dg-upload__trigger--active\");\n            });\n            trigger.addEventListener(\"drop\", (event) => {\n                event.preventDefault();\n                trigger.classList.remove(\"dg-upload__trigger--active\");\n                const files = event.dataTransfer?.files ?? null;\n                this.props.onDrop?.(files, event);\n                this.onFilesAdded(files);\n            });\n        }\n\n        this.rootElement.appendChild(trigger);\n    }\n\n    private createListContainer(): void {\n        this.listContainer = document.createElement(\"ul\");\n        this.listContainer.className = \"dg-upload__list\";\n        this.rootElement.appendChild(this.listContainer);\n    }\n\n    private bindPasteHandler(): void {\n        if (!this.props.pasteUpload) {\n            return;\n        }\n        this.rootElement.addEventListener(\"paste\", (event: ClipboardEvent) => {\n            const transfer = event.clipboardData;\n            if (!transfer) {\n                return;\n            }\n            const files = transfer.files;\n            if (files.length > 0) {\n                this.onFilesAdded(files);\n            }\n        });\n    }\n\n    private onFilesAdded(fileList: FileList | null): void {\n        if (!fileList || fileList.length === 0) {\n            return;\n        }\n\n        const selectedFiles = Array.from(fileList);\n        const normalized = selectedFiles\n            .map((file) => this.createUploadFile(file))\n            .filter((file): file is IUploadFile => !!file);\n\n        if (normalized.length === 0) {\n            return;\n        }\n\n        const maxCount = this.props.maxCount;\n        const mergedList = [...this.files, ...normalized];\n        this.files = typeof maxCount === \"number\" ? mergedList.slice(0, maxCount) : mergedList;\n        this.emitChange();\n        this.renderList();\n\n        if (this.props.autoUpload !== false) {\n            normalized.forEach((file) => this.uploadFile(file));\n        }\n    }\n\n    private createUploadFile(file: File): IUploadFile | null {\n        const maxFileSize = this.props.maxFileSize;\n        const minFileSize = this.props.minFileSize;\n        const allowedFileTypes = this.props.allowedFileTypes;\n\n        if (typeof maxFileSize === \"number\" && file.size > maxFileSize) {\n            return null;\n        }\n        if (typeof minFileSize === \"number\" && file.size < minFileSize) {\n            return null;\n        }\n        if (allowedFileTypes?.length && !allowedFileTypes.includes(file.type)) {\n            return null;\n        }\n\n        const candidate: IUploadFile = {\n            uid: `${Date.now()}-${Math.random().toString(16).slice(2)}`,\n            name: file.name,\n            size: file.size,\n            type: file.type,\n            status: \"ready\",\n            percentage: 0,\n            rawFile: file\n        };\n\n        const canUpload = this.props.beforeUpload?.(candidate, this.files);\n        if (canUpload === false) {\n            return null;\n        }\n\n        const validationResult = this.props.validator?.(candidate, this.files);\n        if (validationResult === false) {\n            return null;\n        }\n\n        return candidate;\n    }\n\n    private uploadFile(file: IUploadFile): void {\n        if (!file.rawFile || file.status === \"uploading\") {\n            return;\n        }\n        file.status = \"uploading\";\n        file.percentage = 0;\n        this.props.onUploadStart?.(file, [...this.files]);\n        this.emitChange();\n        this.renderList();\n\n        if (!this.props.action) {\n            this.mockUpload(file);\n            return;\n        }\n\n        const xhr = new XMLHttpRequest();\n        xhr.open(this.props.method ?? \"POST\", this.props.action);\n        xhr.withCredentials = !!this.props.withCredentials;\n\n        Object.entries(this.props.headers ?? {}).forEach(([key, value]) => {\n            xhr.setRequestHeader(key, value);\n        });\n\n        xhr.upload.onprogress = (event) => {\n            if (!event.lengthComputable) {\n                return;\n            }\n            file.percentage = Math.round((event.loaded / event.total) * 100);\n            this.props.onUploadProgress?.(file, event, [...this.files]);\n            this.renderList();\n        };\n\n        xhr.onload = () => {\n            if (xhr.status >= 200 && xhr.status < 300) {\n                file.status = \"success\";\n                file.percentage = 100;\n                file.response = xhr.response;\n                this.props.onUploadSuccess?.(file, xhr.response, [...this.files]);\n            } else {\n                file.status = \"error\";\n                file.error = xhr.response;\n                this.props.onUploadError?.(file, xhr.response, [...this.files]);\n            }\n            delete this.activeUploads[file.uid];\n            this.emitChange();\n            this.renderList();\n        };\n\n        xhr.onerror = () => {\n            file.status = \"error\";\n            file.error = xhr.response;\n            delete this.activeUploads[file.uid];\n            this.props.onUploadError?.(file, xhr.response, [...this.files]);\n            this.emitChange();\n            this.renderList();\n        };\n\n        const formData = new FormData();\n        formData.append(\"file\", file.rawFile);\n        Object.entries(this.props.data ?? {}).forEach(([key, value]) => {\n            formData.append(key, String(value));\n        });\n        this.activeUploads[file.uid] = xhr;\n        xhr.send(formData);\n    }\n\n    private mockUpload(file: IUploadFile): void {\n        const taskId = window.setInterval(() => {\n            if (file.status !== \"uploading\") {\n                window.clearInterval(taskId);\n                return;\n            }\n            file.percentage = Math.min(100, (file.percentage ?? 0) + 20);\n            this.props.onUploadProgress?.(file, null, [...this.files]);\n            if (file.percentage === 100) {\n                file.status = \"success\";\n                window.clearInterval(taskId);\n                delete this.activeUploads[file.uid];\n                this.props.onUploadSuccess?.(file, { mock: true }, [...this.files]);\n                this.emitChange();\n            }\n            this.renderList();\n        }, 200);\n        this.activeUploads[file.uid] = taskId;\n    }\n\n    private removeFile(uid: string): void {\n        const target = this.files.find((file) => file.uid === uid);\n        if (!target) {\n            return;\n        }\n\n        const activeUpload = this.activeUploads[target.uid];\n        if (activeUpload instanceof XMLHttpRequest) {\n            activeUpload.abort();\n        }\n        if (typeof activeUpload === \"number\") {\n            window.clearInterval(activeUpload);\n        }\n        delete this.activeUploads[target.uid];\n        this.revokeBlobPreviewForUid(target.uid);\n        this.closePreviewOverlay();\n\n        target.status = \"removed\";\n        this.files = this.files.filter((file) => file.uid !== uid);\n        this.props.onRemove?.(target, [...this.files]);\n        this.emitChange();\n        this.renderList();\n    }\n\n    private revokeBlobPreviewUrls(): void {\n        Object.values(this.blobPreviewUrlByUid).forEach((url) => URL.revokeObjectURL(url));\n        this.blobPreviewUrlByUid = {};\n    }\n\n    private revokeBlobPreviewForUid(uid: string): void {\n        const url = this.blobPreviewUrlByUid[uid];\n        if (url) {\n            URL.revokeObjectURL(url);\n            delete this.blobPreviewUrlByUid[uid];\n        }\n    }\n\n    private revokeBlobPreviewsNotInFileList(nextFiles: IUploadFile[]): void {\n        const keep = new Set(nextFiles.map((f) => f.uid));\n        Object.keys(this.blobPreviewUrlByUid).forEach((uid) => {\n            if (!keep.has(uid)) {\n                this.revokeBlobPreviewForUid(uid);\n            }\n        });\n    }\n\n    private formatFileSize(bytes: number): string {\n        if (!Number.isFinite(bytes) || bytes < 0) {\n            return \"\";\n        }\n        if (bytes < 1024) {\n            return `${bytes} B`;\n        }\n        if (bytes < 1024 * 1024) {\n            return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n        }\n        return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n    }\n\n    private isImageFile(file: IUploadFile): boolean {\n        if (file.type && file.type.startsWith(\"image/\")) {\n            return true;\n        }\n        return /\\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(file.name);\n    }\n\n    private getThumbSrcForFile(file: IUploadFile): string | undefined {\n        if (file.thumbUrl) {\n            return file.thumbUrl;\n        }\n        if (file.url) {\n            return file.url;\n        }\n        if (file.rawFile && this.isImageFile(file)) {\n            let url = this.blobPreviewUrlByUid[file.uid];\n            if (!url) {\n                url = URL.createObjectURL(file.rawFile);\n                this.blobPreviewUrlByUid[file.uid] = url;\n            }\n            return url;\n        }\n        return undefined;\n    }\n\n    private closePreviewOverlay(): void {\n        if (this.previewOverlayOnKeyDown) {\n            document.removeEventListener(\"keydown\", this.previewOverlayOnKeyDown);\n            this.previewOverlayOnKeyDown = null;\n        }\n        if (this.previewOverlayEl?.parentNode) {\n            this.previewOverlayEl.parentNode.removeChild(this.previewOverlayEl);\n        }\n        this.previewOverlayEl = null;\n    }\n\n    private openImagePreviewOverlay(src: string, title: string): void {\n        this.closePreviewOverlay();\n\n        const overlay = document.createElement(\"div\");\n        overlay.className = \"dg-upload__preview-overlay\";\n        overlay.setAttribute(\"role\", \"dialog\");\n        overlay.setAttribute(\"aria-modal\", \"true\");\n        overlay.setAttribute(\"aria-label\", `Preview: ${title}`);\n\n        const backdrop = document.createElement(\"button\");\n        backdrop.type = \"button\";\n        backdrop.className = \"dg-upload__preview-backdrop\";\n        backdrop.setAttribute(\"aria-label\", \"Close preview\");\n\n        const panel = document.createElement(\"div\");\n        panel.className = \"dg-upload__preview-panel\";\n\n        const closeBtn = document.createElement(\"button\");\n        closeBtn.type = \"button\";\n        closeBtn.className = \"dg-upload__preview-close\";\n        closeBtn.setAttribute(\"aria-label\", \"Close\");\n        closeBtn.innerHTML = '<span aria-hidden=\"true\">\\u00d7</span>';\n\n        const img = document.createElement(\"img\");\n        img.className = \"dg-upload__preview-img\";\n        img.src = src;\n        img.alt = title;\n\n        const close = () => this.closePreviewOverlay();\n        backdrop.addEventListener(\"click\", close);\n        closeBtn.addEventListener(\"click\", (e) => {\n            e.stopPropagation();\n            close();\n        });\n        panel.addEventListener(\"click\", (e) => e.stopPropagation());\n\n        panel.appendChild(closeBtn);\n        panel.appendChild(img);\n        overlay.appendChild(backdrop);\n        overlay.appendChild(panel);\n\n        const onKeyDown = (ev: KeyboardEvent) => {\n            if (ev.key === \"Escape\") {\n                ev.preventDefault();\n                close();\n            }\n        };\n        document.addEventListener(\"keydown\", onKeyDown);\n        this.previewOverlayOnKeyDown = onKeyDown;\n\n        document.body.appendChild(overlay);\n        this.previewOverlayEl = overlay;\n        requestAnimationFrame(() => closeBtn.focus());\n    }\n\n    private previewFile(file: IUploadFile): void {\n        if (this.props.previewRenderer) {\n            const renderer = new this.props.previewRenderer();\n            renderer.init?.({ file });\n            const previewElement = renderer.getGui();\n            this.rootElement.appendChild(previewElement);\n            return;\n        }\n\n        this.props.onPreview?.(file);\n\n        if (!this.isImageFile(file)) {\n            return;\n        }\n        const src = this.getThumbSrcForFile(file);\n        if (!src) {\n            return;\n        }\n        this.openImagePreviewOverlay(src, file.name);\n    }\n\n    private renderList(): void {\n        if (!this.listContainer) {\n            return;\n        }\n\n        const shouldShowUploadList = this.props.showUploadList !== false;\n        this.listContainer.style.display = shouldShowUploadList ? \"block\" : \"none\";\n        this.listContainer.innerHTML = \"\";\n        if (!shouldShowUploadList) {\n            return;\n        }\n\n        this.files.forEach((file) => {\n            const listItem = document.createElement(\"li\");\n            listItem.className = `dg-upload__item dg-upload__item--${file.status}`;\n\n            const thumbWrap = document.createElement(\"div\");\n            thumbWrap.className = \"dg-upload__item-thumb-wrap\";\n\n            const thumbSrc = this.getThumbSrcForFile(file);\n            const canThumbClick =\n                this.props.showPreview &&\n                !!(file.url || file.thumbUrl || (file.rawFile && this.isImageFile(file)));\n\n            if (thumbSrc) {\n                const thumbEl = document.createElement(\"img\");\n                thumbEl.className = \"dg-upload__item-thumb\";\n                thumbEl.alt = \"\";\n                thumbEl.loading = \"lazy\";\n                thumbEl.src = thumbSrc;\n                if (canThumbClick) {\n                    thumbEl.classList.add(\"dg-upload__item-thumb--clickable\");\n                    thumbEl.tabIndex = 0;\n                    thumbEl.setAttribute(\"role\", \"button\");\n                    thumbEl.setAttribute(\"aria-label\", `Preview ${file.name}`);\n                    const open = () => this.previewFile(file);\n                    thumbEl.addEventListener(\"click\", open);\n                    thumbEl.addEventListener(\"keydown\", (e) => {\n                        if (e.key === \"Enter\" || e.key === \" \") {\n                            e.preventDefault();\n                            open();\n                        }\n                    });\n                }\n                thumbWrap.appendChild(thumbEl);\n            } else {\n                const ph = document.createElement(\"div\");\n                ph.className = \"dg-upload__item-thumb dg-upload__item-thumb--placeholder\";\n                ph.setAttribute(\"aria-hidden\", \"true\");\n                thumbWrap.appendChild(ph);\n            }\n\n            listItem.appendChild(thumbWrap);\n\n            const body = document.createElement(\"div\");\n            body.className = \"dg-upload__item-body\";\n\n            const name = document.createElement(\"div\");\n            name.className = \"dg-upload__item-name\";\n            name.textContent = file.name;\n            name.title = file.name;\n            body.appendChild(name);\n\n            const meta = document.createElement(\"div\");\n            meta.className = \"dg-upload__item-meta\";\n\n            const sizeEl = document.createElement(\"span\");\n            sizeEl.className = \"dg-upload__item-size\";\n            sizeEl.textContent = this.formatFileSize(file.size);\n            meta.appendChild(sizeEl);\n\n            if (this.props.allowDownload && file.url) {\n                const downloadLink = document.createElement(\"a\");\n                downloadLink.className = \"dg-upload__item-download\";\n                downloadLink.href = file.url;\n                downloadLink.download = file.name;\n                downloadLink.textContent = \"Download\";\n                meta.appendChild(downloadLink);\n            }\n\n            body.appendChild(meta);\n\n            if (file.status === \"uploading\") {\n                const progress = document.createElement(\"progress\");\n                progress.className = \"dg-upload__item-progress\";\n                progress.max = 100;\n                progress.value = file.percentage ?? 0;\n                body.appendChild(progress);\n            }\n\n            if (file.status === \"error\") {\n                const err = document.createElement(\"div\");\n                err.className = \"dg-upload__item-error\";\n                err.textContent =\n                    typeof file.error === \"string\"\n                        ? file.error\n                        : file.error != null\n                          ? \"Upload failed\"\n                          : \"Upload failed\";\n                body.appendChild(err);\n            }\n\n            listItem.appendChild(body);\n\n            if (this.props.allowRemove !== false) {\n                const removeButton = document.createElement(\"button\");\n                removeButton.type = \"button\";\n                removeButton.className = \"dg-upload__remove\";\n                removeButton.setAttribute(\"aria-label\", `Remove ${file.name}`);\n                removeButton.innerHTML =\n                    '<span class=\"dg-upload__remove-icon\" aria-hidden=\"true\">\\u00d7</span>';\n                removeButton.addEventListener(\"click\", () => this.removeFile(file.uid));\n                listItem.appendChild(removeButton);\n            }\n\n            this.listContainer.appendChild(listItem);\n        });\n    }\n\n    private emitChange(): void {\n        this.props.onChange?.([...this.files]);\n    }\n}\n","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { IUploadFile, IUploadProps } from \"../../upload-configuration.types\";\nimport { IUploadAPI } from \"./upload-api.types\";\nimport { UPLOAD_BEAN_NAME } from \"../../constants/upload-bean-constants\";\nimport { UploadRenderer } from \"../upload-renderer/upload-renderer\";\n\n@Bean(UPLOAD_BEAN_NAME.UPLOAD_API)\nexport class UploadAPI implements IUploadAPI {\n\t@AutoWired(\"configuration\") private configuration!: IUploadProps;\n\n\tprivate renderer: UploadRenderer | undefined;\n\tprivate facade: IUploadAPI | undefined;\n\n\tprivate ensureRenderer(): void {\n\t\tif (this.renderer) {\n\t\t\treturn;\n\t\t}\n\t\tthis.renderer = new UploadRenderer(this.configuration);\n\t\tthis.facade = this.renderer.getAPI();\n\t}\n\n\tgetGui(): HTMLElement {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.getGui();\n\t}\n\n\tdestroy(): void {\n\t\tthis.renderer?.destroy();\n\t}\n\n\tgetFileList(): IUploadFile[] {\n\t\tthis.ensureRenderer();\n\t\treturn this.facade!.getFileList();\n\t}\n\n\tsetFileList(fileList: IUploadFile[]): void {\n\t\tthis.ensureRenderer();\n\t\tthis.facade!.setFileList(fileList);\n\t}\n\n\tclear(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.facade!.clear();\n\t}\n\n\tupload(file?: IUploadFile): void {\n\t\tthis.ensureRenderer();\n\t\tthis.facade!.upload(file);\n\t}\n}\n","import { AbstractController } from \"../../../../utility/abstract-controller\";\n\nexport type UploadRootComponentType = {\n\tgetElement(): HTMLElement;\n};\n\nexport class UploadRootController extends AbstractController<UploadRootComponentType> {\n\tinit(): void {}\n\n\tgetParamsProperty() {\n\t\treturn {\n\t\t\tlabel: {\n\t\t\t\tgetLabelClasses: () => \"dg-upload__label\",\n\t\t\t\tgetLabelTitleClasses: () => \"dg-upload__label-title\",\n\t\t\t},\n\t\t\tdescription: {\n\t\t\t\tgetValidationMessageClasses: () => \"dg-upload__validation-message\",\n\t\t\t\tgetDescriptionClasses: () => \"dg-upload__description\",\n\t\t\t},\n\t\t};\n\t}\n}\n","import { AutoWired, BEAN_NAME, PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { TextOptionsHandlerTypes } from \"../../../../Text/src/core/model/text-options-handler.types\";\nimport { UPLOAD_BEAN_NAME } from \"../../constants/upload-bean-constants\";\nimport { UploadAPI } from \"../model/upload-api\";\nimport { UploadRootController, UploadRootComponentType } from \"./upload-root-controller\";\nimport { uploadRootTemplate } from \"./upload-root-template\";\n\nexport class UploadRootComponent extends Component {\n\tprivate componentHolder: HTMLElement | null;\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: TextOptionsHandlerTypes;\n\t@AutoWired(UPLOAD_BEAN_NAME.UPLOAD_API) private uploadApi!: UploadAPI;\n\n\tconstructor(appendTo?: HTMLElement | null) {\n\t\tsuper();\n\t\tthis.componentHolder = appendTo ?? null;\n\t}\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tconst component: UploadRootComponentType = {\n\t\t\tgetElement: () => this.getGui(),\n\t\t};\n\t\tconst controller = this.createManagedBean(new UploadRootController());\n\t\tconst props = {\n\t\t\tlabel: this.optionHandler.getLabel().length > 0,\n\t\t\thelper: this.optionHandler.getDescription().length > 0,\n\t\t};\n\t\tconst properties = controller.getParamsProperty();\n\t\tconst template = uploadRootTemplate(props);\n\t\tthis.setTemplate(template, {\n\t\t\tlabel: properties.label,\n\t\t\tdescription: properties.description,\n\t\t});\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.uploadApi.destroy();\n\t\t});\n\t}\n\n\tprivate appendElementIntoUserDom(): void {\n\t\tconst eGui = this.getGui();\n\t\tthis.componentHolder && this.componentHolder.appendChild(eGui);\n\t\tthis.addDestroyFunc(() => {\n\t\t\tif (this.componentHolder && eGui.parentNode === this.componentHolder) {\n\t\t\t\tthis.componentHolder.removeChild(eGui);\n\t\t\t}\n\t\t\tthis.componentHolder = null;\n\t\t});\n\t}\n}\n","/** Same structural pattern as `Text` `RenderRootTemplate`: optional `text-label`, field container, optional `text-helper`. */\nexport function uploadRootTemplate(props: { label: boolean; helper: boolean }): HTMLElement {\n\tconst rootDiv = document.createElement(\"div\");\n\trootDiv.className = \"dg-upload__root dg-field__root\";\n\n\tif (props.label) {\n\t\tconst textLabel = document.createElement(\"text-label\");\n\t\ttextLabel.setAttribute(\"ref\", \"label\");\n\t\trootDiv.appendChild(textLabel);\n\t}\n\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"dg-upload__container dg-field__container\";\n\tconst uploadField = document.createElement(\"upload-field\");\n\tuploadField.setAttribute(\"ref\", \"uploadField\");\n\tcontainer.appendChild(uploadField);\n\trootDiv.appendChild(container);\n\n\tif (props.helper) {\n\t\tconst textHelper = document.createElement(\"text-helper\");\n\t\ttextHelper.setAttribute(\"ref\", \"description\");\n\t\trootDiv.appendChild(textHelper);\n\t}\n\n\treturn rootDiv;\n}\n","import { AutoWired, BEAN_NAME, Bean, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { ComponentMetadata } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport type { IComponentDetails } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { UserComponentHandler } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport type { IHelperTextUserComponentHandler } from \"../../../../description/description-view.types\";\nimport type { ILabelUserComponentHandler } from \"../../../../label/label.types\";\nimport type { UploadUserComponentHandlerTypes } from \"./upload-user-component-handler.types\";\n\n/** Property keys aligned with shared `Label` / `DescriptionComponent` controller expectations. */\nexport const enum UploadRendererPropertyName {\n\tHELPER_TEXT_RENDERER = \"helpTextRenderer\",\n\tERROR_RENDERER = \"errorRenderer\",\n\tPREFIX_RENDERER = \"prefixRenderer\",\n\tSUFFIX_RENDERER = \"suffixRenderer\",\n\tLABEL_RENDERER = \"labelRenderer\",\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class UploadUserComponentHandler\n\textends UserComponentHandler\n\timplements UploadUserComponentHandlerTypes, ILabelUserComponentHandler, IHelperTextUserComponentHandler\n{\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, UploadRendererPropertyName.LABEL_RENDERER, params, UploadRendererPropertyName.LABEL_RENDERER);\n\t}\n\n\tgetPrefixRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, UploadRendererPropertyName.PREFIX_RENDERER, params, UploadRendererPropertyName.PREFIX_RENDERER);\n\t}\n\n\tgetSuffixRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, UploadRendererPropertyName.SUFFIX_RENDERER, params, UploadRendererPropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetail(\n\t\t\titem,\n\t\t\tUploadRendererPropertyName.HELPER_TEXT_RENDERER,\n\t\t\tparams,\n\t\t\tUploadRendererPropertyName.HELPER_TEXT_RENDERER\n\t\t);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetail(item, UploadRendererPropertyName.ERROR_RENDERER, params, UploadRendererPropertyName.ERROR_RENDERER);\n\t}\n\n\tprotected getComponentDetail(\n\t\titem: any,\n\t\tpropertyName: UploadRendererPropertyName,\n\t\tparams?: any,\n\t\tdefautName?: string\n\t):\n\t\t| {\n\t\t\t\tcomponentFramework: boolean;\n\t\t\t\tcomponentClass: any;\n\t\t\t\tparams: any;\n\t\t\t\tpropertyName: UploadRendererPropertyName;\n\t\t\t\tnewInstance: () => any;\n\t\t  }\n\t\t| undefined {\n\t\tlet { componentName, frameworkComponent, jsComponent } = this.getComponentMeta(item, propertyName, params);\n\t\tconst lookupRegistry = (name: string) => {\n\t\t\tconst userComponentRegistry = this.getBeanInstanceByBeanName(BEAN_NAME.USER_COMPONENT_REGISTRY) as UserComponentRegistry;\n\t\t\tconst registered = userComponentRegistry.retrieve(name);\n\t\t\tif (registered) {\n\t\t\t\tjsComponent = !registered.componentFrameWork ? registered.component : undefined;\n\t\t\t\tframeworkComponent = registered.componentFrameWork ? registered.component : undefined;\n\t\t\t}\n\t\t};\n\n\t\tif (componentName != null) {\n\t\t\tlookupRegistry(componentName);\n\t\t}\n\n\t\tif (jsComponent == null && frameworkComponent == null && defautName != null) {\n\t\t\tlookupRegistry(defautName);\n\t\t}\n\n\t\tif (!jsComponent && !frameworkComponent) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst componentFramework = jsComponent == null;\n\t\tconst componentClass = jsComponent ? jsComponent : frameworkComponent;\n\n\t\tconst mergedParams = this.getMergeParams(item, propertyName, params);\n\n\t\treturn {\n\t\t\tcomponentFramework,\n\t\t\tcomponentClass,\n\t\t\tparams: mergedParams,\n\t\t\tpropertyName,\n\t\t\tnewInstance: () => this.newInstance(componentClass, componentFramework, propertyName, mergedParams),\n\t\t};\n\t}\n\n\tprotected getComponent(item: any, propertyName: UploadRendererPropertyName): any {\n\t\tswitch (propertyName) {\n\t\t\tcase UploadRendererPropertyName.ERROR_RENDERER:\n\t\t\tcase UploadRendererPropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase UploadRendererPropertyName.PREFIX_RENDERER:\n\t\t\tcase UploadRendererPropertyName.SUFFIX_RENDERER:\n\t\t\tcase UploadRendererPropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t}\n\t}\n\n\tprotected newInstance(\n\t\tcomponent: { new (...args: any[]): any },\n\t\tcomponentFrameWork: boolean,\n\t\tpropertyName: UploadRendererPropertyName,\n\t\tparams?: any\n\t) {\n\t\tlet instance: any;\n\t\tconst frameworkComponentWrapper = this.getBeanInstanceByBeanName(BEAN_NAME.FRAME_WORK_COMPONENT_WRAPPER);\n\t\tconst componentMetaDataProvider = this.getBeanInstanceByBeanName(BEAN_NAME.COMPONENT_META_DATA_PROVIDER);\n\t\tif (!componentFrameWork) {\n\t\t\tinstance = new component();\n\t\t} else {\n\t\t\tconst componentMeta: ComponentMetadata = componentMetaDataProvider.retrieve(propertyName);\n\t\t\tinstance = frameworkComponentWrapper.wrap(\n\t\t\t\tcomponent,\n\t\t\t\tcomponentMeta ? componentMeta?.mandatoryMethodList ?? [] : [],\n\t\t\t\tcomponentMeta ? componentMeta?.optionalMethodList ?? [] : []\n\t\t\t);\n\t\t}\n\n\t\tconst initialise = this.initComponent(instance, params);\n\t\tif (initialise == null) {\n\t\t\treturn Promise.resolve(instance);\n\t\t}\n\n\t\treturn initialise.then(() => instance);\n\t}\n\n\tprotected initComponent(instance: any, params: any): Promise<any> | any {\n\t\tthis.context.createBean(instance);\n\t\tif (instance.init == null) {\n\t\t\treturn;\n\t\t}\n\t\treturn instance.init(params);\n\t}\n\n\tprivate getMergeParams(item: any, propertyName: UploadRendererPropertyName, params: any): any {\n\t\treturn { ...params, ...this.getUserParams(item, propertyName, params) };\n\t}\n\n\tprivate getUserParams(item: any, propertyName: UploadRendererPropertyName, _params: any): any {\n\t\tswitch (propertyName) {\n\t\t\tcase UploadRendererPropertyName.PREFIX_RENDERER:\n\t\t\tcase UploadRendererPropertyName.SUFFIX_RENDERER:\n\t\t\tcase UploadRendererPropertyName.LABEL_RENDERER:\n\t\t\t\treturn item.getUserRendererParams();\n\t\t\tdefault:\n\t\t\t\treturn {};\n\t\t}\n\t}\n}\n","import { AutoWired, PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { UPLOAD_BEAN_NAME } from \"../../constants/upload-bean-constants\";\nimport { UploadAPI } from \"../model/upload-api\";\n\nexport class UploadFieldComponent extends Component {\n\t@AutoWired(UPLOAD_BEAN_NAME.UPLOAD_API) private uploadApi!: UploadAPI;\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tthis.setTemplate(this.uploadApi.getGui());\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ITextConfiguration } from \"../../../../Text/src/text-configuration.types\";\nimport {\n\tICustomReggexType,\n\tIInputMeta,\n\tIErrorMeta,\n} from \"../../../../Text/src/core/model/text-options-handler.types\";\nimport { IRenderer, IUploadProps } from \"../../upload-configuration.types\";\nimport { getUploadFileInputDomId } from \"../upload-file-input-id\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class UploadOptionHandler extends EventEmitter {\n\t@AutoWired(\"configuration\") private configuration!: IUploadProps;\n\n\tisDisabled(): boolean {\n\t\treturn false;\n\t}\n\tisReadOnly(): boolean {\n\t\treturn false;\n\t}\n\tgetLabel(): string {\n\t\treturn this.configuration.label ?? \"\";\n\t}\n\tgetAriaLabel(): string {\n\t\treturn \"\";\n\t}\n\tonFocus(_event: FocusEvent): void {}\n\tonBlur(_event: FocusEvent): void {}\n\tonInput(_inputMeta: IInputMeta): void {}\n\tonKeydown(_event: KeyboardEvent): void {}\n\tonError(_errorMeta: IErrorMeta): void {}\n\tonChange(_oldValue: string, _newValue: string, _eventOrigin?: \"api\" | \"ui\"): void {}\n\tgetAppendTo(): HTMLElement | null {\n\t\treturn this.configuration.appendTo ?? null;\n\t}\n\tisSelected(): boolean {\n\t\treturn false;\n\t}\n\tgetMinCount(): number {\n\t\treturn 0;\n\t}\n\tgetMaxCount(): number | null {\n\t\treturn null;\n\t}\n\tgetPlaceHolder(): string {\n\t\treturn this.configuration.placeholder ?? \"\";\n\t}\n\tgetDefaultValue(): string {\n\t\treturn \"\";\n\t}\n\tgetAriaLabelledby(): string {\n\t\treturn this.configuration.ariaLabelledBy ?? getUploadFileInputDomId(this.configuration);\n\t}\n\tgetDescription(): string {\n\t\treturn this.configuration.description ?? \"\";\n\t}\n\tgetDescriptionRenderer(): any {\n\t\treturn this.configuration.descriptionRenderer ?? \"\";\n\t}\n\tgetDescriptionRendererParams(): any {\n\t\treturn this.configuration.descriptionRendererParams ?? \"\";\n\t}\n\tgetValidationMessage(): string {\n\t\treturn \"\";\n\t}\n\tgetAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? \"\";\n\t}\n\tshowTotal(): boolean {\n\t\treturn false;\n\t}\n\tisRequired(): boolean {\n\t\treturn this.configuration.required ?? false;\n\t}\n\tgetFormat(): string {\n\t\treturn \"none\";\n\t}\n\tisRTL(): boolean {\n\t\treturn false;\n\t}\n\tupdateTextValue(_value: string | number): void {}\n\tgetValue(): string {\n\t\treturn \"\";\n\t}\n\tsetDisabled(_value: boolean): void {}\n\tgetPrefixValue(): string | number | HTMLElement | null {\n\t\treturn \"\";\n\t}\n\tgetSuffixValue(): string | number | HTMLElement | null {\n\t\treturn \"\";\n\t}\n\tisPrefixRenderer(): boolean {\n\t\treturn false;\n\t}\n\tisSuffixRenderer(): boolean {\n\t\treturn false;\n\t}\n\tupdateProperty(_options: ITextConfiguration): void {}\n\tgetPattern(): RegExp | ICustomReggexType | null {\n\t\treturn null;\n\t}\n\tsetMaxCount(_maxCount: number): void {}\n\tgetClassName(): string | string[] | null {\n\t\treturn null;\n\t}\n\tshouldGenerateEmptyDom(): boolean {\n\t\treturn false;\n\t}\n\tgetCustomPattern(): string | null {\n\t\treturn null;\n\t}\n\tgetKeepWithInRange(): boolean {\n\t\treturn true;\n\t}\n\tgetClampValueOnBlur(): boolean {\n\t\treturn false;\n\t}\n\tisShowErrorState(): boolean {\n\t\treturn false;\n\t}\n\tisValid(): boolean {\n\t\treturn true;\n\t}\n\tupdateStatus(_status: \"error\" | \"none\"): void {}\n\tupdateValidationMessage(_message: string): void {}\n\tgetLabelRenderer(): { new (): IRenderer } | undefined {\n\t\treturn this.configuration.labelRenderer;\n\t}\n\tgetLabelRendererParams(): object {\n\t\treturn this.configuration.labelRendererParams ?? {};\n\t}\n\tgetPrefixRenderer(): { new (): IRenderer } | undefined {\n\t\treturn undefined;\n\t}\n\tgetSuffixRenderer(): { new (): IRenderer } | undefined {\n\t\treturn undefined;\n\t}\n}\n","import { BEAN_NAME } from \"@dg/corecomponent\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport { ComponentMeta, ComponentsRegistry } from \"@dg/corecomponent/ComponentRegistry.js\";\nimport { ComponentMetadataProvider } from \"@dg/corecomponent/ComponentMetadataProvider.js\";\nimport { EventHandler } from \"@dg/corecomponent/EventHandler.js\";\nimport { IFrameworkOverrides, VanillaFrameWorkOverrider } from \"@dg/corecomponent/FrameWork.js\";\nimport { UserComponentRegistry } from \"@dg/corecomponent/UserComponentRegistry.js\";\nimport { DescriptionComponent } from \"../../description/description-view\";\nimport { Label } from \"../../label/label-view\";\nimport { UploadUserComponentHandler } from \"./core/model/upload-user-component-handler\";\nimport { IUploadProps } from \"./upload-configuration.types\";\nimport { UploadAPI } from \"./core/model/upload-api\";\nimport { UploadFieldComponent } from \"./core/upload-field/upload-field-view\";\nimport { UploadOptionHandler } from \"./core/model/upload-option-handler\";\n\nexport interface IUserParams {\n\tglobalEventListener?: Function;\n\tframeworkOverrides?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n}\n\nlet nextInstanceId = 1;\n\nexport class UploadCoreComponent {\n\tinitializeUpload(configuration: IUploadProps, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\t\t(configuration as IUploadProps).instanceID = instanceID;\n\t\tconst beanClasses = this.createBeanClasses();\n\t\tconst context = new Context();\n\n\t\tconst userConfigurations = this.createuserConfiguration(configuration, params, instanceID);\n\t\tcontext.registerBeanClasses(beanClasses, userConfigurations);\n\t\tthis.registerCoreComponent(context);\n\t\tcreateUI(context);\n\n\t\t(window as any).context = context;\n\t}\n\n\tprivate createBeanClasses(): Set<any> {\n\t\treturn new Set([\n\t\t\tComponentsRegistry,\n\t\t\tUserComponentRegistry,\n\t\t\tEventHandler,\n\t\t\tComponentMetadataProvider,\n\t\t\tUploadOptionHandler,\n\t\t\tUploadUserComponentHandler,\n\t\t\tUploadAPI,\n\t\t]);\n\t}\n\n\tprivate createuserConfiguration(\n\t\tconfiguration: any,\n\t\tparams: IUserParams,\n\t\tinstanceID: string\n\t): {\n\t\tconfiguration: any;\n\t\tframeWorkOverrides: IFrameworkOverrides | null;\n\t\tglobalEventListener: Function | null;\n\t\tframeworkComponentWrapper: any | null;\n\t\tinstanceID: string;\n\t} {\n\t\tlet frameWorkOverrides = params.frameworkOverrides ?? null;\n\t\tif (!frameWorkOverrides) {\n\t\t\tframeWorkOverrides = new VanillaFrameWorkOverrider();\n\t\t}\n\n\t\treturn {\n\t\t\tconfiguration,\n\t\t\tframeWorkOverrides,\n\t\t\tinstanceID,\n\t\t\tframeworkComponentWrapper: params.frameworkComponentWrapper,\n\t\t\tglobalEventListener: params.globalEventListener ?? null,\n\t\t};\n\t}\n\n\tprivate registerCoreComponent(context: Context): void {\n\t\tconst registry = context.getBean(BEAN_NAME.COMPONENT_REGISTRY) as ComponentsRegistry;\n\t\tconst components: ComponentMeta[] = [\n\t\t\t{ componentName: \"text-label\", componentClass: Label },\n\t\t\t{ componentName: \"text-helper\", componentClass: DescriptionComponent },\n\t\t\t{ componentName: \"upload-field\", componentClass: UploadFieldComponent },\n\t\t];\n\t\tregistry.setupComponents(components);\n\t}\n}\n","import { Calendar } from \"./calendar/src/calendar\";\nimport { Checkbox } from \"./Checkbox/checkbox\";\nimport { Chip } from './chip/chip';\nimport { Link } from \"./link/link\";\nimport { MultilineComponent,RenderMultilineComponent } from \"./Multiline/src/multiline\";\nimport { DecimalModule } from './number-input/src/core/modules/DecimalModule';\nimport { CurrencyModule } from './number-input/src/core/modules/CurrencyModule';\nimport { PercentageModule } from './number-input/src/core/modules/PercentageModule';\nimport { NumberComponent,RenderingNumberComponent } from './number-input/src/number';\nimport { PaginationComponent } from \"./pagination/src/pagination\";\nimport {RatingComponent} from \"./rating-component/src/rating\"\nimport { Select } from \"./select/select\";\nimport { TextComponent,RenderingTextComponent } from \"./Text/src/text\";\nimport {DateTime, DateTimeReadonlyComponent} from \"./date-time-field/src/date-time\"\nimport { Token, TokenModule } from \"./token/token\";\nimport {RadioComponent } from './radio/radio'\nimport { CorePopupHandler } from \"./utility/PopupHandler/CorePopupHandler\";\nimport { List } from \"./List/List\";\nimport { Dialog } from \"./Dialog/src/Dialog\";\nimport { DateRangePicker } from \"./date-range-picker/src/date-range-picker\";\nimport { DateRangeField } from \"./date-range-field/src/date-range\";\nimport {DGDateRangePicker} from \"./date-range-picker/src/dg-date-range-picker\"\nimport { UploadComponent } from \"./upload/src/upload\";\n\n\n\n// const importedClasses = {\n//     NumberComponent,\n//     RenderingNumberComponent,\n//     DecimalModule,\n//     CurrencyModule,\n//     PercentageModule,\n//     Calendar,\n//     Checkbox,\n//     Chip,\n//     Link,\n//     DateTime,\n//     MultilineComponent,\n//     PaginationComponent,\n//     RatingComponent,\n//     Select,\n//     TextComponent,\n//     DateTimeReadonlyComponent,\n//     Token,\n//     TokenModule,\n//     CorePopupHandler,\n//     RadioComponent\n// };\n\n(window as any).DG_Components = {\n    NumberComponent,\n    RenderingNumberComponent,\n    DecimalModule,\n    CurrencyModule,\n    PercentageModule,\n    Calendar,\n    Checkbox,\n    Chip,\n    Link,\n    DateTime,\n    MultilineComponent,\n    PaginationComponent,\n    RenderMultilineComponent,\n    RatingComponent,\n    Select,\n    RenderingTextComponent,\n    TextComponent,\n    DateTimeReadonlyComponent,\n    Token,\n    TokenModule,\n    CorePopupHandler,\n    RadioComponent,\n    List,\n    Dialog,\n    DateRangePicker,\n    DateRangeField,\n    DGDateRangePicker,\n    UploadComponent\n};\n\n\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { LinkAPITypes } from \"./core/model/link-api.types\"\nimport { LinkBeanConstants } from \"./constants/link-constants\";\nimport { ILinkConfiguration } from \"./link-configuration.types\";\nimport { LinkRootView } from \"./core/view/link-root-view\";\nimport { LinkCoreComponent } from \"./link-core-component\";\nimport { IFrameworkOverrides } from \"@dg/corecomponent/FrameWork.js\";\nimport { IModule } from \"../core/modules.types\";\nimport { formatValue } from \"./core/model/PhoneFormatter\";\n\ninterface IUserParams {\n\tglobalEventListener      ?: Function;\n\tframeworkOverrides       ?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n\tmodules                  ?: IModule[];\n}\n\nclass Link {\n    public static formatPhoneNumber(value: string, format: string): string {\n        return formatValue(value, format);\n    }\n\n    public api !: LinkAPITypes;\n\n    constructor(configuration : ILinkConfiguration, params ?: IUserParams) {\n\n        const createUI = (context : Context) => {\n            this.api = context.getBean(LinkBeanConstants.LINK_API) as LinkAPITypes;\n            context.createBean(new LinkRootView(configuration.appendTo ??  document.body));\n        }\n\n        const linkCoreComponent = new LinkCoreComponent();\n        linkCoreComponent.initialize(configuration, params, createUI);\n    }\n\n}\n\nexport {\n    Link\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { DateTimeApiType} from \"./core/model/date-time-api.type\";\nimport { DateTimeConfiguration } from \"./date-time-configuration.types\";\nimport { DATETIME_BEAN_NAME } from \"./constant/bean-name-constant\";\nimport { IUserParams } from \"../../utility/user-params.types\";\nimport { DateTimeCoreComponent } from \"./date-time-core-component\";\nimport { DateTimeRootView } from \"./core/date-time-root/date-time-root-view\";\nimport { DateTimeReadonlyRootView } from \"./core/date-time-readonly-root/date-time-readonly-root-view\";\n\n\nexport class DateTime {\n\tpublic api: DateTimeApiType | undefined;\n\tconstructor(configuration: DateTimeConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(DATETIME_BEAN_NAME.DATETIME_API) as DateTimeApiType;\n            context.createBean(new DateTimeRootView(configuration.appendTo));\n\t\t};\n\t\tnew DateTimeCoreComponent().initialize(configuration, params, createUI);\n\t}\n}\nexport class DateTimeReadonlyComponent {\n\tpublic static formatDate(timestamp: number | Date, format: string): string {\n  \t\tconst date: Date = typeof timestamp === 'number' ? new Date(timestamp) : timestamp;\n\n\t\tconst year = date.getFullYear();\n\t\tconst month = date.getMonth();\n\t\tconst day = date.getDate();\n\t\tconst hours = date.getHours();\n\t\tconst minutes = date.getMinutes();\n\t\tconst seconds = date.getSeconds();\n\n\t\tconst pad = (n: number): string => n.toString().padStart(2, '0');\n\n\t\tconst monthNames: string[] = [\n\t\t\t'January', 'February', 'March', 'April', 'May', 'June',\n\t\t\t'July', 'August', 'September', 'October', 'November', 'December'\n\t\t];\n\n\t\tconst hours12 = hours % 12 === 0 ? 12 : hours % 12;\n\t\tconst ampm = hours < 12 ? 'AM' : 'PM';\n\n\t\tconst tokenMap: Record<string, string> = {\n\t\t\t'MMMM': monthNames[month],\n\t\t\t'YYYY': year.toString(),\n\t\t\t'yyyy': year.toString(),\n\t\t\t'yy': year.toString().slice(-2),\n\t\t\t'MM': pad(month + 1),\n\t\t\t'M': (month + 1).toString(),\n\t\t\t'DD': pad(day),\n\t\t\t'D': day.toString(),\n\t\t\t'HH': pad(hours),\n\t\t\t'H': hours.toString(),\n\t\t\t'hh': pad(hours12),\n\t\t\t'h': hours12.toString(),\n\t\t\t'mm': pad(minutes),\n\t\t\t'm': minutes.toString(),\n\t\t\t'ss': pad(seconds),\n\t\t\t's': seconds.toString(),\n\t\t\t'A': ampm\n\t\t};\n\n\t\treturn format.replace(/MMMM|YYYY|yyyy|yy|MM|M|DD|D|HH|H|hh|h|mm|m|ss|s|A/g, (match: string): string => {\n\t\t\treturn tokenMap[match];\n\t\t});\n\t}\n\n\n\n\n\tpublic api: DateTimeApiType | undefined;\n\tconstructor(configuration: DateTimeConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(DATETIME_BEAN_NAME.DATETIME_API) as DateTimeApiType;\n            context.createBean(new DateTimeReadonlyRootView(configuration.appendTo));\n\t\t};\n\t\tnew DateTimeCoreComponent().initialize(configuration, params, createUI);\n\t}\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { IPaginationConfigurations } from \"./pagination-configuration.types\";\nimport { IUserParams, PaginationCoreComponent } from \"./pagination-core-component\";\nimport { IPaginationAPI } from \"./core/model/pagination-api.types\";\nimport { PAGINATION_BEAN_NAME } from \"./constants/beaname-constants\";\nimport { PaginationRootComponent } from \"./core/pagination-root/pagination-root-view\";\n\nclass PaginationComponent {\n    public api: IPaginationAPI | undefined;\n    constructor(configuration: IPaginationConfigurations, params?: IUserParams){\n        const createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(PAGINATION_BEAN_NAME.PAGINATION_API) as IPaginationAPI;\n            context.createBean(new PaginationRootComponent(configuration.appendTo));\n\t\t};\n\t\tnew PaginationCoreComponent().initializePagination(configuration, params, createUI);\n    }\n}\n\nexport  {\n    PaginationComponent\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { RATING_BEAN_NAME } from \"./constants/beanname-constants\";\n\nimport { IRatingConfiguration } from \"./rating-configuration.types\";\nimport { IUserParams, RatingCoreComponent } from \"./rating-core-component\";\nimport { IRatingAPI } from \"./core/model/rating-api.types\";\nimport { RatingRootComponent } from \"./core/rating-root/rating-root-view\";\n\n\nexport class RatingComponent {\n\tpublic api: IRatingAPI | undefined;\n\tconstructor(configuration: IRatingConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(RATING_BEAN_NAME.RATING_API) as IRatingAPI;\n            context.createBean(new RatingRootComponent(configuration.appendTo));\n\t\t};\n\t\tnew RatingCoreComponent().initializeRating(configuration, params, createUI);\n\t}\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { TextRootComponent } from \"./core/text-root/text-root-view\";\nimport { ITextConfiguration } from \"./text-configuration.types\";\nimport { TEXT_BEAN_NAME } from \"./constants/beanname-constants\";\nimport { ITextAPI } from \"./core/model/text-api.types\";\nimport { IUserParams, TextCoreComponent } from \"./text-core-component\";\nimport { RenderingTextRootComponent } from \"./core/rendering-text-root/rendering-text-root-view\";\n\nclass TextComponent {\n\tpublic api: ITextAPI | undefined;\n    constructor(configuration: ITextConfiguration, params?: IUserParams){\n        const createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(TEXT_BEAN_NAME.TEXT_API) as ITextAPI;\n            context.createBean(new TextRootComponent(configuration?.appendTo));\n\t\t};\n\t\tnew TextCoreComponent().initializeText(configuration, params, createUI);\n    }\n}\n\nclass RenderingTextComponent {\n\tpublic api: ITextAPI | undefined;\n    constructor(configuration: ITextConfiguration, params?: IUserParams){\n        const createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(TEXT_BEAN_NAME.TEXT_API) as ITextAPI;\n            context.createBean(new RenderingTextRootComponent(configuration?.appendTo));\n\t\t};\n\t\tnew TextCoreComponent().initializeText(configuration, params, createUI);\n    }\n}\n\nexport { \n    TextComponent,\n    RenderingTextComponent\n}\n","\nimport { Context } from \"@dg/corecomponent/Context.js\";\nimport {IUserParams} from \"../utility/user-params.types\";\nimport { ITokenAPI } from './src/model/token-api.types';\nimport { TokenConfigurations } from \"./token-configuration.types\";\nimport { TokenCoreComponent } from \"./token-core-component\";\nimport { TOKEN_BEAN_NAME } from \"./src/constants/beanname-constant\";\nimport { TokenRootComponent } from \"./src/core/token-root/token-root-view\";\nexport {TokenModule} from \"./src/Modules/token-module\";\nexport class Token {\n  public api: ITokenAPI | undefined;\n\n  constructor(element : HTMLElement, configuration: TokenConfigurations, params?: IUserParams) {\n   \n    const createUI = (context: Context) =>{\n      this.api = context.getBean(TOKEN_BEAN_NAME.TOKEN_API) as ITokenAPI;\n      context.createBean(new TokenRootComponent(element));\n    };\n    new TokenCoreComponent().initializeToken(element,configuration, params, createUI);\n  }\n\n}\n","import { IUserParams } from \"../utility/user-params.types\";\nimport { RADIO_BEAN_NAME } from \"./constants/beanname-constants\";\nimport { IRadioAPI } from \"./core/model/radio-api\";\nimport { RadioRootComponent } from \"./core/radio-root/radio-root-view\";\nimport { IRadioConfiguration } from \"./radio-configuration.types\";\nimport { RadioCoreComponent } from \"./radio-core-component\";\nimport { Context } from \"@dg/corecomponent/Context.js\";\n\nexport class RadioComponent{\n    public api: IRadioAPI | undefined;\n\n    constructor(configuration: IRadioConfiguration,  params?: IUserParams){\n        const createUI = (context: Context) => {\n            this.api = context.getBean(RADIO_BEAN_NAME.RADIO_API) as IRadioAPI;\n            context.createBean(new RadioRootComponent(configuration?.appendTo ?? null));\n          };\n          new RadioCoreComponent().initializeSelect(configuration, params, createUI);\n    }\n\n\n}","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { DateRangeCoreComponent } from \"./date-range-core-component\";\nimport { DateRangeFieldRootView } from \"./core/date-range-field-root/date-range-field-root-view\";\nimport { DateRangeFieldConfiguration } from \"./date-range-configuration.types\";\nimport { DateRangeFieldApiType } from \"./core/model/date-range-field-api.types\";\nimport { DATE_RANGE_FIELD_BEAN_NAME } from \"./constant/bean-name-constant\";\n\nexport class DateRangeField {\n\tpublic api: DateRangeFieldApiType | undefined;\n\n\tconstructor(configuration: DateRangeFieldConfiguration, params?: any) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(DATE_RANGE_FIELD_BEAN_NAME.API) as DateRangeFieldApiType;\n\t\t\tcontext.createBean(new DateRangeFieldRootView(configuration.appendTo));\n\t\t};\n\t\tnew DateRangeCoreComponent().initialize(configuration, params, createUI);\n\t}\n}\n\n\n","import { DateRangePicker } from \"./date-range-picker\";\nimport { DateRangePickerConfiguration } from \"./date-range-picker-configuration.types\";\nimport { DateRange } from \"./core/model/date-range-picker-data-manager.types\";\nimport { DGDateRangePickerConfig, DGDateRangePickerApi } from \"./dg-date-range-picker.types\";\nimport { CorePopupHandler, PopupComponentPositionParams, Position } from \"../../utility/PopupHandler/CorePopupHandler\";\n\n\n/**\n * DGDateRangePicker\n *\n * Standalone date range picker with open/close lifecycle control.\n *\n * ── Responsibilities ───────────────────────────────────────────────────────\n *   open()  → creates DateRangePicker, mounts popup via CorePopupHandler\n *   close() → calls hideFunction (removes ZG-popup wrapper), destroys picker\n *\n * ── Popup positioning (when `popup` config is provided) ────────────────────\n *   Follows the same pattern as DateRangePickerInteractor.createRangePicker():\n *     1. picker.api.getElement()        → get picker DOM element\n *     2. popupHandler.addPopup()        → wrap in ZG-popup, append to parent\n *     3. positionPopupByComponent()     → calculate and apply top/left\n *   hideFunction from addPopup() removes the wrapper on close().\n *\n * ── Non-popup mode (when `appendTo` is provided, no `popup` config) ────────\n *   The picker appends itself to `appendTo`.\n *   Consumer is fully responsible for positioning.\n *\n * Usage (popup mode):\n *   const picker = new DGDateRangePicker({\n *       popup: {\n *           anchorElement    : inputElement,\n *           popupParentElement: document.body,\n *           position         : 'bottomLeft',\n *           keepWithinBounds : true,\n *           gapY             : 4,\n *       },\n *       onDateRangeChange: ({ from, to }) => console.log(from, to),\n *   });\n *\n *   picker.open();\n *   picker.close();\n */\nexport class DGDateRangePicker implements DGDateRangePickerApi {\n\n    private picker: DateRangePicker | null = null;\n    private config: DGDateRangePickerConfig;\n    private _isOpen: boolean = false;\n\n    /**\n     * Guard flag: prevents `onDestroy` (fired by the internal picker when it\n     * self-destroys during close()) from triggering a double `onClose` callback.\n     */\n    private _destroying: boolean = false;\n\n    /**\n     * Owned CorePopupHandler instance — created once when `popup` config is\n     * provided. Mirrors the PopupHandler bean used by DateRangePickerInteractor.\n     */\n    private _popupHandler: CorePopupHandler | null = null;\n\n    /**\n     * hideFunction returned by popupHandler.addPopup().\n     * Removes the ZG-popup wrapper element from popupParentElement.\n     */\n    private _popupDestroy: (() => void) | null = null;\n\n\n    constructor(config: DGDateRangePickerConfig) {\n        this.config = { ...config };\n        if (config.popup) {\n            this._popupHandler = new CorePopupHandler();\n        }\n    }\n\n\n    // ── Public API ────────────────────────────────────────────────────────────\n\n    open(): void {\n        if (this._isOpen) return;\n\n        this.picker = new DateRangePicker(this.buildPickerConfig());\n        this._isOpen = true;\n\n        // Popup mode: delegate mount + positioning to CorePopupHandler.\n        // Mirrors DateRangePickerInteractor.createRangePicker() lines 104-128.\n        if (this._popupHandler && this.config.popup) {\n            this.mountViaPopupHandler();\n        }\n\n        this.config.onOpen?.();\n    }\n\n    close(): void {\n        if (!this._isOpen || !this.picker) return;\n\n        this._destroying = true;\n        this._isOpen = false;\n\n        // Remove the ZG-popup wrapper from DOM before destroying the picker.\n        this._popupDestroy?.();\n        this._popupDestroy = null;\n\n        this.picker.api?.destroy();\n        this.picker = null;\n        this._destroying = false;\n\n        this.config.onClose?.();\n    }\n\n    destroy(): void {\n        this.close();\n    }\n\n    isOpen(): boolean {\n        return this._isOpen;\n    }\n\n    getElement(): HTMLElement | null {\n        return this.picker?.api?.getElement() ?? null;\n    }\n\n    /**\n     * Re-runs position calculation via CorePopupHandler.\n     * Call on window resize / scroll when using `popup` config.\n     */\n    reposition(): void {\n        if (!this._isOpen || !this._popupHandler || !this.config.popup || !this.picker?.api) return;\n\n        const { popup } = this.config;\n        const positionParams: PopupComponentPositionParams = {\n            popUpElement    : this.picker.api.getElement(),\n            sourceElement   : popup.anchorElement,\n            position        : (popup.position as Position) ?? Position.bottomLeft,\n            keepWithinBounds: popup.keepWithinBounds ?? true,\n            gapX            : popup.gapX ?? 0,\n            gapY            : popup.gapY ?? 0,\n        };\n\n        this._popupHandler.positionPopupByComponent(\n            positionParams,\n            popup.popupParentElement ?? document.body\n        );\n    }\n\n    updateConfig(config: Partial<DGDateRangePickerConfig>): void {\n        this.config = { ...this.config, ...config };\n        if (config.popup && !this._popupHandler) {\n            this._popupHandler = new CorePopupHandler();\n        }\n    }\n\n\n    // ── Private ───────────────────────────────────────────────────────────────\n\n    /**\n     * Mirrors DateRangePickerInteractor.createRangePicker() popup flow:\n     *   positionParams  → describes popup/anchor relationship\n     *   positionCallback → bound positionPopupByComponent call\n     *   addPopup()       → wraps element in ZG-popup, appends to parent, positions\n     *   hideFunction     → stored as _popupDestroy for use in close()\n     */\n    private mountViaPopupHandler(): void {\n        const { popup } = this.config;\n        if (!popup || !this._popupHandler || !this.picker?.api) return;\n\n        const pickerElement       = this.picker.api.getElement();\n        const popupParentElement  = popup.popupParentElement ?? document.body;\n\n        const positionParams: PopupComponentPositionParams = {\n            popUpElement    : pickerElement,\n            sourceElement   : popup.anchorElement,\n            position        : (popup.position as Position) ?? Position.bottomLeft,\n            keepWithinBounds: popup.keepWithinBounds ?? true,\n            gapX            : popup.gapX ?? 0,\n            gapY            : popup.gapY ?? 0,\n        };\n\n        const positionCallback = this._popupHandler.positionPopupByComponent.bind(\n            this._popupHandler,\n            positionParams,\n            popupParentElement\n        );\n\n        const result = this._popupHandler.addPopup({\n            childElement      : pickerElement,\n            anchorToElement   : popup.anchorElement,\n            popupParentElement,\n            positionCallback,\n            ariaLabel         : '',\n        });\n\n        this._popupDestroy = result.hideFunction;\n    }\n\n    private buildPickerConfig(): DateRangePickerConfiguration {\n        const c = this.config;\n\n        return {\n            // When popup config is provided, do NOT pass appendTo — the popup\n            // handler manages DOM insertion via addPopup/createPopupWrapper.\n            appendTo         : c.popup ? undefined : c.appendTo,\n\n            fromValue        : c.fromValue ?? undefined,\n            toValue          : c.toValue ?? undefined,\n            minDate          : c.minDate,\n            maxDate          : c.maxDate,\n            minDaysToSelect  : c.minDaysToSelect,\n            maxDaysToSelect  : c.maxDaysToSelect,\n\n            headerTitle      : c.headerTitle,\n            fromLabel        : c.fromLabel,\n            toLabel          : c.toLabel,\n            format           : c.format,\n\n            closeOnSelect    : c.closeOnSelect,\n            immediateCommit  : c.immediateCommit,\n\n            clearButton      : c.clearButton,\n            clearButtonLabel : c.clearButtonLabel,\n            hideCancelButton : c.hideCancelButton,\n            cancelButtonLabel: c.cancelButtonLabel,\n            submitButtonLabel: c.submitButtonLabel,\n\n            onDateRangeChange: (range: DateRange) => {\n                c.onDateRangeChange?.(range);\n            },\n\n            onClear: () => {\n                c.onClear?.();\n            },\n\n            onCancel: () => {\n                c.onCancel?.();\n                this.onInternalClose();\n            },\n\n            onOk: () => {\n                c.onOk?.();\n            },\n\n            // Fired when the picker tears itself down (Cancel, OK+closeOnSelect).\n            // Guards against double-fire when our own close() triggers destroy.\n            onDestroy: () => {\n                this.onInternalClose();\n            },\n        };\n    }\n\n    /**\n     * Called when the picker closes itself internally (Cancel / OK / programmatic).\n     * Skipped when our own close() is already in progress (_destroying = true).\n     */\n    private onInternalClose(): void {\n        if (this._destroying) return;\n        if (!this._isOpen) return;\n\n        this._popupDestroy?.();\n        this._popupDestroy = null;\n        this.picker = null;\n        this._isOpen = false;\n        this.config.onClose?.();\n    }\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { UPLOAD_BEAN_NAME } from \"./constants/upload-bean-constants\";\nimport { IUploadAPI } from \"./core/model/upload-api.types\";\nimport { UploadRootComponent } from \"./core/upload-root/upload-root-view\";\nimport { IUploadProps } from \"./upload-configuration.types\";\nimport { IUserParams, UploadCoreComponent } from \"./upload-core-component\";\n\nexport class UploadComponent {\n\tpublic api: IUploadAPI | undefined;\n\n\tconstructor(configuration: IUploadProps, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(UPLOAD_BEAN_NAME.UPLOAD_API) as IUploadAPI;\n\t\t\tcontext.createBean(new UploadRootComponent(configuration?.appendTo));\n\t\t};\n\t\tnew UploadCoreComponent().initializeUpload(configuration, params, createUI);\n\t}\n}\n"],"names":["C","O","CONSTRUCTOR","AUTOWIRE","Class","Method","r","n","t","e","constructor","Object","getPrototypeOf","hasOwnProperty","o","uniqueId","Symbol","className","beanName","componentTypes","dependencies","existInstance","preConstruct","postConstruct","preDestroy","attributeAnnotations","defineProperty","value","writable","s","Error","push","u","a","p","lazy","name","type","autowireField","autowireLazy","optional","componentType","targetType","targetDescriptor","i","Set","Map","forEach","values","Array","isArray","length","toString","entries","r$8","this","beanWrappers","destroyed","getBeanInstances","getInstanceID","userConfigurations","instanceID","registerBeanClasses","beanClasses","registerUserContextParams","createBeans","wireBeans","createBean","autoWireBeans","methodWireBeans","callLifeCycleMethods","forEachMetaDataInHierarchyBeanDefinition","get","getBeanInstance","bind","configurable","targetPropertyKey","parameters","getBeansForParameters","console","log","apply","Number","index","destroyBean","destroy","error","callLifeCycleMethodsOnBean","keys","getBeanName","substring","indexOf","getBean","destroyBeans","isDestroyed","allSyncListeners","allAsyncListeners","globalSyncListeners","globalAsyncListeners","asyncFunctionsQueue","scheduled","firedEvents","setBeans","optionHandler","useAsyncEvents","addGlobalListener","getListeners","set","noRegisteredListenersExist","size","addEventListener","add","removeEventListener","delete","removeGlobalListener","dispatchEvent","api","dispatchToListeners","dispatchEventOnce","dispatchAsync","window","setTimeout","flushAsyncQueue","slice","c","arguments","l","getOwnPropertyDescriptor","Reflect","decorate","d","s$3","destroyFunctions","getFrameWorkOverrides","frameWorkOverrides","getContext","EVENT_DESTROYED","context","eventHandler","dispatchEventAsync","addListener","HTMLElement","filter","isAlive","addDestroyFunc","createManagedBean","prototype","super","componentsMappedByName","setupComponents","addComponent","componentName","componentClass","template","toUpperCase","getTemplate","getComponentClass","defaultComp","jsComponents","registerDefaultComponent","registerJSComponent","retrieve","componentFrameWork","component","frameworkComponent","userComponent","isFrameworkComponent","m","componentMetaData","n$a","renderingEngine","removeAttribute","setAttribute","w","A","k","S","j","D","N","P","W","Z","$","_","h","firstChild","removeChild","height","width","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","paddingTop","paddingRight","paddingBottom","paddingLeft","marginTop","g","marginRight","f","marginBottom","marginLeft","boxSizing","getComputedStyle","parseFloat","F","Math","ceil","offsetHeight","L","offsetWidth","x","parentNode","has","attributeName","querySelector","refSelector","__decorate","decorators","target","key","desc","__metadata","metadataKey","metadataValue","metadata","CALENDAR_BEAN_NAME","CalendarOptionHandler","EventEmitter","configuration","getInitialDate","getFormat","format","isDisabled","_a","disabled","isReadOnly","readOnly","getConfiguration","getMonthFormat","monthFormat","getYearFormat","yearFomat","getViewType","viewType","onClick","event","onChange","date","getAppendTo","appendTo","document","body","getShowAdjacentDates","showAdjacentDates","getWeekDayFormat","weekDayFormat","getLocale","locale","getAriaLabelledBy","ariaLabelledby","getClassName","getPickerType","pickerType","getType","shouldShowTimePicker","showTimePicker","getHourCycle","hourCycle","getMinuteInterval","minuteInterval","getInputElement","inputElement","getMinDate","minDate","getMaxDate","maxDate","onDestroy","getId","id","shouldCloseOnSelect","closeOnSelect","shouldDeselect","onDeselect","AutoWired","Bean","BEAN_NAME","BUTTON_BEAN_NAME","elementDelimiter","modifierDelimiter","namespace","namespaceDelimiter","strict","slot","modifiers","Boolean","join","block","element","modifier","assign","split","some","includes","map","reduce","ControlLeft","ControlRight","AltLeft","AltRight","ShiftLeft","ShiftRight","MetaLeft","MetaRight","s$2","container","listenerMapping","defaultConfig","DefaultConfiguration","activeKeys","konamiSequence","isPaused","clearKonamiSequence","init","KeyboardEvent","CAPTURING_PHASE","BUBBLING_PHASE","executeKeyCombo","eventPhase","code","clearTimeout","clear","konamiDelay","keydown","capture","bubble","keyup","getListenerMeta","keyCombo","priority","eventType","extractExecutionMeta","ctrlKey","metaKey","shiftKey","altKey","executeListenerArr","repeat","isKonami","callback","executeKonamiSequence","sortKeyCombo","sort","convertKeyComboToString","splice","removeListener","find","removeKeyCombo","importEvents","pauseExecution","unpauseExecution","description","d$2","displayed","visible","setTemplate","preConstructMethods","createChildComponentsPreConstruct","createChildComponentsFromTags","childNodes","createComponentFromElement","getGui","copyAttributesFromNode","addItems","children","call","swapComponentForNode","nodeName","getAttribute","componentRegistry","elementGettingCreated","setParentComponent","attributes","classList","replaceChild","swapInComponentForRefSelectors","iterateOverQuerySelectors","querySelectors","activateTabIndex","wireQuerySelectors","eGui","Component","setGui","queryForHtmlElement","queryForHtmlInputElement","parentComponent","setTemplateFromElement","getFocusableElement","getAriaElement","getParentComponent","appendChild","Node","isDisplayed","setVisible","skipAriaHidden","toggle","setDisplayed","EVENT_DISPLAYED_CHANGED","addGuiEventListener","addCssClass","removeCssClass","remove","containsCssClass","contains","addOrRemoveCssClass","getRefElement","ButtonControllerHandler","registerButton","buttonCtrl","getButtonCtrl","CSSRegistry","registerNameSpaces","names","nameSpaces","getNameSpaces","getButtonUtilityClass","slots","globalNameSpace","generateUtilityClass","ButtonController","setComp","comp","attachListener","controllerHandler","refresh","applyClasses","setRendererDetails","setTabIndex","setRole","setDisabled","setAccessibility","getElement","setAriaLabel","optionsHandler","getAriaLabel","getEvent","preventDefault","readonly","isReadonly","hasAttribute","ownerState","getOwnerState","userclasses","getClasses","classes","composeClasses","root","useUtilityClasses","_b","addOrRemoveClassName","_c","_d","tabindex","getTabindex","rendererWrapper","createButtonRendererWrapper","params","createButtonRendererParams","props","getProperty","userDetails","userComponentHandler","getButtonRendererDetails","renderer","getRenderer","rendererParams","getRendererParams","parentElement","getText","showIcon","needToShowIcon","showText","needToShowText","icon","getIcon","text","getSvgClasses","applyClassNameForSVG","getSvgElement","getSvgIcon","iconId","svg","ButtonComponent","createElement","rendererDetails","force","appendElementIntoUserDom","destroyRenderer","afterRenderer","componentInstance","newInstance","then","insertValueWithoutRenderer","svgElement","userClasses","clearElement","iconElement","DOMParser","parseFromString","trim","firstElementChild","textElement","textContent","removeFromParent","rendererElement","getHookCallbackForEvent","eventName","Hookname","queryAssignedNodes","PostConstruct","ButtonOptionHandler","onBefore","callbackMethodName","onAfter","getColor","color","getSize","getVariant","variant","getAppendto","appendto","ariaLabel","getComponentDetails","jsComponent","getComponentMeta","componentFramework","propertyName","getComponent","wrap","mandatoryMethodList","optionalMethodList","initComponent","ButtonUserComponentHandler","UserComponentHandler","item","defautName","looUpRegistry","getBeanInstanceByBeanName","undefined","mergedParams","getMergeParams","_params","assignComponentNameOrComponentClass","instance","frameworkComponentWrapper","componentMetaDataProvider","componentMeta","initialise","Promise","resolve","getUserParams","getUserRendererParams","rendererParamsResult","ButtonAPI","controller","buttonctrl","updateProperties","properties","options","nextInstanceId","CoreComponent","createuserConfiguration","frameworkOverrides","VanillaFrameWorkOverrider","globalEventListener","ButtonCoreComponent","initializeButton","createUI","String","CreateBeanClasses","Context","ComponentsRegistry","UserComponentRegistry","ComponentMetadataProvider","EventHandler","Button","createConfiguration","button","label","CalendarButtonController","applyState","createRendererParams","createRendererWrapper","compDetails","getParams","stopImmediatePropagation","getRole","CalendarButtonComponent","_addOrRemove","CalendarComponentHandler","lookUpRegistry","_item","AbstractController","setComponent","getCalendarRootUtilityClass","CALENDAR_CUSTOM_EVENTS","CalendarWeekDayController","applyClassNames","hideWeekDay","showWeekDay","setAriaRole","weekday","viewManager","getWeekdayRendereringData","style","display","CalendarWeekDayView","addOrRemoveCSSClass","div","dummy","weekdays","innerText","CalendarWeekDayTemplate","CalendarCalendarController","setTabindex","dayView","isMonthView","isYearView","rerender","CalendarCalendarView","renderTemplate","_component","cells","CalendarWithWeekDay","CalendarWithoutWeekDayCalendarTemplate","CalendarDayContainerontroller","weekCount","getRowCount","dayCount","getColumnCount","resetCounter","updateRenderingDetails","CalendarDayContainerView","targetClass","cls","row","cell","CalendarDayContainerTemplate","CALENDAR_VIEW_TYPE","CalendarViewManager","counter","rowCount","columnCount","yearTitle","setViewType","renderingData","model","getRenderDetailsforDay","getNumberOfWeeksInMonth","getNumberOfDaysInWeek","getSelectedYear","getMonthNames","getRenderDetailsforYear","getSelectedYearTitle","getRenderingDetails","updateCounter","getRendereringData","getWeekNames","setMonth","month","setSelectedMonth","setDay","day","setSelectedDay","setYear","year","setSelectedYear","setDate","setSelectedDate","y","M","months","ordinal","v","z","utcOffset","abs","floor","clone","ms","Q","toLowerCase","replace","args","b","$L","utc","$u","$x","$offset","parse","$d","Date","NaN","test","match","UTC","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","isSame","startOf","endOf","isAfter","isBefore","$g","unix","valueOf","getTime","toDate","$locale","weekStart","$set","min","daysInMonth","round","subtract","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","extend","$i","isDayjs","en","Ls","CalendarNavBarController","hideYearBtns","showYearBtns","setAriaAttributes","registerEventListener","setFocusToTheTitleElement","getTitleElement","focus","getSelectedMonth","monthElement","getMonthElement","yearElement","getYearElement","getParamsProperty","previousMonthButton","goToPreviousMonth","isMonthInDangerZoneForPast","nextMonthButton","goToNextMonth","isMonthInDangerZoneForFuture","previousYearButton","goToPreviousYear","isYearInDangerZoneForPast","nextYearButton","goToNextYear","isYearInDangerZoneForFuture","isBeforeMonth","goToBackForwardYear","checkToDisableNavIfLimitExceedsMax","isAfterMonth","goToFastForwardYear","isBeforeYear","isAfterYear","getMonthYearButtons","DEFUALT_FORMAT_MAP","formatMap","Y","H","CalendarDataManager","dateSelected","initDate","selectedDate","currentDate","setMaxDate","setMinDate","yearFormat","generateCurrentMonthDays","initializeFormatArrays","updateCurrentMonthDays","dayjs","timeStampDate","RegExp","pattern","fieldNameKey","formatKey","goToCurrent","updateCurrentDate","getCurrentDate","getNextDay","getCurrentDay","getPreviousDay","getNextMonth","getCurrentMonth","getNextYear","getPreviousYear","getCurrentYear","getPreviousMonth","getTotalDays","getNextWeek","nextWeekStart","nextWeekEnd","start","end","getPreviousWeek","previousWeekStart","previousWeekEnd","getCurrentWeek","currentWeekStart","currentWeekEnd","getDaysInMonth","isDateSelected","setDateSelected","dateObject","compareDateObject","startOfMonth","endOfMonth","startOfCalendar","endOfCalendar","getAdjacentDate","days","isCurrentMonth","dateWithTime","hour","minute","second","isSelected","isSameMonthInSameYear","iSameDay","isToday","isWeekEnd","isWeekend","CurrentMonthDays","getTimeBarRenderingDetails","getCurrentHour","getCurrentMinute","getCurrentSecond","meridian","getCurrentMeridian","getMaxRenderingDaysCount","setHours","setMeridian","setMinutes","setCounterValue","_value","getMeridian","getMonthIndex","getYear","getYearOnly","getYearIndex","getDateObject","getDateInDayjs","monthNames","monthName","selectedYear","getSelectedYearIndex","monthdateObject","totalDays","currentYear","minYearLimit","startOfDecade","startYear","max","years","weekNames","startOfWeek","getSelectedDay","getSelectedDate","getSelectedMonthIndex","precausionYearForFuture","precausionYearForPast","precausionMonthForFuture","precausionMonthForPast","isBeforeTIme","tempDate","date1","date2","month1","month2","year1","year2","isSameDate","unit","CalendarCellViewController","currentMonth","dateDetails","dropdownHanlder","destroyDropdown","updateModelDate","updateModelMonth","updateViewManager","updateModelYear","CalendarCellView","CalendarApi","getCalendarCtrl","getValue","blur","currentSelectedDate","shouldUpdateDate","newDate","CalendarControllerHandler","registerCalendarCtrl","calendarCtrl","CalendarNavBarRootTemplate","leftDiv","titleDiv","monthSpan","yearSpan","rightDiv","CalendarNavBarFullTemplate","CalendarNavBarYearTemplate","CalendarNavBarView","titleElement","paramsProperty","TimeNavBarController","hourElement","getHourElement","minuteElement","getMinuteElement","meridianelement","getMeridianElement","selectedValueindex","createDropdown","setHour","setMinute","merdian","valueInMNumeric","isNaN","spanElement","TimeNavBarView","meridianElement","wrapper","timeIcon","tempDOM","innerHTML","timePickerDiv","createTimeButton","buttonClasses","refName","span","createElementNS","path","hourButton","minuteButton","periodButton","periodSpan","periodSvg","periodPath","TimeNavBarTemplate","dropdownController","registerDropdownComponent","dropdownRootController","getDropdownComponent","registerDropdown","getDropdown","registerDropdownContainer","dropdownContainerHandler","getDropdownContainer","registerSearch","searchController","getSearch","registerSelectAllController","selectAllController","getSelectAllController","registerDropdownCreateNewOptionController","dropdownCreateNewOptionController","getDropdownCreateNewOptionController","getDropdownRootUtilityClass","DropdownContainerController","domKey","random","setDomData","DOM_KEY","elementWithFocus","relatedTarget","closeCallback","hasFocus","onBeforeDropdownClose","isElementFromParent","isElementWithinCustomPopup","setSearchComp","searchComp","dropdownCtrlHandler","pointer","uniqueKey","getDomData","multiple","isMultiple","getOptions","isSearchable","isSelectAll","isSelectAllButtonEnabled","preventScroll","onFocus","onBlur","DropdownContainerComponent","DropdownContainer","tabIndex","dropdownHeaderComp","dropdownBodyComp","dropdownFooterComp","dropdownContainer","DROPDOWN_DROPDWON_BEAN_NAME","DropdownAPI","dropdownHandler","clearAllSelectedOptions","select","option","initiator","dropdownDatapart","selectOption","deselect","deSelectOption","getSelectedOptions","isLoaded","getIsLoaded","autoFocusSelectedOption","updateVirtualList","updateSelectedOption","setSelectedOption","addOptions","addOption","removeOptions","removeOption","reRender","onSearch","disableOptions","optionIDs","setOptionsDisabled","enableOptions","hasOption","optionID","DropdownDataPart","optionsController","elementsValue","filteredOptions","selectedOptions","sortByValueAscending","sortByValueDescending","getDropdownModel","onSuccess","data","dropdownOptionHandler","isSortEnabled","sortOptions","getSortOrder","opt","selected","sel","onFailure","getOption","getAllOptions","getOptionIndex","filterOptions","updateFilteredOptions","getFilteredOptions","getOptionController","updateOptionsController","optionController","updateSelectedOptions","deleteSelectedOption","deleteAllSelectedOptions","getAllOptionsIntance","sortOrder","sortedOptions","getDefaultSelectedOptions","selectedOptionsData","getSelectedData","getOptionControllerByOption","selectedOptionId","findIndex","selectedOptionController","createParams","isBeforeSelectALL","onBeforeDeselect","onAfterDeselect","reset","isautoFocusSelectedOptionEnabled","setHoveredOption","enabledOptions","selectedEnabled","idsToRemove","updateDisabled","count","selectALL","selectAllTriggered","selectAll","DropdownUserComponentHandler","getPrefixRendererDetails","getSuffixRendererDetails","getDescriptionRendererDetails","getDropdownOptionRendererDetails","getSelectedValueRendererDetails","getDropdownRendererDetails","getComponentDetail","getCreateNewOptionRendererDetails","getDropdownFooterRendererDetails","getDropdownHeaderRendererDetails","getNoOptionRendererDetails","getLoadingRendererDetails","getHelperTextRendererDetails","DefaultLabelRenderer","labelText","_e","_f","dom","DefaultSingleSelectChipRenderer","rootDiv","backgroundColor","labelWrapper","labelSpan","DefaultMultiSelectChipRenderer","checkbox","customCheckbox","setProperty","chipRoot","chipLabel","_g","_h","_j","_k","_l","_m","SelectDropdownOptionController","setValue","registerEventHandler","setOptionHidden","isHidden","dropdownHidden","registerCheckboxElement","setAriaSelected","setAriaDisabled","_event","cleatHoverOptions","clickOption","stopPropagation","focusedOptionContrl","resetFocuesdOption","isCloseOnSelect","onBeforeSelect","onAfterSelect","clearSelectAllCheckbox","applyFocusToActiveOption","getCheckboxConfig","checkboxSize","borderRadius","checkedFillColor","checkedBorderColor","uncheckedBorderColor","uncheckedboxFillColor","uncheckedBorderWidth","checkedBorderWidth","onclick","createOptionRendererWrapper","createRendererParam","isOptionAsChip","dropdownOptionRenderer","dropdownOptionRendererParams","optionParams","CheckboxBeanConstants","chekBoxConfigurationArray","CheckboxOptionHandler","isRequired","required","getLabel","getAriaDescribedby","ariaDescribedby","getReadOnly","getDisabled","getAriaLabelledby","ariaLabelledBy","getDefaultValue","getCheckBoxLabel","coreLabel","getCheckBoxRenderer","checkboxRenderer","getDescription","onKeydown","onfocus","onblur","oldValue","newValue","eventOrigin","onChangeHandler","onMousedown","getDescriptionRenderer","descriptionRenderer","getDescriptionRendererParams","descriptionRendererParams","isCustomRenderer","customRenderer","getCustomRenderer","getCheckedRenderer","getUnCheckedRenderer","userProperty","userKey","warn","shouldGenerateEmptyDom","ignoreEmptyDOM","showErrorState","status","updateStatus","updateValidationMessage","message","validationMessage","getValidationMessage","getValidationMessageRenderer","validationMessageRenderer","getValidationMessageRendererParams","validationMessageRendererParams","getLabelRenderer","labelRenderer","getLabelRendererParams","labelRendererParams","CheckboxRootController","initState","registerEvent","registerCtrl","customDomHandler","addErrorClassName","isInValid","stateManager","newState","stateHandler","getSelection","getContainer","userRenderClass","userClass","setSelection","state","addInputEventListener","addClassList","customRenderHandler","onMouseDown","input","inputFocus","inputBlur","rootElement","applyStateChange","toggleValue","svgNS","g1","g2","svgReturner","updateProperty","hasValueUpdate","isValidBooleanValue","triggerChange","forceUpdate","suppressOnChange","updateValue","updateLabel","updateDescription","updateCoreLabel","updateReadOnly","updateRequired","getRequiredElement","getLabelValue","labelValue","hide","show","descriptionText","defaultValue","helper","checkboxLabel","inputToggle","currentState","previousState","checked","getLabelClasses","getLabelTitleClasses","getValidationMessageClasses","getDescriptionClasses","CheckboxRootView","addOrRemoveCssClassName","requiredElement","wrapperDiv","customSpan","append","textLabel","checkboxHelper","errorElement","rootTemplate","HTMLSpanElement","HTMLInputElement","CheckboxAPI","getCheckboxCtrl","getFormattedValue","showErrorMessage","hideErrorMessage","CheckboxControllerHandler","checkboxControl","AbstractUserComponentHandler","_propertyName","PROPERTY_NAME","CheckboxUserComponentHandler","getLabelRendererDetails","getCheckboxRendererDetails","getErrorRendererDetails","CheckBoxStateHandler","toggleSelection","getDescriptionUtilityClass","DescriptionController","addHideClassName","componentParams","descriptionClasses","createHelperTextRendererWrapper","createHelperTextRendererParams","toggleAttribute","isInvalid","invalid","invalidText","helperText","DescriptionComponent","addOrRemove","insertValueWithoutCellRenderer","getFormLabelUtilityClass","FormLabelController","titleClasses","labelClasses","labelTitleClasses","addClassName","createProps","asterisk","Label","removeClassName","componentDetails","updateLabelProperties","loadRequiredElement","loadLabelElement","labelElement","_classes","CheckBoxStateManager","getValidationUtilityClass","ErrorController","inValid","validationMessageClasses","createInvalidTextRendererWrapper","createInvalidTextRendererParams","ErrorComponent","escapedValue","toEscape","skipHtmlChars","escapeMap","stringResult","chr","escapeString","CheckboxCoreComponent","initialize","createBeanClasses","userConfiguration","registerCoreComponent","linkContext","registry","components","createComponentList","Checkbox","SelectDropdownOptionComponent","getCheckbox","getParentComp","li","optionTemplate","loadAfterRenderOption","checkboxConfiguration","DropDownOptionHandler","onCreateCustomOption","_option","getDomKey","domData","selectedData","getSelectionLimit","selectionLimit","getDropdownAppendTo","dropdownAppendTo","searchable","getSearchBoxPlaceholder","searchBoxPlaceholder","isVirtualListEnabled","virtualList","isGroupByEnabled","groupBy","selectAllButton","isClearableEnabled","clearable","isAcceptNewValuesEnabled","acceptNewValues","getNewValuePattern","newValuePattern","getValidation","validation","onBeforeDropdownOpen","onAfterDropdownOpen","onAfterDropdownClose","onCreateOption","newOption","onBeforeCreateOption","onAfterCreateOption","isCreateNewOptionEnabled","enableCreateNewOption","isNoneOptionEnabled","enableNoneOption","classname","getDropdownRenderer","dropdownRenderer","getDropdownRendererParams","dropdownRendererParams","getDropdownFooterRenderer","dropdownFooterRenderer","getDropdownFooterRendererParams","dropdownFooterRendererParams","getDropdownHeaderRenderer","dropdownHeaderRenderer","getDropdownHeaderRendererParams","dropdownHeaderRendererParams","getCreateNewOptionRenderer","createNewOptionRenderer","getCreateNewOptionRendererParams","createNewOptionRendererParams","getNoOptionRenderer","noOptionRenderer","getNoOptionRendererParams","noOptionRendererParams","shouldShowTooltip","tooltip","getTooltipMessage","tooltipMessage","getTooltipRegex","tooltipRegex","getTooltipPosition","tooltipPosition","getTooltipAppendto","tooltipAppendto","getTooltipHideDelay","tooltipHideDelay","getLoadingRenderer","loadingRenderer","getLoadingRendererParams","loadingRendererParams","onSelectAll","onBeforeSelectAll","onAfterSelectAll","SearchController","registerEvents","setDisableState","setAriaControls","searchInput","updateDropdownOption","resetActiveElement","moveNextOption","clearsearch","SearchComponent","searchBlock","position","placeholder","searchIcon","gLayer2","gLayer11","path1","path2","search","getSearchInputComp","searchInputComp","DropdownController","registerDropdownElement","registerParentComp","registerNoneOptionEvent","_dropdown","parentComp","isVirtualList","clearOptions","noneOptionComp","getNoneOptionComp","noneOption","selectedOption","renderFilteredOptions","optionsInstance","addNewOption","onBeforeCreateOptionHook","searchElement","rerenderer","getNoneOption","ContainerHeightService","scrollY","uiBodyHeight","setModel","maxDivHeight","res","testUpTo","navigator","userAgent","clientHeight","getMaxDivHeight","setModelHeight","modelHeight","stretching","calculateOffset","clearOffset","isStretching","getDivStretchOffset","divStretchOffset","updateOffset","newScrollY","getContainerPosition","top","newBodyHeight","getUiBodyHeight","scrollTop","bottom","getScrollPositionForPixel","rowTop","pixelsToShave","scrollPercent","maxScrollY","getPixelPosition","modelPixel","getUiContainerHeight","uiContainerHeight","setUiContainerHeight","setDivStretchOffset","onHeightChanged","newOffset","newOffsetFloor","onHeightScaleChanged","traverseObject","object","AbstractVirtualList","rowIndecies","containerHeightService","previousFirstRenderIndex","firstRenderIndex","previousLastRenderIndex","lastRenderIndex","findFirstAndLastRowsToRender","recycleRows","onDisplayChanged","refreshAfterModelUpdate","getRefresh","updateContainerHeights","scrollToTop","domLayoutChanged","rowsToRecycle","getRowsToRecycle","removeRows","getLastScrollPixel","lastPixel","getFirstScrollPixel","firstPixel","getIndecies","pixel","indexesToDraw","findIndexesToDraw","removeRowComponents","addRows","rowsToAdd","existingRowsSet","newRows","indexesToDrawSet","indexesNotToDraw","rowsToRemove","rowIndeciesSet","from","indexesViewportToDraw","first","last","result","createArrayOfNumbers","getIndexesToDraw","checkRowsToDraw","_indexStr","keepRowVirtualized","rowIndex","currentRow","isRowToDraw","bufferPixels","getRowBufferInPixels","scrollPosition","totalHeight","getHeight","suppressRowVirtualisation","isSuppressVirtualisation","pageFirstRow","getFirstRow","pageLastRow","getLastRow","firstRowIndex","getIndexByPosition","lastRowIndex","firstDiffers","lastDiffers","dispatchViewPortChangeEvent","viewPort","fromIndex","toIndex","onViewPortChange","getBufferSize","getDefaultHeight","refreshInProgress","isHeightAsNull","containerHeight","newData","newPage","suppressScrollToTop","isSuppressScrollOnNewData","stubNodeIndexes","_indexString","isLoading","axis","appendContainer","parentContainer","selectDropdown","getTop","getData","left","indexToDraw","_index","getTotalHeight","_viewPort","DropdownAxis","_position","controllerByIndex","abstractVirtualList","rowIndexes","insertAtIndex","appendElement","removeElement","removeIndex","indexToRemove","dropdown","createNoneOptionComp","createNoResultFoundComp","typedValue","matchWithoutCase","dropdownCreateNewOption","DropdownComponent","dropdownComp","dropdownElement","optionElements","list","List","createVirtualList","SelectAllController","updateSelectALLClassname","setNoOptionState","checkboxElement","getSelectAllCheckbox","deSelectAll","updateSelectALL","hasSelection","allOptions","selectedValues","SelectAllComponent","selectAllComp","role","selectAllCheckbox","DropdownCreateNewOptionController","createNewOptionDom","createIconRendererWrapper","DropdownCreateNewOptionComponent","createNewOption","createNewOptionTemplate","loaderWrapper","loader","createIcon","optionText","DropdownBodyContainerController","DropdownBodyContainerComponent","DropdownBodyContainer","DropdownHeaderContainerController","DropdownHeaderContainerComponent","DropdownHeaderContainer","selectall","DropdownFooterContainerController","DropdownFooterContainerComponent","DropdownFooterContainer","DropdownNoOptionController","DropdownNoOptionComponent","textDiv","DropdownLoadingController","setRenderDetails","items","DropdownLoadingView","optionRenderer","optionRendererElement","LoadingOptionRenderer","panel","listItem","circle","rectangle","createDropdownLoader","SelectDropdownCoreComponent","initializeSelect","createUserConfiguration","registerDefaultUserComponent","userComponentRegistry","SelectDropdownRootController","focusedExtraOption","focusedIndex","movePreviousOption","activeOption","newOptionComp","totalOptions","clearFocus","applyFocus","scrollIntoView","extraOption","SelectDropdownRootComponent","_appendTo","RootTemplate","RootownDropdowntTemplate","afterElementAttached","SelectDropdown","DIRECTION","popupList","instanceId","positionPopupByComponent","popupParentElement","documentElement","fallBackPositions","arrow","popUpElement","gapX","gapY","keepWithinBounds","sourceElement","alignSide","relativePosition","popupIndex","getPopupIndex","updatePosition","sourceRect","getBoundingClientRect","parentRect","getParentRect","flipPositionForAlign","calculateAllPopupPosition","calculatedPosition","calculatePositionByPosition","popup","alignedToElement","observer","ResizeObserver","positionPopup","relativeObserver","observe","getWrapperElement","updateArrow","finalLeft","finalTop","setArrowStyles","srcLeft","srcTop","srcRight","srcBottom","padding","arrowLeft","arrowTop","toolTipElement","findAutoPosition","setAlignedStyles","ARROW_OFFSET","positionsToTry","bestPosition","positionPopupUnderMouseEvent","calculatePointerAlign","mouseEvent","clientX","clientY","lastSize","clientWidth","ensureXYBoundaries","horizontal","vertical","updatePopupPosition","addPopup","childElement","positionCallback","anchorToElement","afterGuiAttached","rtl","popupClassName","hideFunction","wrapperElement","createPopupWrapper","removePopup","removePopupFromPopupList","hidePopup","popupElement","positioned","initialisePopupPosition","popupParentElementRect","targetRect","userFallbacks","spaceRightTarget","right","spaceLeftTarget","spaceAboveTarget","spaceBelowTarget","spaceNeededHorizontal","spaceNeededVertical","isSpaceAvailableRight","isSpaceAvailableLeft","isSpaceAvailableAbove","isSpaceAvailableBelow","fallbackMap","bottomLeft","bottomRight","topLeft","topRight","leftTop","leftBottom","rightTop","rightBottom","auto","center","under","above","over","isPositionAvailable","pos","fallbacks","fallback","spaces","directionWithMostSpace","calculatePopupPosition","spaceNeeded","isSpaceAvailibleAbove","calculateLeftOrRightPopupPosition","isSpaceAvailibleLeft","direction","isVertical","sizeProperty","anchorProperty","offsetProperty","scrollPositionProperty","docElement","popupParent","isPopUpElementIsStatic","offsetParent","documentRect","isBody","offsetSize","sizeOfParent","getAbsoluteHeight","getAbsoluteWidth","getElementRectWithOffset","popupEntry","disconnect","TimePickerDropdown","selectedValue","createDropdownConfig","positionParams","popupHandler","popupDestroy","_element","timeItems","getTimeItemsByType","createTimeOptions","param","padStart","getSelectedIndex","openDropdown","isElementWithinTimeDropDown","activeElement","CorePopupHandler","PopupHandler","PopupHandler$4","CalendarCoreComponent","buttonRenderer","ButtonRenderer","CalendarRootController","focusInputElement","blurInputElement","setId","userClassName","timeDropdownHanlder","CalendarRootView","timePicker","calendarNav","calendarBody","Calendar","ChipBeanConstants","getChipUtilityClass","ChipRootController","updateColor","registerToolTipListener","handleKeyEvent","disableTooltip","enableTooltip","onRemove","setHrefAttributes","href","hrefTarget","getTabIndex","setAriaReadOnly","getWrapperClassname","getChipStatus","getChipColor","chipStateHandler","createClickEventParams","getHref","getHrefTarget","wrapperClassname","getThumbnailRenderer","getThumbnailIconId","getUserThumbnailRendererParams","getRemoveIconId","getRemoveIconRenderer","getUserRemoveIconRendererParams","isLabelasDOM","updateBgColor","chipTooltipHandler","createToolTip","getChipLabel","destroyTooltip","prefixElem","chipThumbnail","fragment","createRange","createContextualFragment","suffixElem","chipRemove","ChipRootView","ChipUserComponentHandler","getThumbnailChipRendererDetails","getRemoveChipRendererDetails","ChipAPI","updateConfiguration","destroyComponent","getChipCtrl","ChipOptionHandler","thumbnailRenderer","userThumbnailRendererParams","thumbnailIconId","removeIconRenderer","userRemoveIconRendererParams","removeIconId","isSkipFocusWhenDisabled","skipFocusWhenDisabled","getRadius","radius","getBorderStyle","borderStyle","config","chipStatus","chipColor","labelasDom","ChipThumbnailController","createWrapper","renderDetails","chipAPI","iconID","ChipThumbNailView","thumbnailWrapper","thumbnailTemplate","ChipRemoveController","clases","ChipRemoveView","ChipStateHandler","chipOptionHandler","ChipIconRenderer","ChipIconTemplate","ChipControllerHandler","chipCtrl","n$1","r$1","DEFAULT_TOOLTIP_VALUES","TooltipStates","TooltipTriggerStates","TooltipBeanName","TooltipEvents","CustomTooltipHandler","interactionModeEnabled","isInteractingWithTooltip","isTooltipLocked","IDLE","tooltipInstanceCount","tooltipMouseTrack","tooltipDestroy","tooltipHideOnEscapeKey","tooltipHideOnMouseDown","isTooltipInteraction","tooltipTrigger","getTriggerState","delayForTooltipToShow","getTooltipDelay","delayForTooltipToHide","isTooltipMouseTrack","shouldAttachEvents","addEventListner","onMouseEnter","onMouseLeave","showTooltip","hideTooltip","HOVER","FOCUS","onFocusIn","onFocusOut","onMouseMove","onKeyDown","handleTooltipInteraction","interactiveTooltipTimeoutId","unlockTooltip","startHideTimeout","tooltipHoverPosition","getTooltipHoverPosition","tooltipShowTimeoutId","prepareToShowTooltip","lastMouseEvent","DISPLAYING","tooltipComponent","positionTooltip","shouldCancelOnMouseDown","setIdleState","lockTooltip","parentCompGui","tooltipGui","tooltipComponentElement","shouldCancelOnEscape","delay","isLastTooltipHiddenRecently","WAITING","lastHiddenTimestamp","getTooltipParams","afterTooltipRendererCallback","itemDetails","getTooltipRenderer","getTooltipRendererParams","getTooltipRendererDetails","tooltipInstanceCopy","getPopupParent","getDocumentElement","isRTL","getPopupClassName","addPopupRes","tooltipPopupDestroyFunction","tooltipMouseEnterHandler","onTooltipMouseEnter","tooltipMouseLeaveHandler","onTooltipMouseLeave","tooltipFocusInHandler","onTooltipFocusIn","tooltipFocusOutHandler","onTooltipFocusOut","dispatchShowEvent","addClassNameForPopover","classNames","generateClassName","getPosition","tooltipPopupHandler","getGapX","getGapY","isKeepWithinBounds","isRtl","getArrow","parentGui","forceHide","destroyTooltipComponent","getFadeOutDelayAfterInteraction","clearTooltipListeners","dispatchHideEvent","tooltipElement","listener","clearTimeouts","interactionHideDelay","getInteractionHideDelay","clearInteractiveTimeout","clearHideTimeout","getHideTooltip","tooltipHideTimeoutId","clearShowTimeout","getTooltipShowDelay","getTooltipValue","hideTooltipCallback","ToolTipHandler","setupTooltip","browserTooltips","isBrowserTooltipEnabled","updateTooltipText","setBrowserTooltip","createTooltip","refreshToolTip","TooltipOptionsHandler","globalEventHandler","getCallbackForEvent","browserTooltip","tooltipValue","tooltipInteraction","tooltipShowDelay","userRendererParams","forElement","ownerDocument","tooltipInteractionHideDelay","fadeOutDelayAfterInteraction","cancelOnEscape","cancelOnMouseDown","TooltipUserComponentHandler","TooltipAPI","destroyCalled","setTooltipValue","dispatchRefreshEvent","setBrowserTooltipEnabled","enabled","setTooltipInteraction","setTooltipMouseTrack","setTriggerState","triggerState","setTooltipShowDelay","tooltipDelay","setTooltipHideDelay","setTooltipRenderer","setTooltipRendererParams","setPopupParent","setDocumentElement","openByMouse","closeByMouse","open","close","tootipHandler","getTooltipHandler","TooltipPopupHandler","TooltipRenderer","tooltipDiv","setTooltip","TooltipControllerHandler","registerTooltipHandler","handler","tooltipHandler","Tooltip","TooltipCoreComponent","initializeTooltip","callBack","registryDefaultComponent","registerHandler","setApi","tooltipRenderer","tooltipOptions","ChipTooltipHandler","tooolTipConfiguration","openToolTip","ChipCoreComponent","removeChipRenderer","thumbnailChipRenderer","Chip","LinkBeanConstants","linkProperties","LinkOptionHandler","getTarget","getUndlerLine","underline","isTooltipEnabled","title","isEditable","editable","getClickCallback","getOnBlurCallback","updateAnchorText","isInEditorPanel","setInitailValue","initialValue","getInitailValue","onContextMenu","generateEmptyDom","formatValue","xCount","char","matchCount","formattedValue","iteration","getMutliLineUtilityClass","getFormattedText","line","word","charAt","getCapitalizedString","getTextUtilityClass","MULTI_TEXT_BEAN_NAME","MultilineControllerHandler","registerMultiline","textCtrl","getMultilineCtrl","MultilineRootController","targetElement","getAutoSize","MutationObserver","mutations","observerInstance","mutation","node","addedNodes","childList","subtree","setAutosize","getRootElement","elementViewportHeight","absoluteScrollDifference","scrollHeight","getCharacterCount","appendText","updateMinValue","getMinCount","updateMaxValue","maxCount","getMaxCount","updatePlaceholder","getPlaceHolder","updateAriaLabel","disable","resetValue","subElements","sub","hideLabel","hideDescription","showLabel","showDescription","multiTag","MutliLineRootComponent","componentHolder","minHeight","multiTags","textAreaElement","emptyDom","divWrapper","textInput","textHelper","multilinePropeties","MultilineOptionHandler","scrollPrevented","onError","errorMeta","bordered","setScrollPrevented","isScrollPrevented","onInput","helperTextRenderer","helperTextRendererParams","getInvalidHelperTextRenderer","invalidHelperTextRenderer","getInvalidHelperTextRendererParams","invalidHelperTextRendererParams","showTotal","ariaRole","setConfiguration","autosize","hasDynamicHeight","getKeepWithInRange","keepWithInRange","getClampValueOnBlur","clampValueOnBlur","MultilineStateManager","MultiLineController","addInputDestroyFunc","addAutosiseInputDestroyFunc","addAutoSizeInputEventListener","destroyInputEvent","destroyFunc","setRequired","assignValueBoundaries","minCount","formattedText","setAriaRequired","setAriaLabelledBy","setAriaDescribedBy","inputLength","setAriaInvalid","reportValidity","currentLength","eventMeta","isOutOfRange","isAutosize","textAreaTag","MultilineViewComponent","textarea","TextAreaTemplate","HTMLTextAreaElement","MultiLineUserComponentHandler","MultiLineAPI","getName","setFocusAtFirst","textareaElement","setSelectionRange","setFocusAtLast","selectAllText","tagName","newElement","cloneNode","RenderMultiLineController","spanELement","dataset","minLength","maxLength","RenderTextAreaTag","RenderMultilineViewComponent","MultilineCoreComponent","initializeText","RenderMultilineRootController","RenderMutliLineRootComponent","MultilineComponent","LinkRootController","getLinkWrapperElement","anchorElement","getAnchorElement","click","mouseDown","onFocusEdit","enableEdit","classType","mail","telephone","file","url","whatsapp","sms","facetime","skype","ftp","javascript","getURL","linkElement","multilineInstance","multilineConfiguration","normalizedValue","applyValueChange","editRefresh","textComponentValue","previousValue","updateTarget","isToolTipEnabled","enable","getLinkUtilityClass","aTag","rel","startsWith","getAnchorHref","download","linkWrapper","linkContainer","LinkRootView","isLabel","isDescription","anchorTextValue","HTMLAnchorElement","LinkAPI","getLinkCtrl","LinkControllerHandler","linkCtrl","LinkUserComponentHandler","LinkStateHandler","setURLFocuseState","_isFocused","setURLActiveState","_isActive","setURLDisableState","_isDisabled","setURLasOpenState","_isOpened","isURLOpened","opened","isURLActive","activated","isURLDisabled","isURLFocused","focused","LinkStateManager","LinkCoreComponent","NumberFormatter","formatter","adjusterHandler","isEmty","precision","getDecimalPrecision","useThousandSeparator","hasThousandsSeparator","customSeparator","getThousandSeparatorChar","decimalSeparator","getDecimalSeparator","isNullish","calculatePrecision","maximumFractionDigits","minimumFractionDigits","useGrouping","createNumberFormatter","parts","formatToParts","groupingPart","part","localeSeparator","string","replaceThousandSeparator","decimalPart","lastIndex","lastIndexOf","replaceDecimalSeparator","valueString","decimalIndex","normalizedLocale","normalizeLocale","Intl","NumberFormat","DecimalModule","version","moduleName","modelType","beans","CurrencyFormatter","currencyCode","getCurrencyCode","useCurrencyCode","getUseCurrencyCode","hideSymbol","isHideSymbol","symbolPosition","getSymbolPosition","currencySymbol","getCurrencySymbol","currencyDisplay","currency","trimmed","isNegative","core","setSybmol","formatString","inputString","symbolPart","symbol","numeric","CurrencyModule","PercentageFormatter","PercentageModule","NUMBER_BEAN_NAME","NumberControllerHandler","registerNumber","numberCtrl","getNumberCtrl","NumberAPI","_force","setFocus","_selectContent","subElement","validElements","getProperties","numberModel","numValue","getValueAsNumber","stringValue","getValueAsString","stringValueHasScientificNotation","parsed","numValueString","MAX_SAFE_INTEGER","setIsEmpty","commitChange","validate","onValueUpdate","increment","onIncrement","decrement","onDecrement","numberTooltipHandler","destroyToolTip","NumberOptionHandler","getValidator","validator","isAllowNull","allowNull","isAllowWrapAround","allowWrapAround","getPlaceholder","getTitle","getPrefixValue","prefix","getSuffixValue","suffix","isPrefixRenderer","isSuffixRenderer","getPrefixRenderer","prefixRenderer","getPrefixRendererParams","prefixRendererParams","getSuffixRenderer","suffixRenderer","getSuffixRendererParams","suffixRendererParams","getMin","MIN_SAFE_INTEGER","getMax","getStep","step","getShortStep","shortStep","getLongStep","longStep","decimalPrecision","isKeepWithinRange","keepWithinRange","isClampValueOnBlur","thousandsSeparator","thousandSeparatorChar","getSpinButton","spinButton","isAllowMouseWheel","allowMouseWheel","getCustomValidationMessage","customValidationMessage","getFormatter","getDecrementButtonSVGIconId","decrementButtonSVGIconId","getIncrementButtonSVGIconId","incrementButtonSVGIconId","getDecrementButtonRenderer","decrementButtonRenderer","getDecrementButtonRendererParams","decrementButtonRendererParams","getIncrementButtonRenderer","incrementButtonRenderer","getIncrementButtonRendererParams","incrementButtonRendererParams","onEnter","adjusterModel","isEnabledKeyboard","keyboard","getStartAdornmentValue","inputPrefix","getEndAdornmentValue","inputSuffix","shouldAllowComma","allowComma","getEventKey","eventKey","NumberUserComponentHandler","EVENT_NAME","NumberEventHandler","dotCount","allowedKeys","thousandSeparator","selectionStart","currentValue","escapeRegExp","allowedKeysWithDecimal","decimalSeparatorEscaped","thousandSeparatorEscaped","formatWithThousandSeparator","groupingSeparator","internalDecimalSeparator","valueWithoutSign","hasDecimalSeparator","integerPart","formattedInteger","inputValue","groupingSeparatorEscaped","internalDecimalSeparatorEscaped","internalThousandSeparator","internalThousandSeparatorEscaped","hasScientificNotation","cursorPosition","newPosition","allowedInputPattern","cleanedInputValue","decimalSeparatorIndex","consecutiveThousandSeparatorRegex","indexOfDash","mantissaPart","formattedNumericValue","scientificNotationMatch","eIndex","mantissa","exponent","displayValue","valueWithoutSeparators","scientificValue","syntheticInputEvent","Event","bubbles","cancelable","enumerable","onIncrementByLongStep","incrementByLongStep","onDecrementByLongStep","decrementByLongStep","onIncrementByShortStep","incrementByShortStep","onDecrementByShortStep","decrementByShortStep","getDotCount","setDotCount","NumericModel","isEmpty","isWithinRange","generateUniqueId","incrementValue","decrementValue","parsedValue","asString","isClapValueOnBlur","E","clamp","getMinValue","getMaxValue","numberValue","isFinite","minValue","onBoundaryExceeded","onMaxReached","onMinReached","isWrapAround","number","isWithinMax","isWithinMin","getValid","isIncrementDisabled","isDecrementDisabled","substr","NumericAdjusterModel","lastEmittedValueString","getPrecision","valuString","meta","previousValueString","currentValueString","normalizeValue","normalized","num","CustomEvent","detail","isFocused","scientificParsed","ModuleRegistry","register","module","__register","registerModules","modules","__registerModules","__unRegisterInstanceModules","instanceModulesMap","__getRegisteredModules","globalModulesMap","__isRegistered","__getInstanceRegisteredModules","__assertRegistered","reason","ModuleRegistry$3","KeyCodes","Any","KeyA","KeyS","KeyD","KeyF","KeyH","KeyG","KeyZ","KeyX","KeyC","KeyV","IntlBackslash","KeyB","KeyQ","KeyW","KeyE","KeyR","KeyY","KeyT","Digit1","Digit2","Digit3","Digit4","Digit6","Digit5","Equal","Digit9","Digit7","Minus","Digit8","Digit0","BracketRight","KeyO","KeyU","BracketLeft","KeyI","KeyP","Enter","KeyL","KeyJ","Quote","KeyK","Semicolon","Backslash","Comma","Slash","KeyN","KeyM","Period","Tab","Space","Backquote","Backspace","Escape","CapsLock","F17","NumpadDecimal","NumpadMultiply","NumpadAdd","NumLock","NumpadDivide","NumpadEnter","NumpadSubtract","F18","F19","NumpadEqual","Numpad0","Numpad1","Numpad2","Numpad3","Numpad4","Numpad5","Numpad6","Numpad7","F20","Numpad8","Numpad9","IntlYen","IntlRo","NumpadComma","F5","F6","F7","F3","F8","F9","F11","F13","F16","F14","F10","ContextMenu","F12","F15","Home","PageUp","Delete","F4","End","F2","PageDown","F1","ArrowLeft","ArrowRight","ArrowDown","ArrowUp","eventKeys","isMacOS","platform","ModifierKeys","capturingPhase","bubblePhase","getCaptureKey","isCapture","KeyEventHandler","resetListenerMapping","triggerBubblingCallback","ev","triggerCapturingCallback","addKonamiSequence","keyCode","fun","indeBounce","deBounce","addActiveKeys","clearActiveKeys","handleFocusChange","keyDownCapturingCallback","eventConfiguration","listenerConfig","comboListenerArr","parseActiveKeys","controlKey","keyComboArr","val","listeners","listenerMeta","repeatingCheck","sanitizeKeyCombo","executionParam","anyKeyCode","konamiKeyCombo","keyDownListener","konamiListeners","searchCallback","searchIndex","captureKey","eventConfigs","eventConfig","NumberKeyBoardShortCuts","adjusterList","registerElement","adjusterIndex","getAdjusterIndex","adjuster","keyBoardEventHandler","deRegisterElement","keyBoardShortCuts","numberEventHandler","keyEventManager","NumberStateManager","getNumberRootUtilityClass","NumberButtonController","applyStaticClasses","NumberButtonComponent","replaceWith","incrementButton","getIncrementRenderer","getIncrementRendererParams","decrementButton","getDecrementRenderer","getDecrementRendererParams","SpinButtonController","spinButtonTemplate","SpinButtonComponent","NumberInputController","numberAdjusterRef","registerAdjusterEventHandler","setPlaceholder","handleEventKey","allowedCharsRegex","sign","setFormattedValue","pasteData","clipboardData","normalizedPasteData","isNumeric","focusIn","setAriaValueMin","setAriaValueMax","setAriaValueNow","setNonFormattedValue","rawValue","escapedSeparator","pop","tempFormattedValue","formatValueFallback","toFixed","keyboardBehavior","adjusterEventHandler","NumberInputComponent","numberInputTemplate","getSuffixUtilityClass","SuffixController","suffixValue","getUserClasses","createSuffixRendererWrapper","createSuffixRendererParams","SuffixComponent","getPrefixUtilityClass","PrefixController","createPrefixRendererWrapper","createPrefixRendererParams","prefixValue","PrefixComponent","RenderingNumberInputController","formattedState","hasDecimal","hasPlus","hasMinus","zeroAfterDecimal","nonFormattedState","numericValue","userInputValue","userInputParts","formattedValueParts","fractionalUserInput","decimal","decimalValue","userFormattedValue","RenderingNumberInputComponent","getStartAdornmentUtilityClass","StartAdornmentController","startAdornmentValue","StartAdonrmentComponent","_rendererDetails","getEndAdornmentUtilityClass","EndAdornmentController","EndAdornmentValue","EndAdonrmentComponent","NumberTooltipHandler","tooltipTimeoutId","openState","NumberCoreComponent","initializeNumber","registeredModules","getRegisteredModules","registerModuleUserComponents","registerStackComponents","_configuration","beanList","moduleBeans","extractModuleEntity","moduleUserComps","userComponents","compMeta","Components","createComponentsList","moduleEntities","extractor","concat","moduleComps","passedViaConstructor","registered","allModules","mapNames","addModule","mod","currentModule","dependantModules","NumberController","addListeners","prefixComponent","getPrefixElement","suffixComponent","getSuffixElement","wrapperFocused","addPrefixAndSuffixClassNames","isvalid","htmlFor","incrementDisabled","decrementDisabled","registerAdjusterElement","getshouldGenerateEmptyDom","elem","getLabelElement","getDescriptionElement","customTemplate","fragmentElemet","createDocumentFragment","prefixElement","inputWrapper","suffixElement","helperTextElement","spinButtonTogetherTemplate","splitButtonTemplate","inputPrefixElement","inputSuffixElement","BasicTemplateWithoutButtons","NumberRootComponent","rerenderComponent","getContainerElement","LabelElement","descriptionElement","numberInputElement","containerElement","newTemplate","RenderingNumberController","setPrefix","setSuffix","insertBefore","numberContainer","numberInput","RenderingNumberRootComponent","PAGINATION_BEAN_NAME","logger","paginationDefaultConfiguration","initialPageNumber","initialPageSize","loop","dotJump","quickJumper","mode","shape","showFirstIcon","showPreviousIcon","showNextIcon","showLastIcon","onBeforePageChange","page","onAfterPageChange","onBeforePageChangeSize","pageSize","onAfterPageChangeSize","_obj","showShowTotal","dotJumpCount","hasTripleDot","siblingCount","boundaryCount","theme","displayText","pageSizeOptions","hasPageSizeChanger","firstIcon","lastIcon","previousIcon","nextICon","PaginationOptionHandler","getHelperText","getHelperTextRenderer","getHelperTextRendererParams","getOnBeforePageChange","getOnAfterPageChange","getOnBeforePageChangeSize","getOnAfterPageChangeSize","getDisplayText","getShowTotal","getShowShowTotal","getPageSize","getInitialPageSize","getInitialPageNumber","getPageSizeOptions","getBoundaryCount","getDotJumpeCount","hasQuickJumper","hasDotJumper","hasLoop","getSlot","getParentContainer","PaginationStateManager","PaginationControllerHandler","registerPaginationCtrl","PaginationCtrl","getPaginationCtrl","PaginationAPI","_key","goToNextPage","dataHandler","goToPreviousPage","goToLastPage","goToFirstPage","goToPage","updateCount","changePageSize","setPageSize","changePageSizeOptions","pageSizes","changePageSizes","getPage","PropertyNames","PaginationUserComponentHandler","getPaginationUtilityClass","PaginationButtonController","PaginationButtonComponent","PaginationDataHandler","pageNumber","defaultInitialPage","defaultInitialPageSize","isValidPageSize","isValidPage","totalPageNumber","getTotalPages","isNextPageAllowed","isPreviousAllowed","getSiblingArray","totalPage","boundaryArray","getBoundaryArray","boundaryArrayLength","getSiblingCount","siblingArrayCount","activePage","totalPageSetLength","leftBoundaryLast","rightBoundaryFirst","leftEllipsisPosition","rightEllipsisPosition","sibArr","startPage","maxBoundary","getLeftBoundaryArray","getRightBoundaryArray","leftBoundaryArray","rightBoundaryArray","maximumPage","totalCount","getCount","getInitialPage","getMode","getShape","hasFirstIcon","hasLastIcon","hasNextIcon","hasPreviousIcon","onBeforePageSizeChange","onAfterPageSizeChange","getNextPage","computedPage","currentpage","nextPage","getPreviousPage","previousPage","canProceed","totalPages","pageSizeArray","getPageSizeArray","baseOptions","filtered","unique","getButtons","combinedArray","pageSet","arr","next","current","lastElement","getFirstButtonIcon","createTextNode","getLastButtonIcon","getPreviousIcon","getNextIcon","nextIcon","PageSetController","PaginationPageSetComponent","setButtonComponent","_controller","elementArray","pages","pageArray","arraySetter","unshift","currentPage","array","buttonIndex","pageNum","isActivePage","buttonConfig","handlePageNavigation","pageButtons","leftBoundary","rightBoundary","siblingArray","mergedArray","newArr","missedArray","missingElements","emptyArray","ellipsisElements","leftEllipsisDom","rightEllipsisDom","nodeType","lastPageUI","nextPageUI","previousPageUI","firstPageUI","_ele","removeCommonElements","returnArr","addDomEventListener","boundaryDom","ELEMENT_NODE","HTMLButtonElement","ShowTotalController","setInitialTextContent","showTotalContent","showTotalCallBack","PaginationShowTotal","SELECT_BEAN_NAME","SelectOptionHandler","getDropdownPosition","dropdownPosition","isClearableButtonEnabled","getPlaceHolderRenderer","placeHolderRenderer","getPlaceHolderRendererParams","placeHolderRendererParams","helpertext","optionAsChip","isUseElipses","useElipses","getshowEllipsisAfter","showEllipsisAfter","isPlusIconEnabled","enablePlusIcon","showDropdownIcon","canGenerateEmptyDom","horizontalSpacing","verticalSpacing","getDropdownClassName","dropdownClassName","getSelectBoxIconRenderer","selectBoxIconRenderer","getSelectBoxIconRendererParams","selectBoxIconRendererParams","getEllipsesRenderer","ellipsesRenderer","updateEllipsesRendererParams","ellipsesRendererParams","getEllipsesRendererParams","getPlusIconRenderer","plusIconRenderer","getPlusIconRendererParams","plusIconRendererParams","isDropdownOpenPrevented","preventDropdownOpen","isImageRenderer","PopupHandler$3","getSelectRootUtilityClass","SelectInputController","chipCache","WeakMap","imageCache","containerWidth","totalUsedWidth","totalUsedHeight","registerInput","addDefaultSelectedOption","updateEllipsisClassName","selectInputHandler","registerSelectInput","inputfield","setAriaExpanded","updateEnablePlusIconProperty","updateTooltip","updateMultiSelectData","selectAPI","closeDropdown","updateSingleSelectData","clearSingleSelectData","initator","clearAll","renderPlaceHolder","trigger","updateUI","handlePlusIconComp","selectDataPart","deleteAllOptions","ellipsesDom","replaceChildren","isOptionAdded","hooksParams","destroyPlusIcon","renderPlusIcon","deleteAllChipInstance","renderSelectedChip","createSelectedChip","createCommmaSeparatedOptions","deleteOption","updateOption","optionIds","inputcontroller","getSelectInputWrapper","commaSeparatedOptions","resetOptions","hookParams","createChip","selectedValueRenderer","customOptionInstance","createOptionsParams","chipConfig","renderPlaceholder","chipInstances","getChipsInstances","chipInstance","toolConfig","getPlusIconDom","getPlusIcon","getDropdownInteractor","deleteChipInstance","getEllipsesIcon","ellipsisIcon","createChipDOM","rootController","getSelectRoot","resetContainerDimensions","plusIcon","addPlusIcon","ellipsisChipComp","addEllipsisChip","previousChipColor","chipCount","totalRenderedChips","getCachedDimensions","chipDOM","updateUsedHeightForFirstChip","ignoreEllipses","isEllipsesNeeded","fitsWithinContainer","createEllipsesRendererParams","updateUsedDimensions","remainingSelectedOptions","bgColor","selectInputWrapperDOM","selectInner","getSelectInput","optionsCount","ellipsesComp","createEllipses","ellipsisChip","updateChipInstance","imageElement","cacheImageDimensions","cachedDimensions","generateIdFromUrl","src","imageId","imageCacheEntry","image","computedStyle","parseInt","dimensions","setDimensions","complete","naturalWidth","onload","btoa","ellipseswidth","PlusIconController","registerEventHandlers","toggleDropdown","getPlusIconRendererDetails","reRenderIcon","PlusIconComponent","EllipsesController","getEllipsesRendererDetails","EllipsesComponent","transform","circle1","circle2","circle3","placeholderDom","rendererInstance","selectSpan","SelectInputComponent","selectInputElement","selectInput","createSelectSpan","updateSelectSpan","parentDOM","destroyEllipses","existingPlaceholder","_props","plusIconComp","SelectDataPart","chipsInstance","targetOption","getChipsInstance","optionId","reOrderOptions","OptionIdsOrder","ControllerHandler","registerSelectRoot","selectRootCtrl","registerSelectContainer","selectContainerCtrl","getSelectContainer","registerSelectInputWrapper","selectInputWarpperCtrl","selectInputCtrl","selectInputController","getSelectDropdownInteractor","registerSelectBoxIcon","SelectBoxIconCtrl","selectBoxIconCtrl","getSelectBoxIcon","ControllerHandler$1","SelectInputAPI","handleClickBound","addCloseDropdownEvent","removeCloseDropdownEvent","closeDropdownWithoutCellFocus","isDropdownOpened","isDropdownOpen","clearAllOptions","dropdownInteractor","getInstance","selectConfigAPI","optionModel","selectAllOption","unselectedOptions","optionsToAdd","isLastOption","deselectAllOption","hadSelections","getSelectedIDs","getSelectedChipDoms","chipDoms","enableListener","disableListener","handlerCloseDropdown","composedPath","getPlusIconDOM","setSelectBoxIcon","IdsOrder","optionsIds","SelectDropdownInteractor","addPosition","getDropdownClassname","getModel","SelectInputWrapperController","resizeObserver","registerKeyboardEvents","setClearAllComp","clearAllComp","selectDropdownInteractor","selectInputWrapper","useEllipsisPropertyUpdated","enableResizeObserver","disableResizeObserver","selectdropdownInteracter","focusDropdown","isClearable","clearallComp","SelectboxIconComponent","gBg","gTracer","gIcon","renderClearAll","SelectInputWrapperComponent","SelectConfigAPI","setAppendTo","selectApi","isSelectedOptionIncluded","_selectedOption","SelectStateManager","SelectUserComponentHandler","getIconRendererDetails","SelectContainerController","compGui","SelectContainerComponent","SelectBoxIconController","updateDropdownIcon","selectboxIconClasses","destroyChildElement","SelectCoreComponent","SelectRootController","addErrorState","applyFocusClass","actions","hidePrefix","hideSuffix","showPrefix","showSuffix","getSelectContainerElement","SelectRootComponent","labelEl","selectContainer","Select","SelectComponent","SizeChangerController","setInitialSizeChanger","valueStr","currentSize","selectConfiguration","pageSizeStr","uiHandler","PaginationPagesizeChanger","QuickJumperController","jumpInput","initialRenderer","updateQuickJumperState","maxPage","PaginationQuickJumper","SubElementController","PaginationSubElement","ButtonRenderer$2","PropertyName","PaginationCoreComponent","initializePagination","PropertyName_BUTTON_RENDERER","PaginationRootController","rootClasses","PaginationRootComponent","templateOptions","showTotalEl","RATING_BEAN_NAME","RatingControllerHandler","ratingCtrl","getRatingCtrl","RatingAPI","ModuleRegistry$2","RatingOptionHandler","maxValue","getIconRenderer","iconRenderer","getIconRendererParams","iconRendererParams","onBeforeChange","onHover","onLeave","shouldIgnoreEmptyDOM","getRatingRootUtilityClass","getRadioUtilityClass","RatingContainerController","radioClasses","RatingContainerComponent","property","RatingContainerTemplate","RATING_EVENTS","RatingInputWrapperController","getCounterValue","addEvents","isChecked","isHoverable","setCounter","removeClassNames","removeHoverClassNames","handleClick","handleMove","setHoverValue","isRightClickByEvent","ratingEventHandler","RatingInputWrapperComponent","labelContainer","radioInput","ratingSVG","RatingInputWrapperComponentTemplate","RatingInputController","RatingInputComponent","ratingInput","RatingInputComponentTemplate","RatingSVGController","RatingSVGComponent","cssText","RatingUserComponentHandler","RatingModel","hoverValue","delta","updatedValue","isInRange","RaitngEventHandler","onMouseOver","ratingModel","RatingStateManager","RatingCoreComponent","initializeRating","KeyboardEventManager","registeredElements","getNumberIfPressed","unregisterElement","RatingRootController","keyboardManager","handleMouseOver","handleMouseLeave","handleKeyDown","handleFocus","handleBlur","BasicTemplate","RatingRootComponent","getReggexPattern","patterns","sentence","RenderInputWrapper","TEXT_BEAN_NAME","TextControllerHandler","registerTextCtrl","getTextCtrl","PHONE_NUMBER_FORMATS","validateAndFormatPhoneNumber","digits","formatDigits","digitIndex","removeSpecialCharsFromNumber","TextRootController","updateRTL","valueUpdater","regex","getPattern","customFormat","getCustomPattern","setRootValue","addUserClass","updateTextValue","updatePrefix","updateSuffix","textContainer","validState","TextRootComponent","inputTags","isShowErrorState","pR","sR","configArray","TextOptionHandler","showCount","setMaxCount","customPattern","TextStateManager","isValuePresent","TextUserComponentHandler","TextInputController","placeHolder","setCustomValidity","TextInputComponent","TextInputTemplate","TextAPI","RenderingTextInputController","RenderingTextInputComponent","TextCoreComponent","RenderingTextRootController","RenderingTextRootComponent","renderTags","RenderRootTemplate","DATETIME_BEAN_NAME","DATE_TIME__BEAN_NAME","DateTimeUserComponentHandler","exports","LTS","LT","LL","LLL","LLLL","zone","offset","afternoon","milliseconds","SS","SSS","ss","mm","HH","hh","DD","Do","ww","MM","MMM","MMMM","YY","YYYY","ZZ","formats","parser","exec","hours","customParseFormat","parseTwoDigitYear","minutes","seconds","week","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","DATE_TIME_CUSTOM_EVENTS","INTERNAL_EVENTS","patternMap","MONTH_MAP","J","DateTimeModel","formatArray","patternArray","monthIndex","millisecond","activatePlaceholder","monthChanged","setCompID","assignDate","selectedField","fieldName","changeHourCycle","updateFormat","compID","getCompID","selectedDateTime","currentDateTime","getFormatArray","changedDate","isActivatePlaceholder","setActivatePlaceholder","getFormattedTime","getFormatedDate","userFormat","getValueFormat","hasHour","hasMinute","hasSecond","hasMeridian","finalFormat","formatToUse","getSelectedDateTime","setSelectedField","getDateAsDayjs","getDateAsDayjsForCurrentDate","source","hookInitiator","configFormat","hasHH","hashh","incrementDate","incrementMonth","incrementYear","incrementHour","incrementMinute","incrementSecond","incrementMillisecond","tempDateTime","isWithinMaxRange","isWithinMinRange","changeMeridian","currentHour","newHour","decrementDate","decrementMonth","decrementYear","decrementHour","decrementMinute","decrementSecond","decrementMillisecond","getCallbackName","setCurrentDateTime","dateTime","setDateValue","dateValue","monthValue","yearValue","hourValue","minuteValue","setSecond","secondValue","setMillisecond","changeSelectionToForward","changeSelectionToBackward","updateDateTime","navigateToLeft","navigateToRight","navigateToNextDate","navigateToNextMonth","navigateToNextYear","navigateToNextHour","navigateToNextMinute","navigateToNextSecond","navigateToNextMillisecond","getCurrentMillisecond","navigateToPrevDate","navigateToPrevMonth","navigateToPrevYear","navigateToPrevHour","navigateToPrevMinute","navigateToPrevSecond","navigateToPrevMillisecond","getFormatMap","getDefaultPattern","getUpdatedPattern","getSelectedField","getCurrentFullDateTime","getDateFormat","formatDayJs","dateString","parseAndSetDateFromString","parsedDate","getSelectionPatterns","selectionPattern","currentIndex","getSelectionPattern","getCustomFormats","getValueAsTimeStamp","setMonthChanged","isAllowSpecialKeys","separatorKeys","meridianKeys","allowManualInput","isAllowManualInput","isSeparator","allowSpecialKeys","field","operation","PopupHandler$2","DatePickerInteractor","destroyCalendar","createCalendar","clearValue","calendar","calendarParams","getDatePickerAppendTo","getDateTimeFieldController","getShowTimePicker","stateUpdate","calendarElement","getDateInputWrapper","getHorizontalSpacing","getVerticalSpacing","setState","onPickerOpen","DateTimeApi","datePickerInteractor","showDatePickerIcon","openPicker","closePicker","showFormatAsPlaceholder","getDateTimeRootUtilityClass","dateTimeEventHandler","enableStepperButtons","DateTimeKeyBoardShortCuts","onChangeSelectionToBackward","onChangeSelectionToForward","onClosePicker","KeyEventManager","DateTimeSelectionService","isMakingSelection","findFieldAtPosition","findFieldRange","fieldType","validateSelectionRange","valueLength","validStart","applySelectionToElement","waitForDOMUpdate","validEnd","requestAnimationFrame","selectFieldAtCursorPosition","dateTimeParts","fieldInfo","selectCurrentField","selectionField","range","isSelectionInProgress","DATE_INPUT_THRESHOLDS","DateTimeInputKeys","DateTimeCombinationKeys","FIELD_PATTERNS","SEPARATOR_CHARS","PlaceholderEngine","formatProvider","baseFormat","displayFormat","tokens","tokenIdCounter","createTokensFromFormat","displayFieldMap","displayFields","parseFormatFields","segment","baseChars","baseIndex","fieldIndex","separatorIndex","basePattern","extractPattern","displaySegment","getDisplayValueForField","token","generateTokenId","rawFormat","isFilled","baseSeparator","extractSeparator","displaySeparator","getDisplaySeparator","separator","getDisplaySeparatorFromString","separatorPosition","chars","currentSeparatorPos","fields","startIndex","patternChar","lastToken","now","handleEvent","selection","fillField","clearField","handleBackspace","handleDelete","resetAllFields","renderedValue","render","calculateCursorPosition","isAllSelected","totalLength","calculatePositions","currentPos","getTokens","getState","editableTokens","filledCount","isComplete","base","DateTimeFormatProviderAdapter","getFieldFormat","customFormats","getFieldValue","formatPattern","getFieldValueFromModel","getter","SELECTEDFIELD_NAME","DateTimePlaceholderManagerIntegration","lastMonth","skipSyncOnGetPlaceholder","engine","syncInitialValueFromModel","changeCustomFormat","syncInputValueWithEngine","syncFromInputToModel","getFormattedValueForField","tokenType","mapFieldNameToTokenType","checkAndUpdateModelState","resetPlaceholder","change","syncInputValue","calculateTokenPositions","built","isPlaceholderFormat","mapTokenTypeToFieldName","getDefaultValueForParsing","SELECTEDFIELD_NAME_MONTH","SELECTEDFIELD_NAME_DATE","SELECTEDFIELD_NAME_YEAR","SELECTEDFIELD_NAME_HOUR","SELECTEDFIELD_NAME_MINUTE","SELECTEDFIELD_NAME_SECOND","SELECTEDFIELD_NAME_MERIDIAN","syncModelToEngine","fieldValue","firstChar","every","changeFormatForSelectedField","isTimeField","elementSelectionStart","elementSelectionEnd","selectionEnd","positionedToken","fieldRange","getFieldRangeFromPattern","hasMonthchanged","setInputElement","SELECTEDFIELD_NAME_MILLISECOND","findSegment","patternRange","findSegmentInPlaceholder","SELECTEDFIELD","DateTimeInputHandler","isProcessing","isComposing","lastTypedNumber","pendingOnChange","ENTER","TAB","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","HOME","END","E_KEY","MINUS","PLUS","CONTROL","META","PERIOD","combinationAllowedKeys","X","V","monthMaping","ja","ma","mar","ap","may","ju","jun","jul","au","deregisterElement","placeholderManager","keyDownHandler","compositionStartHandler","compositionEndHandler","pasteHandler","onPaste","captureSelection","checkAllowedKeys","handled","DELETE","isAllContentSelected","BACKSPACE","handleBackspaceForSelectedField","handleFieldEditing","pastedText","validateStateSync","restoreSelection","selectionService","domValue","modelValue","modelValueStr","lastSelectedField","editDate","editMonth","editYear","editHour","editMinute","editSecond","editMeridian","debouncedOnChange","yearLength","maxHour","roundedMinute","el","CalendarIconController","registerListeners","CALENDAR_ICON_INSTANCE","createOrDestroyCalendar","DateTimeInputController","dateAdjusterRef","adaptiveFormatActive","isSettingValue","isSettingPlaceholder","isProcessingEvent","lastRenderedValue","setID","safeSetValue","inputHandler","makeOnClickSelection","makeSelection","setValueOnDatePicker","shouldOpenPickerOnFocus","isElementWithinDatePickerIcon","datePickerId","datePickerElement","getElementById","isTimeDropDown","isElementWithinTimePicker","shouldUseAdaptiveFormat","normalize","adaptiveModeEnabled","hasSelectedDateTime","currentDomValue","shouldUpdatePlaceholder","placeholderValue","shouldShowFormatAsPlaceholder","configuredPlaceholder","fallbackError","hasPlaceholder","shouldAutoFillFormatOnFirstInput","DateTimeInputComponent","daetTimeInputTemplate","classesToAdd","DateTimeOptionHandler","getTimezone","timezone","isAutoFocus","autoFocus","isDisablePast","disablePast","isDisableFuture","disableFuture","decrementRenderer","incrementRendererParams","decrementRendererParams","datePickerAppendTo","valueFormat","splitArray","getTimestamp","timestamp","autoFillFormatOnFirstInput","getCalendarIcon","showDatePicker","openPickerOnFocus","DateTimeStateManager","DateTimeControllerHandler","registerDateTimeFieldController","dateTimeCtrl","DateTimeButtonController","DateTimeButtonComponent","DateTimeEventHandler","parsedKey","CalendarIconView","rect1","rect2","rect3","rect4","CalendarIconViewTemplate","DateTimePickerStateManager","dateOpenState","DateTimeReadonlyInputController","DateTimeReadonlyInputComponent","CalendarIconReadonlyController","CalendarIconReadOnlyView","gLayer","gFill","DateTimeCoreComponent","DateTimeRootController","isElementIsFocused","setFocusOut","timeDropDown","calendarIcon","dateTimeContainer","dateInput","spinBtn","calendarIconElement","DatePickerTemplate","DateTimeRootView","dateInputWrapper","dateInputElement","DateTimeReadonlyRootController","templateElement","dateContainer","DateTimeReadonlyRootView","TOKEN_BEAN_NAME","DefaultDataMapping","imageURL","removable","TokenOptionHandler","getDataMapping","dataMapping","getMaxAllowedValues","maxAllowedValues","Infinity","getTokenRenderer","tokenRenderer","getTokenEditor","tokenEditor","getDataByValue","getDefaultColor","defaultColor","getDefaultImageURL","defaultImageURL","getSeparators","separators","shouldStopPropagation","getDocument","tooltipRendererParams","getTooltipSelector","tooltipSelector","getTooltopShowDelay","isTooltipTrackMosue","tooltipTrackMouse","isCreateTokenOnInValidData","createTokenOnInValidData","getSearchValue","searchValue","isTokenEditable","getTokenContentType","getDropdownEvents","dropdownList","events","getEvents","isDropdownNeeded","updateDisable","getSearchMinKeyword","minKeywordLength","getSearchHighlightKeyword","highlightKeyword","isAcceptNewValues","TOKEN_OPTION_EVENT","TOKEN_EVENT","TokenAPI","getSelectedValueAsString","tokenDataStore","getSelectedTokenAsValue","getSelectedToken","getSelectedTokenData","tokenControllerHandler","addTokens","setTokenData","removeTokens","ids","removeTokenOptions","clearAllTokens","getTokenCount","getValidTokens","updateTokens","dispatchPropertyChangedEvent","destroyToken","getToken","tokenOption","getTokenOption","setDataSource","Optional","TokenRendererHandler","tokenControllers","getControllers","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","REGEX","_nodeId","_clockseq","byteToHex","stringify","uuid","TypeError","_lastMSecs","_lastNSecs","v1","buf","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","instanceIdSequence","TokenOption","validationState","getIDFromMapping","uuid1","getID","getInstanceId","getMappedValue","getImageURL","isTokenDisabled","getDefaultTokenContentType","updateData","mappedKey","getUpdatedData","changed","async","_options","updateWidth","getWidth","isValidated","setValidationState","isTokenRemovable","dataMap","order","addData","removeData","orderId","hasData","getAllData","insertDataAfterId","existingId","newId","insertDataBeforeId","deleteDataAfterId","deleteId","deleteDataBeforeId","getDataInRange","getNextId","getPreviousId","getFirstId","getLastId","getOrders","TokenDataStore","tokenOptions","GenericDataStore","targetId","firstLoad","isMaxAllowedValuesReached","optionData","isValidData","tokenValueHandler","validateValue","triggerHook","tokenAddParams","hookManager","executeHook","executeOnHookWithoutCallback","getAllTokenOptions","filteredIDs","tokenRemoveParams","datas","updateTokenOption","tokenUpdateParams","getTotalToken","getNextTokenId","getPreviousTokenId","allTokens","getSelectedTokenIds","TokenNavigationHandler","focusedId","lastFocusedId","selectedIds","getFocusedToken","navigateToToken","dispatchFocusEvent","navigateToNextToken","isTab","navigateToPreviousToken","triggerEvent","previousId","setFocusedToken","navigateToFirstToken","navigateToLastToken","getLastFocusedToken","isTokenFocused","isTokenSelected","getSelectedTokens","TokenUserComponentHandler","getTokenRendererDetails","tokenOptionHandler","getTokenEditorDetails","definitionObject","selectorFunction","getComponentSelector","selector","defintion","TokenCSSRegistry","TokenClassNameGenerator","isActive","TokenRenderer","tokenElement","outerContainer","removeButton","svgElem","gElem","registerRemoveElement","registerTooltip","ModuleRegistry$1","TokenEditHandler","startEditing","startedEdit","isRemovable","getTokenItem","editorParams","createEditorParams","toggleEditClassName","setEditing","setEditorDetails","stopEditing","cancel","isEditing","newValueExists","takeValueFromEditor","saveNewValue","cellEditor","getEditor","submit","refreshToken","onTokenFocused","stopEditingAndFocus","editClassName","classNameGenerator","setSuppressRefresh","tokenComp","noValueResult","isCancelAfterEnd","TokenEditor","updateInputWidth","visibility","whiteSpace","font","letterSpacing","fontSize","textWidth","KeyboardShortcutRegistry","registerShortcut","action","unregisterShortcut","executeShortcut","shortcutAction","actionRegistry","executeAction","ActionRegistry","registerAction","actionName","actionCallback","unregisterAction","getAction","_setDomChildOrder","eContainer","orderedChildren","correctDomAtIndex","actualDomAtIndex","getControllerFromTargetElement","TokenItemController","tokenItem","tokenTooltip","generateID","addDomData","addValidationClassName","addRemovableClassName","addDisabledClassName","addColorProperty","addEditableClassName","suppress","suppressRefreshToken","isSuppressRefresh","editing","forceRefresh","valuesDifferent","updateAndFormatValue","compareValues","processPrintableCharacter","isPrintableChar","editHandler","onMouseEvent","onDoubleClick","tokenNavigation","focusedClassName","DOM_KEY_TOKEN_CTRL","createTokenRendererParams","self","itemId","tokenTooltipHandler","validationClassName","isToeknDisabled","nonEditClassName","TokenKeyBoardNavigation","navigateNextToFocus","navigatePreviousToFocus","dataClearOnBackspace","openEditor","inputController","getTokenInputControllersFromTargetElement","selectedTokens","lastId","getControllersFromTargetElement","tokenId","tokenEditHandler","KeyboardShortcuts","shortcut","TokenValueHandler","getDataByValueCallback","valueKey","imageURLKey","colorKey","TokenComponentName","TokenContainerEventHandler","addKeyBoardListener","addMouseListener","addFocusListener","processMouseEvent","keyBoardShortCutRegistry","_isEventFromPrintableCharacter","TokenInnerController","controllers","baseClassName","tokenClassNameGenerator","createInputComponent","TokenInputComponentClass","tokenInputComponent","createTokenControllers","setTokenControllers","prevControllers","tokenControllerExist","tokenController","previousController","TokenItemComponent","tokenItemController","tokenRendererElement","cellEditorGui","detach","createCellEditorInstance","destroyEditor","afterCellEditorCreated","editingCancelledByUserComp","isCancelBeforeStart","addInLineCellEditor","parentValueElement","TokenInnerComponent","tokenComps","attachTokenInput","tokenItemControllers","CellComponent","cellController","newCellComponent","removeCellComponents","destroyCells","ensureDomOrder","tokenInputElement","detachTokenInput","elementsInOrder","cellComp","TokenControllerHandler","ctrlType","ctrl","TokenTooltipHandler","createTooltipParams","HookEventsValues","HookManager","hooks","dropdownEvents","addHook","removeHooks","hookNames","hookName","isValidHook","hasHook","getHook","beforeHook","afterHook","middleWare","metas","executeBeforeHook","executeAfterHook","executeOnHook","returnValue","hookCallback","executeAllHooks","beforeHookName","onActionHookName","afterHookName","beforeCallback","HookManager$1","PopupHandler$1","DropdownModel","getFooterRendererParams","footerRendererParams","getFooterRenderer","footerRenderer","getHeaderRendererParams","headerRendererParams","getHeaderRenderer","headerRenderer","getBlockSize","blockSize","getDataSource","dataSource","getTabs","tabs","getActiveTab","activeTab","getLoadingCount","loadingCount","getOptionRenderer","getLoadingOptionRenderer","loadingOptionRenderer","getValues","isDisableOnSelection","disableOnSelection","selectedNodes","onBeforeDeSelect","onAfterDeSelect","onBeforeTabChange","onAfterTabChange","getTooltipAppendTo","getNotFoundRenderer","notFoundRenderer","isInfiniteScroll","infiniteScroll","onSearchChange","checkCondition","versionArr","condition","versionArr1","versionArr2","isEqual","operatorMatch","operator","bound","boundArr","isLessThan","isGreaterThan","isLessThanOrEqual","isGreaterThanOrEqual","runVersionChecks","_module","isValidModuleVersion","dependencyVersion","versionList","versionItem","andConditions","satisfiesAll","ListUserComponentHandler","getFooterRendererDetails","getHeaderRendererDetails","getOptionRendererDetails","getOptionLoadingRendererDetails","getNotFoundRendererDetails","ListOptionHandler","getItemHeight","getSearchMinKeyWord","getTooltipValueCallback","HeaderFooterCoreComponent","getController","HeaderFooterCoreController","getRendererDetails","LIST_BEAN_NAME","HeaderController","addClassNames","HeaderComponent","FooterController","FooterComponent","ListCSSRegistry","ListClassNameGenerator","getClass","getTabClassName","TabOptionController","addActiveTabClassName","addValue","setActiveTabId","panelID","tabDataPart","addOrRemoveCSSClassname","isActiveTabId","TabContainerController","addTabOptions","tabOptions","getTabOptions","tab","setTabOptionControllers","headerClassName","getHeaderElement","leftArrowElement","getLeftElement","leftArrowNavClassName","leftArrowClassName","rightArrowElement","getRightElement","rightArrowNavClassName","rightArrowClassName","centerElement","getCenterElement","centerClassName","rightElement","leftElement","scrollTab","checkScroll","scrollBy","behavior","isFullyVisible","scrollWidth","scrollLeft","TabOptionComponent","TabContainerComponent","centerContainer","headerElement","prevComponents","destroyTabs","headerContainer","leftArrow","leftArrowSVG","createLeftSvgElement","rightArrow","rightArrowSVG","createRightSvgElement","TabPanelDataPart","activeTabPanelId","getActiveTabId","tabId","createTabChangeHookParams","newTabId","oldTabId","ListOptionController","onSelectionChanged","listSelection","removeSelectedValues","suppressEventTrigger","addSelectedValues","createOptionRendererParams","dataStore","loaded","getHighlightKeywordElement","highlightKeywordCallback","keyword","keywordLower","keywordIndex","currentText","currentBold","flush","bold","fontWeight","getSearchQuery","getLength","ListBodyContainerController","loadingControllers","listDataStore","destroyNoOptionFoundRenderer","getLoadingRows","rows","setControllers","nodes","destroyLoadingControllers","attachItemNotFoundComponent","destroyControllers","query","setNoOptionFoundRendererDetails","ListOptionComponent","ListBodyContainerComponent","loadingComponents","notFoundElement","loading","loadingComponent","OptionRenderer","labelTextDiv","highlightDom","ListSelection","ListSelection_1","selectionHookWrapper","ListSelectionHookWrapper","getSelectedValues","filteredValues","valuesToRemove","createSelectionHookParams","getRowById","listHookMeta","ListApi","selectOptions","hookMeta","deSelectOptions","isOptionSelected","setSearch","setSearhQuery","NotFoundRenderer","card","createNoResultPanel","ImageTextOptionRenderer","imageContainer","ListTooltipHandler","ListOptionNode","getBeanInstanceByName","constructData","getDefaultType","ListServerDataStore","searchQuery","pending","allRows","filteredRows","loadedRows","resetCache","applyFilterAndSort","fetchAll","createLoadedRows","fetchParams","constructFetchParam","updatePending","getTabId","onSuccessData","onFailureData","filteredData","ListCacheBlock","startRow","endRow","getStartRow","getEndRow","getRow","fetchBlock","updateHasMore","hasMore","getRowByID","ListDataStore","blockCount","blocks","blocksize","createBlock","blockId","getRowTop","newBlock","isHasMore","ListCoreComponent","initializeToken","registerModuleComponent","listcontext","ListContainerController","addTabIndex","addDefaultClassName","ListContainerComponent","header","footer","tabContainer","bodyContainer","userParams","DropdownInteracter","setSelectedOptions","removeSelectedOptions","navigateNext","navigatePrevious","createDropDownConfiguration","enableTab","Dropdown","interacter","dropdownModel","positionDropdown","popupDestroyFucn","positionHandler","TokenImageRenderer","TokenCoreComponent","registerKeyBoardShortCuts","tokenContext","keyBoardShortCut","TokenRootController","disabledClassName","TokenRootComponent","TokenInputController","initalized","tokenValue","createValidatedToken","searchMinKeyword","focusoutHandler","onInputFocused","setAutoFocus","resetInput","addOrRemovePlaceHolder","setInitValue","tokenOptionsManager","tokenStore","hasAnyToken","valueValidator","tokenDatas","splitValueBySeparators","isDataValid","shouldCreateTokenOnInValidData","tokenData","DOM_KEY_TOKEN_INPUT_CTRL","TokenInputComponent","TokenModule","RADIO_BEAN_NAME","getRadioRootUtilityClass","RadioInputWrapperController","updateDefaultSelectedOption","setName","getRadio","radioOptionManager","radioElement","radioLabelElement","getRadioLabelElement","getItem","addInputListener","destroyInputListener","defaultSelectedId","getDefaultSelected","radioInputComp","setAriaChecked","inputWrapperComp","radioRenderControllers","lastSelectedOption","getSelectedOption","lastSelectedController","lastSelectedRadio","isShowAsBlock","getComp","RadioRenderControllers","updateRadios","createRadioControllers","radioControllers","controllerExist","radioItem","destroyAllControllers","RadioRootController","RadioHandler","registerRadioRootController","nextOption","getNextOption","newSelectedController","newSelectedRadio","previousOption","getPreviousOption","layout","getLayout","RadioRootComponent","containerEl","helperTextEl","RadioStateManager","RadioUserComponentHandler","RadioAPI","getSelectedValue","disableOption","getRadioRootController","needsRerender","existingOptionsMap","newOpt","existingOpt","updateOptions","reorderOptions","getRadioContainerController","rerenderOptions","getOptionById","setDefaultSelected","RadioOptionHandler","newOptions","optionsToRemove","optionToRemove","setOptions","defaultSelected","setLayout","showAsBlock","registerContainerController","RadioContainerController","RadioOption","optionRendererParams","getCustomData","customData","hidden","radioEventHandler","RadioOptionManager","_id","newDataStore","incomingIds","existingOption","radioRenderController","setRadioControllers","getRadioInputWrapperTemplate","radioInputWrapper","RadioInputWrapperComponent","custom","radio","RadioContainerComponent","radioComps","setRadioController","containerComp","_parentComp","RadioCustomInputController","RadioCustomInputComponent","RadioCoreComponent","DialogBeanName","DialogRenderer","dialogElement","setContent","content","DialogUserComponentHandler","componentsBeingInstantiated","getDialogRendererDetails","reject","initPromise","cleanupPromise","promise","catch","DialogControllerHandler","dialogHandler","registerDialogHandler","getDialogHandler","DialogEvents","DEFAULT_DIALOG_VALUES","DialogStates","DialogPositions","DialogOptionsHandler","getOnOpen","onOpen","getOnClose","onClose","getOnBeforeOpen","onBeforeOpen","getOnBeforeClose","onBeforeClose","getOnEscape","onEscape","getContentRenderer","contentRenderer","contentRendererParams","getModal","modal","getCloseOnEscape","closeOnEscape","getAriaDescribedBy","ariaDescribedBy","getPreventCloseOnOverlayClick","preventCloseOnOverlayClick","CustomDialogHandler","dialogComponentElement","dialogInstanceCount","dialogOverlay","isCreatingInstance","_isDispatchingCloseEvent","hideDialog","getOnKeydown","showDialog","isDialogBeingCreated","OPENING","getDialogParams","currentInstanceCount","afterDialogRendererCallback","_error","dialogInstanceCopy","dialogComponent","cleanupComponent","dialogContainer","zIndex","boxShadow","maxWidth","maxHeight","overflow","minWidth","addModalOverlay","dispatchOpenEvent","overlay","removeModalOverlay","CLOSING","cleanupDialogComponentWithoutEvents","dialogPopupDestroyFunction","dispatchCloseEvent","hideDialogCallback","destroyDialogComponent","DialogHandler","customDialogHandler","isInitialized","isShowingDialog","handleDialogShown","openEvent","handleDialogOpen","DialogAPI","DialogPopHandler","DialogCoreComponent","initializeDialog","dialog","dialogRenderer","dialogOptions","DATE_RANGE_PICKER_BEAN_NAME","DATE_RANGE_FIELD_BEAN_NAME","DATE_RANGE_PIKCER_CUSTOM_EVENTS","DateRangePickerRootController","registerDateRangePickerFieldController","shouldRenderHeaderComponent","getHeaderTitle","shouldRenderFooterComponent","shouldImmediateCommit","shouldRenderClearButton","DateRangePickerRootView","headerComponent","fromList","toList","DateRangePickerRootTemplate","DateRangePickerUserComponentHandler","DateRangePickerApi","getDateRangePickerFieldController","_properties","DateRangePickerHeaderController","headerTitle","DateRangePickerHeaderComponent","DateRangePickerHeaderTemplate","DateRangePickerFromController","createDatePicker","setMaximumDate","destroyPicker","fromTitle","getFromLabel","datePickerConfiguration","createDatePickerConfiguration","datepicker","dataManger","onDateRangeChange","getFromDate","getToDate","getToValue","setFromDate","DateRangePickerFromComponent","DateRangePickerFromTemplate","DateRangePickerToController","setMinimumDate","toTitle","getToLabel","getFromValue","setToDate","validationParams","validateDateRange","immediateCommit","areBothDatesSelected","DateRangePickerToComponent","DateRangePickerToTemplate","DatePickerRangePickerDataManager","fromDate","constraints","initialized","changeCallbacks","minDaysToSelect","getMinDaysToSelect","maxDaysToSelect","getMaxDaysToSelect","initialConstraints","minRange","maxRange","setConstraints","_q","_p","_o","to","_t","_s","_r","getDateRange","previousRange","emitDateRangeChange","setDateRange","clearDateRange","errors","warnings","daysDiff","getDaysDifference","validateDate","isDateDisabled","isDateInRange","getConstraints","disabledDates","disabledDate","isSameDay","disabledDays","dayOfWeek","offDateRangeChange","isRangeComplete","formatDateRange","formatDate","getDateRangeAsString","DateRangePickerOptionHandler","fromLabel","toLabel","fromValue","toValue","clearButton","getClearButtonLabel","clearButtonLabel","onClear","shouldHideCancelButton","hideCancelButton","getCancelButtonLabel","cancelButtonLabel","onCancel","getOkButtonLabel","submitButtonLabel","DateRangePickerControllerHandler","DateRangePickerButtonController","DateRangePickerButtonComponent","DateRangePickerFooterController","propertyUpdateForOkButton","propertyUpdateForClearButton","handleOnClear","cancelButton","handleOnCancel","okButton","handleOnOk","dateRange","getClearButton","getOkButton","DateRangePickerFooterComponent","leftContainer","rightContainer","DateRangePickerFooterTemplate","paramsProps","DateRangePickerCoreComponent","DateRangePicker","DateRangeFieldOptionHandler","getDateRangePickerAppendTo","dateRangePickerAppendTo","onPickerShow","onPickerHide","DATE_RANGE_FIELD_CUSTOM_EVENTS","DateRangeFieldInputController","validDateRange","dataManager","isFromSelected","isToSelected","_param","getFormattedCoupledValue","DateRangeFieldInputView","inputDiv","iconContainer","DateRangeFieldInputTemplate","DateRangeFieldControllerHandler","registerDateRangeFieldController","getDateRangeFieldController","DateRangePickerInteractor","hasPickerMounted","createRangePicker","destroyRangePicker","dateRangePicker","isPickerLaunched","setPickerLaunched","formatDateToString","inputDate","outputFormat","DateRangeFieldModel","normalizeDateInput","setFromDateUsingAPI","setToDateUsingAPI","effectiveFormat","DateRangeFieldUserComponentHandler","DateRangeFieldApi","hasFrom","hasTo","nextFrom","nextTo","DateRangeCoreComponent","getDateRangeFieldRootUtilityClass","DateRangeFieldRootController","getInputContainer","handleOnClick","oFocus","dateRangePickerInteractor","rangePickerRoot","DateRangeFieldRootView","inputContainer","DateRangeFieldRootTemplate","UPLOAD_BEAN_NAME","getUploadFileInputDomId","UploadRenderer","blobPreviewUrlByUid","previewOverlayEl","previewOverlayOnKeyDown","files","fileList","defaultFileList","activeUploads","createFileInput","createTrigger","createListContainer","bindPasteHandler","renderList","activeUpload","XMLHttpRequest","abort","clearInterval","panelRendererImpl","closePreviewOverlay","revokeBlobPreviewUrls","getAPI","getFileList","setFileList","revokeBlobPreviewsNotInFileList","emitChange","upload","uploadFile","fileInput","accept","directory","webkitdirectory","onFilesAdded","hasFieldLayout","panelRenderer","usesPanelRenderer","getTriggerCaption","ph","dragAndDrop","createDefaultUploadIcon","fieldLayout","panelMode","impl","Panel","uploadProps","openFilePicker","textSpan","dataTransfer","onDrop","listContainer","pasteUpload","transfer","createUploadFile","mergedList","autoUpload","maxFileSize","minFileSize","allowedFileTypes","candidate","uid","percentage","rawFile","beforeUpload","onUploadStart","mockUpload","xhr","method","withCredentials","headers","setRequestHeader","onprogress","lengthComputable","total","onUploadProgress","response","onUploadSuccess","onUploadError","onerror","formData","FormData","send","taskId","setInterval","mock","removeFile","revokeBlobPreviewForUid","URL","revokeObjectURL","nextFiles","keep","formatFileSize","bytes","isImageFile","getThumbSrcForFile","thumbUrl","createObjectURL","openImagePreviewOverlay","backdrop","closeBtn","img","alt","previewFile","previewRenderer","previewElement","onPreview","shouldShowUploadList","showUploadList","thumbWrap","thumbSrc","canThumbClick","showPreview","thumbEl","sizeEl","allowDownload","downloadLink","progress","err","allowRemove","UploadAPI","ensureRenderer","facade","UploadRootController","UploadRootComponent","uploadField","uploadRootTemplate","uploadApi","UploadUserComponentHandler","lookupRegistry","UploadFieldComponent","UploadOptionHandler","_inputMeta","_errorMeta","_oldValue","_newValue","_eventOrigin","_maxCount","_status","_message","UploadCoreComponent","initializeUpload","DG_Components","NumberComponent","RenderingNumberComponent","formatNumber","formatPercentage","formatCurrency","Link","formatPhoneNumber","DateTime","PaginationComponent","RenderMultilineComponent","RatingComponent","RenderingTextComponent","TextComponent","DateTimeReadonlyComponent","pad","hours12","ampm","tokenMap","yyyy","yy","Token","RadioComponent","Dialog","DateRangeField","DGDateRangePicker","picker","_isOpen","_destroying","_popupHandler","_popupDestroy","buildPickerConfig","mountViaPopupHandler","isOpen","reposition","updateConfig","pickerElement","onInternalClose","onOk","UploadComponent"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19,20,21,22,23,24,32,52,152,153,154,155,156,157,158,159,160,161,162,163,164,165,172,177,231,373,374,419,420,421,422,423]}