{"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/utility/clipboard.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/utils/date-utils.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/upload-content-type.ts","../src/upload/src/upload-directory-path.ts","../src/upload/src/upload-error.types.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-option-handler.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/model/upload-state-manager.ts","../src/upload/src/core/upload-field/upload-field-view.ts","../src/upload/src/core/model/upload-tooltip-handler.ts","../src/upload/src/upload-core-component.ts","../src/signature/src/constants/signature-bean-constants.ts","../src/signature/src/core/signature-canvas/signature-canvas-engine.ts","../src/signature/src/core/signature-canvas-dom-id.ts","../src/signature/src/core/signature-renderer/signature-renderer.ts","../src/signature/src/core/model/signature-option-handler.ts","../src/signature/src/core/model/signature-api.ts","../src/signature/src/core/signature-root/signature-root-controller.ts","../src/signature/src/core/signature-root/signature-root-view.ts","../src/signature/src/core/signature-root/signature-root-template.ts","../src/signature/src/core/model/signature-user-component-handler.ts","../src/signature/src/core/signature-field/signature-field-view.ts","../src/signature/src/core/model/signature-tooltip-handler.ts","../src/signature/src/signature-core-component.ts","../src/composite-component/src/constants/composite-component-bean-constants.ts","../src/composite-component/src/utils/composite-component-option-adapter.ts","../src/composite-component/src/utils/composite-component-segment-utils.ts","../src/composite-component/src/core/renderers/composite-component-icon-renderer.ts","../src/composite-component/src/core/renderers/composite-component-token-field-renderer.ts","../src/composite-component/src/core/model/composite-component-user-component-handler.ts","../src/composite-component/src/core/composite-input/composite-input-controller.ts","../src/composite-component/src/utils/composite-component-character-filter-utils.ts","../src/composite-component/src/core/composite-input/composite-input-view.ts","../src/composite-component/src/core/composite-picker/composite-picker-controller.ts","../src/composite-component/src/core/composite-picker/composite-picker-view.ts","../src/composite-component/src/core/model/composite-component-controller-handler.ts","../src/composite-component/src/core/model/composite-component-tooltip-handler.ts","../src/composite-component/src/core/model/composite-component-state-manager.ts","../src/composite-component/src/core/composite-root/composite-root-controller.ts","../src/composite-component/src/core/composite-root/composite-root-view.ts","../src/composite-component/src/core/model/composite-component-api.ts","../src/composite-component/src/core/model/composite-component-option-handler.ts","../src/composite-component/src/composite-component-core-component.ts","../src/composite-component/src/composite-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","../src/signature/src/signature.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.PROPERTY_UPDATE, this.checkToDisableNavIfLimitExceedsMax.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        // Month/year views navigate by year or by year page, so they must be routed before\n        // the month guard — that guard reads viewDate, which page navigation never moves.\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        const isBefore = this.model.isBeforeMonth();\n        if(isBefore){\n            return\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        // Month/year views navigate by year or by year page, so they must be routed before\n        // the month guard — that guard reads viewDate, which page navigation never moves.\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        const isAfter = this.model.isAfterMonth();\n        if(isAfter){\n            return\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        if(this.model.isYearInDangerZoneForPast()){\n            return\n        }\n        const viewType = this.viewManager.getViewType();\n\n        if(viewType === CALENDAR_VIEW_TYPE.YEAR){\n            return this.goToBackForwardYear();\n        }\n\n        this.model.goToPreviousYear();\n        this.refreshGridAfterYearChange(viewType);\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        if(this.model.isYearInDangerZoneForFuture()){\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.refreshGridAfterYearChange(viewType);\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.MONTH_UPDATED});\n        this.dispatchEvent({type:'FOCUS_INPUT_ELEMENT'});\n        this.checkToDisableNavIfLimitExceedsMax()\n\n\n    }\n\n    // Month cell labels are the same in every year, so the month grid only needs its cell\n    // state refreshed. Rebuilding it would replay the container's zoom-in CSS animation.\n    private refreshGridAfterYearChange(viewType : string):void{\n        if(viewType !== CALENDAR_VIEW_TYPE.MONTH){\n            this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.RERENDER});\n            return\n        }\n\n        this.viewManager.updateRenderingDetails();\n        this.dispatchEvent({type: CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE});\n    }\n\n    goToFastForwardYear():void{\n        if(this.model.isYearPageInDangerZoneForFuture()){\n            return\n        }\n        const renderingData = this.viewManager.getRendereringData();\n\t\tconst year = renderingData[renderingData.length - 1].value;\n\t\t// Moves the viewed year page only — setYear would overwrite the user's selected date.\n\t\tthis.model.setSelectedYear(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        if(this.model.isYearPageInDangerZoneForPast()){\n            return\n        }\n        let year = this.viewManager.getRendereringData()[0].value;\n        if (year < Custom_Min_Year) {\n            year = Custom_Min_Year;\n        }\n        // Moves the viewed year page only — setYear would overwrite the user's selected date.\n        this.model.setSelectedYear(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            this.checkToDisableNavIfLimitExceedsMax();\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        this.checkToDisableNavIfLimitExceedsMax();\n    }\n\n    setYear() {\n\t\t(this.component?.getYearElement()as HTMLElement).textContent = this.viewManager.getSelectedYearTitle();\n        this.setAriaAttributes();\n        this.checkToDisableNavIfLimitExceedsMax();\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            // The new view navigates by a different step size, so re-evaluate the buttons.\n            this.checkToDisableNavIfLimitExceedsMax();\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\n        // In year view the month buttons page the whole year grid by a decade window,\n        // so they need the page-level bounds check instead of the single-month one.\n        const isInYearGridView = this.viewManager.getViewType() === CALENDAR_VIEW_TYPE.YEAR;\n        const shouldDisableNextMonthButton = isInYearGridView\n            ? this.model.isYearPageInDangerZoneForFuture()\n            : this.model.isMonthInDangerZoneForFuture();\n        const shouldDisablePreviousMonthButton = isInYearGridView\n            ? this.model.isYearPageInDangerZoneForPast()\n            : this.model.isMonthInDangerZoneForPast();\n\n        const { previousYearButton, nextYearButton, previousMonthButton, nextMonthButton  } = this.component?.getMonthYearButtons() as {previousYearButton:any,nextYearButton    : any, previousMonthButton : any, nextMonthButton:any};\n\n        // PROPERTY_UPDATE can fire during calendar init (e.g. syncMaxDateConstraint in\n        // createDatePicker) before button renderers are attached — skip until ready.\n        if (!nextYearButton?.renderer?.button?.api) {\n            return;\n        }\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(shouldDisableNextMonthButton){\n            nextMonthButton.renderer.button.api.updateProperties({disabled : true});\n        }else{\n            nextMonthButton.renderer.button.api.updateProperties({disabled : false});\n        }\n\n\n\n        if(shouldDisablePreviousMonthButton){\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 YEARS_PER_PAGE = 12;\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 viewDate! : 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.viewDate = dayjs(date,format);\n        this.initDate();\n        this.viewDate = 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.viewDate,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.viewDate,this.currentDate)\n      }\n\n    goToPreviousMonth(): void {\n        this.viewDate  = this.viewDate.subtract(1, 'month');\n        // this.currentDate  = this.currentDate.subtract(1, 'month');\n\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n    }\n\n    goToNextMonth(): void {\n        this.viewDate  = this.viewDate.add(1, 'month');\n        // this.currentDate  = this.currentDate.add(1, 'month');\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n\n    }\n\n    goToPreviousYear(): void {\n        this.viewDate = this.viewDate.subtract(1, 'year');\n        // this.currentDate = this.currentDate.subtract(1, 'year');\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n\n    }\n\n    goToNextYear(): void {\n        this.viewDate = this.viewDate.add(1, 'year');\n        // this.currentDate = this.currentDate.add(1, 'year');\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n\n    }\n\n    goToCurrent(): void {\n        this.currentDate = dayjs();\n        this.viewDate = dayjs();\n        this.generateCurrentMonthDays(this.viewDate,this.currentDate);\n\n    }\n\n    updateCurrentDate(date: Date): void {\n        this.currentDate = dayjs(date);\n        this.generateCurrentMonthDays(this.viewDate,this.currentDate);\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.viewDate = this.viewDate.date(day);\n        this.currentDate = this.currentDate.date(day);\n        this.dateSelected = true\n\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n    }\n\n    setSelectedMonth(month : number):void{\n        this.viewDate = this.viewDate.month(month);\n\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n\n\n    }\n\n    setSelectedYear(year : number):void{\n        this.viewDate = this.viewDate.year(year);\n        this.generateCurrentMonthDays(this.viewDate ,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.viewDate),\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.viewDate),\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.viewDate),\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 viewDate in each date instance\n            const dateWithTime = date.hour(dateObject.hour()).minute(dateObject.minute()).second(dateObject.second());\n\n            const isSelected = this.dateSelected && iSameDay(date, compareDateObject);\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.viewDate = this.viewDate.date(day);\n        this.dateSelected = true\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n    }\n\n    setMonth(month: number): void {\n        this.currentDate = this.currentDate.month(month);\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n\n    }\n\n    setYear(year: number): void {\n        this.currentDate = this.currentDate.year(year);\n        this.generateCurrentMonthDays(this.viewDate ,this.currentDate);\n\n    }\n\n    setDate(date : string | Date | Dayjs | null):void{\n        \n        if(date === null){\n            this.dateSelected = false;\n            date = this.viewDate;\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 viewedYear = this.getSelectedYearIndex();\n          const monthdateObject = this.viewDate.set(\"year\", viewedYear).set(\"month\",i);\n          // Compare at month granularity so the boundary month stays selectable — it still contains valid days.\n          const isBefore = this.minDate && monthdateObject.isBefore(this.minDate,'month');\n          const isAfter = this.maxDate && monthdateObject.isAfter(this.maxDate,'month')\n          const isDisabled = isBefore|| isAfter as boolean;\n\n          // The selected month belongs to the selected year, so it only highlights while\n          // that year is the one being viewed.\n          const isSelected = this.dateSelected\n              && this.currentDate.year() === viewedYear\n              && i === this.currentDate.month();\n\n          const isToday = dayjs().year() === this.viewDate.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: true,\n              ariaLabel : monthName,\n              dateObject :monthdateObject.toDate(),\n              isDisabled\n          });\n        }\n        return monthNames;\n        \n    }\n\n    getNumberOfWeeksInMonth(): number {\n        const startOfMonth = this.viewDate.startOf('month');\n        const endOfMonth = this.viewDate.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        // The page follows viewDate so paging never touches currentDate, which holds the selection.\n        const startYear     = this.getYearPageStart(this.viewDate.year());\n        const years: DayDetails[] = [];\n      \n        for (let i = 0; i < YEARS_PER_PAGE; i++) {\n            const year = startYear + i;\n            const isCurrentMonth = true;\n            const isSelected = this.dateSelected && this.currentDate.year() === year;\n            const isToday = dayjs().year() === year ? true : false;\n\n            const monthdateObject = this.viewDate.set(\"year\",year);\n\n            // Compare at year granularity so the boundary year stays selectable — it still contains valid months.\n            const isBefore = this.minDate && monthdateObject.isBefore(this.minDate,'year');\n            const isAfter = this.maxDate && monthdateObject.isAfter(this.maxDate,'year')\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.currentDate = dayjs(date);\n        this.viewDate = dayjs(date);\n        this.generateCurrentMonthDays(this.viewDate,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.currentDate.date();\n\n    }\n    getSelectedMonth(): string{\n        return this.viewDate.format(this.monthFormat);\n    }\n    getSelectedYear() : string{\n        return this.viewDate.format(this.yearFormat)\n    }\n    getSelectedDate() : Dayjs | null{\n        return this.dateSelected ? this.currentDate : null;\n\n    }\n\n    getSelectedMonthIndex()                           : number{\n        return this.viewDate.month();\n    }\n    getSelectedYearIndex()                           : number{\n        return this.viewDate.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.viewDate)){\n            return true\n        }\n        return this.maxDate ? this.viewDate.isAfter(this.maxDate) : false;\n    }\n\n    isBeforeMonth(): boolean{\n        if(this.minDate && isSameMonthInSameYear(this.minDate,this.viewDate)){\n            return true\n        }\n        return this.minDate ? this.viewDate.isBefore(this.minDate) : false;\n\n    }\n\n    isBeforeYear(): boolean{\n        if(this.minDate && this.minDate.isSame(this.viewDate,'year')){\n            return true\n        }\n        return this.minDate ? this.viewDate.isBefore(this.minDate) : false;\n\n    }\n    isAfterYear(): boolean{\n        if(this.maxDate && this.maxDate.isSame(this.viewDate,'year')){\n            return true\n        }\n        return this.maxDate ? this.viewDate.isAfter(this.maxDate) : false;\n\n    }\n\n    isYearInDangerZoneForFuture():boolean{\n        // Year arrows keep the current month; disable when that month in the next year\n        // is entirely after maxDate (no selectable day in the destination month).\n        const destinationMonth = this.viewDate.set(\"year\", this.viewDate.year() + 1);\n        const maxDate = this.getEffectiveMaxDate();\n        if(maxDate && destinationMonth.isAfter(maxDate, 'month')){\n            return true\n        }\n        return false\n        \n    }\n\n    isYearInDangerZoneForPast():boolean{\n        // Year arrows keep the current month; disable when that month in the previous year\n        // is entirely before minDate (e.g. July 2025 with minDate 8 Aug 2025).\n        const destinationMonth = this.viewDate.set(\"year\", this.viewDate.year() - 1);\n        const minDate = this.getEffectiveMinDate();\n        if(minDate && destinationMonth.isBefore(minDate, 'month')){\n            return true\n        }\n\n        return false\n\n    }\n\n    // The year grid page is anchored to the decade containing the given year, so paging\n    // does not move by a fixed number of years. Nav checks must re-derive the page the\n    // same way the grid does.\n    private getYearPageStart(year: number): number {\n        const startOfDecade = Math.floor(year / 10) * 10 - Custom_Min_Year; // Start the decade from the previous year\n        // The page stays anchored to the decade so out-of-range years render disabled\n        // instead of disappearing, matching how day and month cells behave.\n        return Math.max(startOfDecade, Custom_Min_Year); // Avoid negative years\n    }\n\n    isYearPageInDangerZoneForFuture(): boolean {\n        if (!this.maxDate) {\n            return false;\n        }\n        // Paging forward lands on the last year of the current page, which then re-anchors\n        // to that year's decade. Disable when no year on the resulting page is selectable.\n        const lastYearOfCurrentPage = this.getYearPageStart(this.viewDate.year()) + YEARS_PER_PAGE - 1;\n        return this.getYearPageStart(lastYearOfCurrentPage) > this.maxDate.year();\n    }\n\n    isYearPageInDangerZoneForPast(): boolean {\n        if (!this.minDate) {\n            return false;\n        }\n        // Paging back lands on the first year of the current page, which then re-anchors\n        // to that year's decade. Disable when no year on the resulting page is selectable.\n        const firstYearOfCurrentPage = this.getYearPageStart(this.viewDate.year());\n        const lastYearOfPreviousPage = this.getYearPageStart(firstYearOfCurrentPage) + YEARS_PER_PAGE - 1;\n        return lastYearOfPreviousPage < this.minDate.year();\n    }\n\n    private getEffectiveMinDate(): Dayjs | null {\n        return this.optionsHandler.getMinDate()\n            ? dayjs(dayjs(this.optionsHandler.getMinDate()), this.format)\n            : null;\n    }\n\n    private getEffectiveMaxDate(): Dayjs | null {\n        return this.optionsHandler.getMaxDate()\n            ? dayjs(dayjs(this.optionsHandler.getMaxDate()), this.format)\n            : null;\n    }\n\n    isMonthInDangerZoneForFuture():boolean{\n        const precausionMonthForFuture = this.viewDate.set(\"month\",this.viewDate.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.viewDate.set(\"month\",this.viewDate.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.currentDate.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        this.addListener(this.eventHandler, CALENDAR_CUSTOM_EVENTS.PROPERTY_UPDATE, this.refreshConstraintState.bind(this));\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        this.addListener(element, 'click', (event : PointerEvent) => {\n            event.stopImmediatePropagation();\n\n            // minDate/maxDate updates refresh cell state in place without re-registering\n            // listeners, so disabled has to be checked at click time, not at registration.\n            if(this.dateDetails.isDisabled){\n                return\n            }\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    private refreshConstraintState(): void {\n        const viewType = this.viewManager.getViewType();\n        let updatedDetails: DayDetails[];\n\n        if (viewType === CALENDAR_VIEW_TYPE.DAY) {\n            updatedDetails = this.model.getRenderDetailsforDay();\n        } else if (viewType === CALENDAR_VIEW_TYPE.MONTH) {\n            updatedDetails = this.model.getMonthNames();\n        } else {\n            updatedDetails = this.model.getRenderDetailsforYear();\n        }\n\n        const match = updatedDetails.find((details) =>\n            viewType === CALENDAR_VIEW_TYPE.DAY\n                ? isSameDate(details.dateObject as Date, this.dateDetails.dateObject as Date, 'day')\n                : details.value === this.dateDetails.value\n        );\n\n        if (!match) {\n            return;\n        }\n\n        this.dateDetails = match;\n        this.applyClassNames();\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\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            if(!this.isConstraintOnlyUpdate(properties)){\n                this.dispatchEvent({\n                    type : CALENDAR_CUSTOM_EVENTS.RERENDER\n                })\n            }\n        }\n\n    }\n\n    private isConstraintOnlyUpdate(properties: ICalendarConfiguration): boolean {\n        const keys = Object.keys(properties);\n        if(keys.length === 0){\n            return false;\n        }\n        const constraintKeys: (keyof ICalendarConfiguration)[] = ['minDate', 'maxDate'];\n        return keys.every(key => constraintKeys.includes(key as keyof ICalendarConfiguration));\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\";\nimport { IClipboard } from \"../utility/clipboard\";\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    clipboard ?: IClipboard | boolean;\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    'clipboard'\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\";\nimport { ClipboardConfig } from \"../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\n    }\n}\n\ninterface RendererClassType {\n    getElement() : HTMLElement\n}\n\nexport {\n    CheckboxOptionHandler,\n    RendererClassType\n}","export interface IClipboard {\n\tcopy?: boolean;\n\tcut?: boolean;\n\tpaste?: boolean;\n}\n\nexport type ClipboardConfig = IClipboard | boolean | undefined;\n\nexport type ClipboardOperation = 'copy' | 'cut' | 'paste';\n\n\nexport function isClipboardOperationAllowed(clipboard: ClipboardConfig,operation: ClipboardOperation): boolean {\n\tif (clipboard === undefined || clipboard === true) {\n\t\treturn true;\n\t}\n\tif (clipboard === false) {\n\t\treturn false;\n\t}\n\treturn clipboard[operation] !== false;\n}\n\n\nexport function createClipboardGuard(getClipboard: () => ClipboardConfig): (event: ClipboardEvent) => void {\n\treturn (event: ClipboardEvent) => {\n\t\tconst operation = event.type as ClipboardOperation;\n\t\tif (!isClipboardOperationAllowed(getClipboard(), operation)) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t};\n}\n\n\n// export function registerClipboardGuards(element: HTMLElement | null | undefined,getClipboard: () => ClipboardConfig,addListener: (target: HTMLElement, event: string, listener: (event: ClipboardEvent) => void) => void): void {\n// \tif (!element) {\n// \t\treturn;\n// \t}\n// \tconst guard = createClipboardGuard(getClipboard);\n// \taddListener(element, 'copy', guard);\n// \taddListener(element, 'cut', guard);\n// \taddListener(element, 'paste', guard);\n// }\nexport type ClipboardConfigProvider = () => ClipboardConfig;\n\nexport type ClipboardEventListener = (event: ClipboardEvent) => void;\n\nexport type ClipboardListenerRegistrar = (\n\ttarget: HTMLElement,\n\tevent: ClipboardOperation,\n\tlistener: ClipboardEventListener\n) => void;\n\nexport function registerClipboardGuards(element: HTMLElement | null | undefined,getClipboard: ClipboardConfigProvider,addListener: ClipboardListenerRegistrar): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tconst guard = createClipboardGuard(getClipboard);\n\taddListener(element, 'cut', guard);\n\taddListener(element, 'copy', guard);\n\taddListener(element, 'paste', guard);\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\";\nimport { registerClipboardGuards } from \"../../../utility/clipboard\";\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        registerClipboardGuards(\n            this.component?.getElement(),\n            () => this.optionsHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\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        const isInvalid = componentParams?.invalid?.() || false;\n        const invalidText = componentParams?.invalidText?.() || \"\";\n        if (isInvalid && invalidText) {\n            classes.root = classes.root + \" dg-field__validation-message\";\n            const validationMessageClasses = componentParams?.getValidationMessageClasses?.();\n            if (validationMessageClasses) {\n                classes.root = classes.root + \" \" + validationMessageClasses;\n            }\n        }\n\n        this.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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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        const element = this.component?.getElement();\n        registerClipboardGuards(\n            element,\n            () => this.optionsHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\n\n        if(this.optionsHandler.isReadOnly()){\n            return;\n        }\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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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\tconst options = this.optionsHandler as ITooltipOptionsHandler | undefined;\n\t\tif (!options?.isBrowserTooltipEnabled) {\n\t\t\tconsole.warn('Tooltip: optionHandler bean missing; skipping tooltip setup');\n\t\t\treturn;\n\t\t}\n\t\tthis.browserTooltips = options.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\tconst options = this.optionsHandler as ITooltipOptionsHandler | undefined;\n\t\tthis.tooltip = options?.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 | null;\n        if (!controller?.registerTooltipHandler) {\n            console.warn('Tooltip: TOOL_TIP_CONTROLLER_HANDLER bean missing; tooltip handler not registered');\n            return;\n        }\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}","import { IClipboard } from \"../utility/clipboard\";\n\ninterface IValue {\n    value: string | HTMLElement;\n}\n\nexport interface IRenderer {\n    getElement(): HTMLElement;\n    init(params: object): void;\n    destroy(): 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    clipboard?: IClipboard | boolean;\n\n}\n\nexport interface ILinkErrorRenderer {\n    getElement(): HTMLElement;\n    init(params: object): void;\n    destroy(): void;\n}\n\n// type ILinkType = 'mail' | 'telephone' | 'file'\ntype ILinkType = 'mail' | 'telephone' | 'file' | 'url' | 'whatsapp' | 'sms' | 'facetime' | 'skype' | 'ftp';\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        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    };\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    \"clipboard\"\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\";\nimport { ClipboardConfig } from \"../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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}","\nimport { IClipboard } from \"../../utility/clipboard\";\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    clipboard ?: IClipboard | boolean;\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    'clipboard'\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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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        registerClipboardGuards(\n            inputElement,\n            () => this.optionHandler.getClipboard(),\n            (target, event, listener) => this.addInputEventListener(target, event, listener)\n        );\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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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 inputElement = this.component.getRootElement();\n        registerClipboardGuards(\n            inputElement,\n            () => this.optionHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\n\n        const ownerState = this.getOwnerState();\n        if(ownerState.readonly || ownerState.disabled) {\n            return \n        }\n        \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\";\nimport { registerClipboardGuards } from \"../../../utility/clipboard\";\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        registerClipboardGuards(\n            this.component?.getElement(),\n            () => this.optionsHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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            // Keep empty as null — do not coerce to '0' (that falsely triggers onChange on blur)\n            if (value === '') {\n                this.numberModel.setIsEmpty(true);\n                this.numberModel.setValue(null);\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        // Empty stays empty — do not coerce null/'' to 0 on blur\n        if (this.isEmpty) {\n            return;\n        }\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\t\tconst previousWasEmpty =\n\t\t\tpreviousValueString === null ||\n\t\t\tpreviousValueString === undefined ||\n\t\t\tpreviousValueString === '';\n\t\tconst currentlyEmpty = this.isEmty();\n\n\t\t// Empty field focus/blur must not emit onChange when internal empty\n\t\t// representation shifts (null → '' / '0') without a user edit.\n\t\tif (previousWasEmpty && currentlyEmpty) {\n\t\t\treturn;\n\t\t}\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\";\nimport { isClipboardOperationAllowed, registerClipboardGuards } from \"../../../../utility/clipboard\";\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            registerClipboardGuards(\n                element,\n                () => this.optionHandler.getClipboard(),\n                (target, event, listener) => this.addListener(target, event, listener)\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 (!isClipboardOperationAllowed(this.optionHandler.getClipboard(), 'paste')) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    return;\n                }\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.getValueAsNumber();\n\n            if(value === null || isNaN(value) || !Number.isFinite(value)){\n                return;\n            }\n\n            if(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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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            registerClipboardGuards(\n                element,\n                () => this.optionHandler.getClipboard(),\n                (target, event, listener) => this.addListener(target, event, listener)\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, pageNumber?: number): void {\n        return this.dataHandler.updateCount(count, pageNumber)\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        // Do not validate against totalPages here: count may be 0 until the grid reports rows.\n        this.pageNumber              = (typeof initialPageNumber === 'number' && initialPageNumber > 0)\n            ? Math.floor(initialPageNumber)\n            : defaultInitialPage;\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                    // Near right boundary: end sibling window at rightEllipsisPosition\n                    startPage = rightEllipsisPosition - siblingArrayCount + 1;\n                }\n                else {\n                    // Near left boundary: start sibling window at leftEllipsisPosition\n                    startPage = leftEllipsisPosition;\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        if (maximumPage <= 0 || boundaryCount <= 0) {\n            return rightBoundaryArray;\n        }\n        for (let index = Math.max(1, 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        if (totalCount <= 0 || pageSize <= 0) {\n            return 0;\n        }\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    isReadOnly(): boolean {\n        return this.config.readonly ?? paginationDefaultConfiguration.readonly;\n    }\n    private isInteractionLocked(): boolean {\n        return this.isDisabled() || this.isReadOnly();\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        const shape = this.config.shape ?? paginationDefaultConfiguration.shape;\n        const normalized = shape as unknown;\n        if (normalized === true || normalized === 'true') {\n            return 'circular';\n        }\n        if (normalized === false || normalized === 'false' || normalized == null || normalized === '') {\n            return paginationDefaultConfiguration.shape;\n        }\n        return String(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 (totalPageNumber <= 0) {\n            return firstPage;\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 (totalPageNumber <= 0) {\n            return firstPage;\n        }\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        if (this.isInteractionLocked()) return;\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.isInteractionLocked()) return;\n        if (!this.isValidPageSize(size)) return;\n        if (this.getPageSize() === Math.floor(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 (totalPages <= 0) {\n                this.pageNumber = 1;\n            } else if (this.pageNumber > totalPages) {\n                this.pageNumber = 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, pageNumber?: number): void {\n        this.config.count = count;\n        if (typeof pageNumber === 'number' && pageNumber > 0) {\n            this.pageNumber = Math.floor(pageNumber);\n        }\n        const totalPages = this.getTotalPages();\n        if (totalPages <= 0) {\n            this.pageNumber = 1;\n        } else if (this.pageNumber > totalPages) {\n        if (totalPages > 0 && this.pageNumber > totalPages) {\n            this.pageNumber = totalPages;\n        } else if (this.pageNumber < 1) {\n            this.pageNumber = 1;\n        }\n        this.stateManager?.dispatchEvent?.({ type: 'paginationStateChanged' });\n    }\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 totalPages = this.getTotalPages();\n        if (totalPages <= 0) {\n            return [];\n        }\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             = 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            if (lastElement) {\n                for(let i=0;i<lastElement;i++){\n                    arr.push(i+1)\n                }\n            }\n        }\n        if(arr.length == 0){\n            for (let i = 1; i <= totalPages; i++) {\n                arr.push(i);\n            }\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 ?? (this.config?.slot as { nextICon?: HTMLElement | string | number })?.nextICon;\n        if (this.hasNextIcon() && icon !== undefined && icon !== null) {\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\tprivate isInteractionLocked(): boolean {\n\t\treturn this.dataHandler.isDisabled() || this.dataHandler.isReadOnly();\n\t}\n\n\tprivate resolveNavLabel(icon: HTMLElement | Text | null, fallback: string): string | Node {\n\t\tif (!icon) {\n\t\t\treturn fallback;\n\t\t}\n\t\tif (icon.nodeType === Node.TEXT_NODE) {\n\t\t\treturn icon.textContent || fallback;\n\t\t}\n\t\treturn icon;\n\t}\n\n\tprivate buildPrevNavigators(): { label: string | Node; action: () => void }[] {\n\t\tconst items: { label: string | Node; action: () => void }[] = [];\n\t\tif (this.dataHandler.hasFirstIcon()) {\n\t\t\titems.push({\n\t\t\t\tlabel: this.resolveNavLabel(this.dataHandler.getFirstButtonIcon(), '⬅️'),\n\t\t\t\taction: () => this.dataHandler.goToFirstPage(),\n\t\t\t});\n\t\t}\n\t\tif (this.dataHandler.hasPreviousIcon()) {\n\t\t\titems.push({\n\t\t\t\tlabel: this.resolveNavLabel(this.dataHandler.getPreviousIcon(), '←'),\n\t\t\t\taction: () => this.dataHandler.goToPreviousPage(),\n\t\t\t});\n\t\t}\n\t\treturn items;\n\t}\n\n\tprivate buildNextNavigators(): { label: string | Node; action: () => void }[] {\n\t\tconst items: { label: string | Node; action: () => void }[] = [];\n\t\tif (this.dataHandler.hasNextIcon()) {\n\t\t\titems.push({\n\t\t\t\tlabel: this.resolveNavLabel(this.dataHandler.getNextIcon(), '→'),\n\t\t\t\taction: () => this.dataHandler.goToNextPage(),\n\t\t\t});\n\t\t}\n\t\tif (this.dataHandler.hasLastIcon()) {\n\t\t\titems.push({\n\t\t\t\tlabel: this.resolveNavLabel(this.dataHandler.getLastButtonIcon(), '➡️'),\n\t\t\t\taction: () => this.dataHandler.goToLastPage(),\n\t\t\t});\n\t\t}\n\t\treturn items;\n\t}\n\n\tprivate resolvePageLabel(text: number | string): string | Node {\n\t\tif (text === '...' || text === '') {\n\t\t\treturn String(text);\n\t\t}\n\t\tconst pageNum = Number(text);\n\t\tif (isNaN(pageNum)) {\n\t\t\treturn String(text);\n\t\t}\n\t\tconst displayText = this.dataHandler.getDisplayText();\n\t\tconst result = displayText(pageNum);\n\t\tif (result == null || result === '') {\n\t\t\treturn String(pageNum);\n\t\t}\n\t\tif (typeof result === 'object' && (result as Node).nodeType) {\n\t\t\treturn result as Node;\n\t\t}\n\t\treturn String(result);\n\t}\n\n\tprivate createPageButton(\n\t\tappendTo: HTMLElement,\n\t\tlabel: string | Node,\n\t\tisActivePage: boolean,\n\t\tonClick: () => void,\n\t\tnavDisabled = false,\n\t): void {\n\t\tconst locked = this.isInteractionLocked() || navDisabled;\n\t\tconst classes = [\n\t\t\tisActivePage ? 'DG-paginationActivePage' : '',\n\t\t\tnavDisabled ? 'DG-paginationNavDisabled' : '',\n\t\t].filter(Boolean).join(' ') || undefined;\n\n\t\tif (typeof label === 'object' && (label as Node).nodeType) {\n\t\t\tconst button = document.createElement('button');\n\t\t\tbutton.type = 'button';\n\t\t\tif (classes) {\n\t\t\t\tbutton.className = classes;\n\t\t\t}\n\t\t\tbutton.disabled = locked;\n\t\t\tbutton.appendChild((label as Node).cloneNode(true));\n\t\t\tif (!locked) {\n\t\t\t\tbutton.addEventListener('click', onClick);\n\t\t\t}\n\t\t\tappendTo.appendChild(button);\n\t\t\treturn;\n\t\t}\n\n\t\tconst buttonConfig: IButtonConfiguration = {\n\t\t\tappendTo: appendTo ?? document.body,\n\t\t\ttext: String(label),\n\t\t\tshowText: true,\n\t\t\tdisabled: locked,\n\t\t\treadonly: this.dataHandler.isReadOnly(),\n\t\t\tcallback: locked ? undefined : (_event: KeyboardEvent) => onClick(),\n\t\t\tclasses,\n\t\t};\n\t\tnew Button(buttonConfig);\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\n\t\tconst elementArray: HTMLElement[] = [];\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\n\t\tconst prevNavigators = this.buildPrevNavigators();\n\t\tconst nextNavigators = this.buildNextNavigators();\n\t\tconst pages = this.dataHandler.getButtons();\n\t\tconst pageArray = this.arraySetter(pages);\n\t\tconst currentPage = this.dataHandler.getPage();\n\t\tconst hasLoop = this.dataHandler.hasLoop();\n\t\tconst prevAllowed = hasLoop || this.dataHandler.isPreviousAllowed();\n\t\tconst nextAllowed = hasLoop || this.dataHandler.isNextPageAllowed();\n\n\t\tprevNavigators.forEach((nav) => {\n\t\t\tthis.createPageButton(elementArray[0], nav.label, false, nav.action, !prevAllowed);\n\t\t});\n\n\t\tpageArray.forEach((array, index) => {\n\t\t\tconst element = elementArray[index + 1];\n\t\t\tarray.forEach((text) => {\n\t\t\t\tif (text === undefined || text === null || text === '') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pageNum = Number(text);\n\t\t\t\tconst isEllipsis = text === '...';\n\t\t\t\tconst isActivePage = !isEllipsis && !isNaN(pageNum) && pageNum === currentPage;\n\t\t\t\tconst label = this.resolvePageLabel(text);\n\t\t\t\tthis.createPageButton(element, label, isActivePage, () => {\n\t\t\t\t\tif (!isEllipsis && this.dataHandler.isValidPage(pageNum)) {\n\t\t\t\t\t\tthis.dataHandler.goToPage(pageNum);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tnextNavigators.forEach((nav) => {\n\t\t\tthis.createPageButton(elementArray[6], nav.label, false, nav.action, !nextAllowed);\n\t\t});\n\t}\n\t\n\t\n\n\tarraySetter(pageButtons :(number | string)[]) :  any[][]{\n\t\tconst numericPages = pageButtons.filter((element) => element !== '...');\n\t\tif (!pageButtons.includes('...')) {\n\t\t\treturn [[], [], numericPages, [], []];\n\t\t}\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\n        if((leftBoundary.length+rightBoundary.length)!= mergedArray.length){\n            removeCommonElements(leftBoundary,rightBoundary);\n        }\n\n\t\tif (siblingArray.length === 0) {\n\t\t\tconst boundarySet = new Set([...leftBoundary, ...rightBoundary]);\n\t\t\tsiblingArray = numericPages\n\t\t\t\t.map(Number)\n\t\t\t\t.filter((page) => !isNaN(page) && !boundarySet.has(page));\n\t\t}\n\n\t\tconst leftBoundaryLast = leftBoundary[leftBoundary.length - 1];\n\t\tconst rightBoundaryFirst = rightBoundary[0];\n\t\tlet siblingFirst = siblingArray[0];\n\t\tlet siblingLast = siblingArray[siblingArray.length - 1];\n\n\t\t// Single missing page between boundary and siblings → show the page, not ellipsis\n\t\tif (siblingFirst != null && leftBoundaryLast != null && siblingFirst === leftBoundaryLast + 2) {\n\t\t\tsiblingArray = [leftBoundaryLast + 1, ...siblingArray];\n\t\t\tsiblingFirst = siblingArray[0];\n\t\t}\n\t\tif (siblingLast != null && rightBoundaryFirst != null && rightBoundaryFirst === siblingLast + 2) {\n\t\t\tsiblingArray = [...siblingArray, siblingLast + 1];\n\t\t\tsiblingLast = siblingArray[siblingArray.length - 1];\n\t\t}\n\n\t\tconst leftEllipsis =\n\t\t\tsiblingFirst != null && leftBoundaryLast != null && siblingFirst > leftBoundaryLast + 1\n\t\t\t\t? ['...']\n\t\t\t\t: [];\n\t\tconst rightEllipsis =\n\t\t\tsiblingLast != null && rightBoundaryFirst != null && rightBoundaryFirst > siblingLast + 1\n\t\t\t\t? ['...']\n\t\t\t\t: [];\n\n\t\treturn [leftBoundary, leftEllipsis, siblingArray, rightEllipsis, rightBoundary];\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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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        registerClipboardGuards(\n            this.comp.getGui(),\n            () => this.optionHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\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\";\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('stateManager') protected stateManager!: { addEventListener?: (event: string, handler: () => void) => void };\n    private selectInstance: Select | null = null;\n    private readonly pageSizeLabel = 'Page';\n\n    setComponent(comp : sizeChangerViewType ) {\n        this.component    = comp;\n        this.applyClassNames()\n        this.setAriaAttributes()\n        this.applyClassNames();\n        this.registerEventListener();\n        this.stateManager?.addEventListener?.('paginationStateChanged', () => this.syncSizeChanger());\n        this.setInitialSizeChanger();\n    }\n    init(): void {\n    }\n    private getSizeOptions() {\n        return transformArray(this.dataHandler.getPageSizeArray(), this.pageSizeLabel);\n    }\n    private getSelectedOption(options: { id: string; value: string; label?: string }[]) {\n        const currentSize = this.dataHandler.getPageSize();\n        return options.find((o) => Number(o.value.split(' ')[0]) === currentSize) ?? options[0];\n    }\n    private applyPageSizeFromSelect(params: { initiator?: string; value?: { value?: string; id?: string } | string }) {\n        if (params?.initiator === 'API') {\n            return;\n        }\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 pageSize = Number(valueStr.split(' ')[0]);\n        if (pageSize > 0 && pageSize !== this.dataHandler.getPageSize()) {\n            this.dataHandler.setPageSize(pageSize);\n        }\n    }\n    private setInitialSizeChanger() {\n        const options = this.getSizeOptions();\n        const selectedOption = this.getSelectedOption(options);\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: { initiator?: string; value?: { value?: string; id?: string } | string }) => {\n                this.applyPageSizeFromSelect(params);\n            }\n        };\n        this.selectInstance = new Select(selectConfiguration);\n    }\n    private syncSizeChanger() {\n        if (!this.selectInstance?.api) {\n            return;\n        }\n        const options = this.getSizeOptions();\n        const selectedOption = this.getSelectedOption(options);\n        if (!selectedOption) {\n            return;\n        }\n        const currentIds = this.selectInstance.api.getSelectedIDs?.() ?? [];\n        if (currentIds.length === 1 && currentIds[0] === selectedOption.id) {\n            return;\n        }\n        this.selectInstance.api.setValue([selectedOption]);\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        this.selectInstance?.api?.destroy?.();\n        this.selectInstance = null;\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            if (this.dataHandler.isDisabled() || this.dataHandler.isReadOnly()) {\n                return;\n            }\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        const locked = this.dataHandler.isDisabled() || this.dataHandler.isReadOnly();\n        input.disabled = locked;\n        button.disabled = locked;\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 :  'last-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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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\tgetClipboard(): ClipboardConfig {\n\t\treturn this.configuration.clipboard;\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 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, BEAN_NAME } 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\";\nimport { IRatingOptionHandler } from \"../model/rating-option-handler.types\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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    @AutoWired(BEAN_NAME.OPTION_HANDLER) optionsHandler !: IRatingOptionHandler;\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        registerClipboardGuards(\n            this.element,\n            () => this.optionsHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\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\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\";\nimport { IClipboard } from \"../../utility/clipboard\";\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    clipboard ?: IClipboard | boolean;\n\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    'clipboard'\n];\n\n\n\nexport {\n    ITextConfiguration,\n    textLineFormatter,\n    pickKeysFromInterface,\n    configArray\n}\nexport type { IClipboard };","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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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        registerClipboardGuards(\n            inputElement,\n            () => this.optionHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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 inputElement = this.component.getInputElement();\n        registerClipboardGuards(\n            inputElement,\n            () => this.optionHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\n        );\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\";\nimport { isClipboardOperationAllowed, createClipboardGuard } from \"../../../../utility/clipboard\";\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    private clipboardGuardHandler?: (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            this.clipboardGuardHandler = createClipboardGuard(() => this.optionsHandler.getClipboard());\n            this.element.addEventListener('copy', this.clipboardGuardHandler);\n            this.element.addEventListener('cut', this.clipboardGuardHandler);\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            if (this.clipboardGuardHandler) {\n                this.element.removeEventListener('copy', this.clipboardGuardHandler);\n                this.element.removeEventListener('cut', this.clipboardGuardHandler);\n                this.clipboardGuardHandler = 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 (!isClipboardOperationAllowed(this.optionsHandler.getClipboard(), 'paste')) {\n            event.preventDefault();\n            event.stopPropagation();\n            return;\n        }\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\";\nimport { ClipboardConfig } from \"../../../../utility/clipboard\";\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    getClipboard(): ClipboardConfig {\n        return this.configuration.clipboard;\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\";\nimport { registerClipboardGuards } from \"../../../../utility/clipboard\";\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        this.registerClipboardHandlers();\n\n        // this.registerEventHandler();\n        // this.registerAdjusterEventHandler();\n    }\n\n    private registerClipboardHandlers() : void {\n        registerClipboardGuards(\n            this.comp.getElement(),\n            () => this.optionHandler.getClipboard(),\n            (target, event, listener) => this.addListener(target, event, listener)\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    // 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 && !this.isOptionDisabled()){\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        this.comp.getGui().classList.toggle('dg-input__status--disabled', this.isOptionDisabled());\n    }\n\n    private isOptionDisabled(): boolean {\n        return this.option.isDisabled() || this.optionHandler.isDisabled();\n    }\n\n    private setAriaAttributes():void{\n        const radioInput =  this.comp.getRadio();\n        const isDisabled  = this.isOptionDisabled();\n        radioInput.disabled = 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, 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        this.destroyInputListener();\n        this.addInputListener(inputWrapperComp, 'click', (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n            if (this.isOptionDisabled() || this.optionHandler.isReadOnly()) {\n                return;\n            }\n            this.clickOption();\n        });\n    }\n\n    enableListener() : void {\n        const inputWrapperComp = this.comp.getGui();\n        inputWrapperComp.addEventListener('click', (event) => {\n            event.preventDefault();\n            if (this.isOptionDisabled() || this.optionHandler.isReadOnly()) {\n                return;\n            }\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        if (this.isOptionDisabled() || this.optionHandler.isReadOnly()) {\n            return;\n        }\n        this.configuration?.onBeforeSelect?.(this.option);\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    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\";\nimport { RadioOptionType } from \"../model/radio-option.types\";\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 selectOptionByKeyboard(option: RadioOptionType | undefined): void {\n        if (!option || option.isDisabled()) {\n            return;\n        }\n\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        const newSelectedController = this.radioRenderControllers.getController(option.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, initiator: 'ui' });\n        this.radioOptionManager.updateSelectedOption(option.getId());\n    }\n\n    private handleKeyDown(event : KeyboardEvent){\n        const key = event.key\n\n        const readonly = this.optionHandler.isReadOnly()\n        if(readonly || this.optionHandler.isDisabled()){\n            return\n        }\n\n\n        switch (key) {\n            case \"ArrowDown\":\n                case \"ArrowRight\":\n            this.selectOptionByKeyboard(this.radioOptionManager.getNextOption());\n              break;\n\n            case \"ArrowUp\":\n                case \"ArrowLeft\":\n            this.selectOptionByKeyboard(this.radioOptionManager.getPreviousOption());\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        const currentIndex = this.selectedOption\n            ? options.findIndex(opt => opt.getId() === this.selectedOption.getId())\n            : options.length;\n\n        for (let i = currentIndex - 1; i >= 0; i--) {\n            if (!options[i].isDisabled()) {\n                return options[i];\n            }\n        }\n        return undefined;\n    }\n    \n    getNextOption(): RadioOptionType | undefined {\n        const options = this.getOptions();\n        if (options.length === 0) return undefined;\n\n        const currentIndex = this.selectedOption\n            ? options.findIndex(opt => opt.getId() === this.selectedOption.getId())\n            : -1;\n\n        for (let i = currentIndex + 1; i < options.length; i++) {\n            if (!options[i].isDisabled()) {\n                return options[i];\n            }\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    UPDATE_PROPERTIES_IN_TO_PICKER  : 'UPDATE_PROPERTIES_IN_TO_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\";\nimport { DateRange, DateRangePickerDataManagerType } from \"./date-range-picker-data-manager.types\";\nimport { DATE_RANGE_PIKCER_CUSTOM_EVENTS } from \"../../constant/event-name\";\n\n\n@Bean(DATE_RANGE_PICKER_BEAN_NAME.API)\nexport class DateRangePickerApi extends EventEmitter implements DateRangePickerApiType {\n\n    @AutoWired(DATE_RANGE_FIELD_BEAN_NAME.CONTROLLER) controllerHandler !: DateRangePickerControllerHandlerType;\n    @AutoWired(DATE_RANGE_PICKER_BEAN_NAME.DATA_MANAGER) dataManager !: DateRangePickerDataManagerType;\n\n\n    getElement(): HTMLElement {\n        const rootController = this.controllerHandler.getDateRangePickerFieldController();\n        return rootController.getElement();\n    }\n\n    getDateRange(): DateRange {\n        return this.dataManager.getDateRange();\n    }\n\n    setDateRange(range: DateRange): void {\n        this.dataManager.setDateRange(range);\n\n        const fromDate = range.from !== null ? new Date(range.from) : null;\n        const toDate   = range.to !== null ? new Date(range.to) : null;\n\n        this.dispatchEvent({\n            type      : DATE_RANGE_PIKCER_CUSTOM_EVENTS.UPDATE_PROPERTIES_IN_FROM_PICKER,\n            properties: { value: fromDate },\n        });\n        this.dispatchEvent({\n            type      : DATE_RANGE_PIKCER_CUSTOM_EVENTS.UPDATE_PROPERTIES_IN_TO_PICKER,\n            properties: { value: toDate },\n        });\n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MINIMUM_DATE,\n            value: fromDate,\n        });\n        this.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MAXIMUM_DATE,\n            value: toDate,\n        });\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: unknown): 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","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 dayjs, { Dayjs } from \"dayjs\";\n\nexport type DateInput = Date | string | number | Dayjs | null | undefined;\n\n/**\n * Accepts a Date object, a Unix ms timestamp, or null/undefined.\n * Always returns a Unix ms timestamp or null.\n */\nexport function toTimestamp(value: Date | number | null | undefined): number | null {\n\tif (value == null) return null;\n\tif (value instanceof Date) return value.getTime();\n\treturn value;\n}\n\n/**\n * Converts a date-like value to the inclusive end of that calendar day (23:59:59.999).\n * Used for the range picker's to date so the whole selected day is covered.\n */\nexport function toEndOfDayTimestamp(value: Date | number | null | undefined): number | null {\n\tconst timestamp = toTimestamp(value);\n\tif (timestamp === null) {\n\t\treturn null;\n\t}\n\treturn dayjs(timestamp).endOf(\"day\").valueOf();\n}\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","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\";\nimport { toTimestamp } from \"../utils/date-utils\";\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        this.syncMaxDateConstraint();\n\n    }\n\n    private createDatePickerConfiguration():any{\n        const element = this.component?.getElement() as HTMLElement;\n        const minDateTs = toTimestamp(this.optionsHandler.getMinDate());\n        const maxDateTs = toTimestamp(this.dataManger.getToDate() ?? this.optionsHandler.getToValue());\n\n        const datePickerConfiguration = {\n                appendTo         : element,\n                value            : this.dataManger.getFromDateAsDate(),\n                minDate          : minDateTs !== null ? new Date(minDateTs) : null,\n                maxDate          : maxDateTs !== null ? new Date(maxDateTs) : null,\n                closeOnSelect    : false,\n                shouldDeselect   : true,\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(toTimestamp(value));\n                                        this.dispatchEvent({\n                                            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MINIMUM_DATE,\n                                            value \n                                        })\n                                 }, \n\n                onDeselect       : (_value:Date)=>{\n                                        this.dataManger.setFromDate(null);\n                                        this.dispatchEvent({\n                                            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.SET_MINIMUM_DATE,\n                                            value : null\n                                        })\n                                 },\n        }\n\n\n        return datePickerConfiguration\n    }\n\n    private updateProperties(params : {type : string,properties :any}){\n        this.datepicker.api.updateProperties(params.properties)\n\n    }\n\n    private setMaximumDate(_params : {type : string,value :Date | null}){\n        this.syncMaxDateConstraint();\n    }\n\n    private syncMaxDateConstraint(): void {\n        if (!this.datepicker) {\n            return;\n        }\n        const maxDateTs = toTimestamp(this.dataManger.getToDate());\n        this.datepicker.api.updateProperties({\n            maxDate: maxDateTs !== null ? new Date(maxDateTs) : null\n        });\n    }\n\n    private onDateRangeChange(params: DateRangeChangeEvent){\n        this.syncMaxDateConstraint();\n\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}\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 ,DateRangeChangeEvent} from \"../model/date-range-picker-data-manager.types\";\nimport { toTimestamp } from \"../utils/date-utils\";\n\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_TO_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        this.dataManger.onDateRangeChange(this.onDateRangeChange.bind(this));\n\n        this.syncMinDateConstraint();\n\n    }\n\n    private createDatePickerConfiguration():any{\n        const element = this.component?.getElement() as HTMLElement;\n        const minDateTs = toTimestamp(this.dataManger.getFromDate() ?? this.optionsHandler.getFromValue());\n        const maxDateTs = toTimestamp(this.optionsHandler.getMaxDate());\n\n        const datePickerConfiguration = {\n                appendTo         : element,\n                value            : this.dataManger.getToDateAsDate(),\n                closeOnSelect    : false,\n                shouldDeselect   : true,\n                inputElement     : this.optionsHandler.getInputElement(),\n                maxDate          : maxDateTs !== null ? new Date(maxDateTs) : null,\n                minDate          : minDateTs !== null ? new Date(minDateTs) : null,\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(toTimestamp(value));\n                            const validationParams = this.dataManger.validateDateRange();\n                            const immediateCommit = this.optionsHandler.shouldImmediateCommit();\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.updateProperties(params.properties)\n\n    }\n\n    private setMinimumDate(_params : {type : string,value :Date | null}){\n        this.syncMinDateConstraint();\n    }\n\n    private syncMinDateConstraint(): void {\n        if (!this.datepicker) {\n            return;\n        }\n        const minDateTs = toTimestamp(this.dataManger.getFromDate());\n        this.datepicker.api.updateProperties({\n            minDate: minDateTs !== null ? new Date(minDateTs) : null\n        });\n    }\n\n    private onDateRangeChange(params: DateRangeChangeEvent){\n        this.syncMinDateConstraint();\n\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\nfunction createId(){\n    return `datepicker-${Math.random().toString(36).substring(2, 9)}`;\n}\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    DateTimestamp\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\";\nimport { toEndOfDayTimestamp, toTimestamp } from \"../utils/date-utils\";\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: DateTimestamp | null = null;\n    private toDate: DateTimestamp | null = null;\n    private constraints: DateRangeConstraints = {};\n    private initialized: boolean = false;\n    private changeCallbacks: ((event: DateRangeChangeEvent) => void)[] = [];\n\n    @PostConstruct()\n    init(): void {\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        const minTs = toTimestamp(minDate);\n        const maxTs = toTimestamp(maxDate);\n        if (minTs !== null) initialConstraints.minDate = minTs;\n        if (maxTs !== null) initialConstraints.maxDate = maxTs;\n        if (minDaysToSelect !== null) initialConstraints.minRange = minDaysToSelect as number;\n        if (maxDaysToSelect !== null) initialConstraints.maxRange = maxDaysToSelect as number;\n        this.setConstraints(initialConstraints);\n\n        const from = this.optionHandler.getFromValue?.() ?? null;\n        const to = this.optionHandler.getToValue?.() ?? null;\n\n        const fromTs = toTimestamp(from);\n        const toTs = toEndOfDayTimestamp(to);\n        if (fromTs !== null) this.fromDate = fromTs;\n        if (toTs !== null) this.toDate = toTs;\n\n        this.initialized = true;\n    }\n\n    // Core data management\n    getFromDate(): DateTimestamp | null {\n        return this.fromDate;\n    }\n\n    getToDate(): DateTimestamp | null {\n        return this.toDate;\n    }\n\n    getFromDateAsDate(): Date | null {\n        return this.fromDate !== null ? new Date(this.fromDate) : null;\n    }\n\n    getToDateAsDate(): Date | null {\n        return this.toDate !== null ? new Date(this.toDate) : null;\n    }\n\n    getDateRange(): DateRange {\n        return {\n            from: this.fromDate,\n            to: this.toDate\n        };\n    }\n\n    setFromDate(ts: DateTimestamp | null): void {\n        const previousRange = this.getDateRange();\n        this.fromDate = ts;\n        \n        // Auto-adjust to date if it's before from date\n        if (ts && this.toDate && this.toDate < ts) {\n            this.toDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'from',\n            value: ts,\n            range: this.getDateRange(),\n            previousRange\n        });\n    }\n\n    setToDate(ts: DateTimestamp | null): void {\n        const previousRange = this.getDateRange();\n        // To date covers the whole selected day (e.g. 1 Aug 2026 → 23:59:59.999).\n        const endOfDayTs = ts === null ? null : toEndOfDayTimestamp(ts);\n        this.toDate = endOfDayTs;\n        \n        // Auto-adjust from date if it's after to date\n        if (endOfDayTs && this.fromDate && this.fromDate > endOfDayTs) {\n            this.fromDate = null;\n        }\n        \n        this.emitDateRangeChange({\n            type: 'to',\n            value: endOfDayTs,\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 === null ? null : toEndOfDayTimestamp(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(ts: DateTimestamp, type: 'from' | 'to'): boolean {\n        // Check if date is disabled\n        if (this.isDateDisabled(ts)) {\n            return false;\n        }\n\n        // Check min/max constraints\n        if (this.constraints.minDate && ts < this.constraints.minDate) {\n            return false;\n        }\n        if (this.constraints.maxDate && ts > 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 - ts) / (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((ts - this.fromDate) / (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(ts: DateTimestamp): boolean {\n        if (!this.fromDate || !this.toDate) {\n            return false;\n        }\n        return ts >= this.fromDate && ts <= 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(ts: DateTimestamp): boolean {\n        // Check disabled dates\n        if (this.constraints.disabledDates) {\n            for (const disabledDate of this.constraints.disabledDates) {\n                if (this.isSameDay(ts, disabledDate)) {\n                    return true;\n                }\n            }\n        }\n\n        // Check disabled days of week\n        if (this.constraints.disabledDays) {\n            const dayOfWeek = new Date(ts).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 - this.fromDate) / (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(ts1: DateTimestamp, ts2: DateTimestamp): boolean {\n        const d1 = new Date(ts1);\n        const d2 = new Date(ts2);\n        return d1.getFullYear() === d2.getFullYear() &&\n               d1.getMonth() === d2.getMonth() &&\n               d1.getDate() === d2.getDate();\n    }\n\n    private formatDate(ts: DateTimestamp, format: string): string {\n        const date = new Date(ts);\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}\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 | number | null{\n        return this.configuration.fromValue ?? null\n    }\n    \n    getToValue(): Date | number | null{\n        return this.configuration.toValue ?? null\n    }\n\n    getMinDate(): Date | number | null{\n        return this.configuration.minDate ?? null\n    }\n\n    getMaxDate(): Date | number | 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.dispatchEvent({\n            type : DATE_RANGE_PIKCER_CUSTOM_EVENTS.UPDATE_PROPERTIES_IN_TO_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 | number | null{\n        return this.configuration.fromValue ?? null\n    }\n    \n    getToValue(): Date | number | null{\n        return this.configuration.toValue ?? null\n    }\n\n    getMinDate(): Date | number | null{\n        return this.configuration.min ?? null\n    }\n\n    getMaxDate(): Date | number | 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 { DateRangeFieldModelType } from \"./date-range-field-data-manager.types\";\nimport { DateRange as PickerDateRange } from \"../../../../date-range-picker/src/core/model/date-range-picker-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() ?? undefined,\n                toValue        : this.dataManager.getToDate() ?? undefined,\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: PickerDateRange)=>{\n                                        if(params.from && params.to){\n                                            this.dataManager.setDateRange({\n                                                from: new Date(params.from),\n                                                to  : new Date(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\";\nimport { toTimestamp } from \"../../../../date-range-picker/src/core/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        const minTs = toTimestamp(this.optionHandler.getMinDate?.() ?? null);\n        const maxTs = toTimestamp(this.optionHandler.getMaxDate?.() ?? null);\n        this.minDate = minTs !== null ? new Date(minTs) : null;\n        this.maxDate = maxTs !== null ? new Date(maxTs) : 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\tUPLOAD_TOOLTIP_HANDLER: \"UploadTooltipHandler\",\n};\n\nexport { UPLOAD_BEAN_NAME };\n","import type { IUploadConfiguration, UploadContentType } from \"./upload-configuration.types\";\n\nexport const UPLOAD_CONTENT_TYPE_DEFAULT: UploadContentType = \"image\";\n\nexport function isDirectoryUploadType(type?: UploadContentType): boolean {\n    return type === \"directory\";\n}\n\n/** Extensions for `type: \"file\"` (documents; excludes image, video, and audio). */\nexport const DEFAULT_FILE_CONTENT_EXTENSIONS = [\n    \".pdf\",\n    \".txt\",\n    \".html\",\n    \".htm\",\n    \".doc\",\n    \".docx\",\n    \".xls\",\n    \".xlsx\",\n    \".ppt\",\n    \".pptx\",\n    \".csv\",\n    \".json\",\n    \".xml\",\n    \".md\",\n    \".rtf\",\n    \".zip\",\n    \".rar\",\n    \".7z\",\n    \".gz\",\n    \".tar\",\n] as const;\n\nconst DEFAULT_FILE_CONTENT_TYPES: string[] = [...DEFAULT_FILE_CONTENT_EXTENSIONS];\n\nconst ACCEPT_BY_CONTENT_TYPE: Record<Exclude<UploadContentType, \"directory\">, string> = {\n    image: \"image/*\",\n    video: \"video/*\",\n    audio: \"audio/*\",\n    file: DEFAULT_FILE_CONTENT_EXTENSIONS.join(\",\"),\n};\n\nexport function resolveUploadContentType(type?: UploadContentType): UploadContentType {\n    if (isDirectoryUploadType(type)) {\n        return UPLOAD_CONTENT_TYPE_DEFAULT;\n    }\n    return type ?? UPLOAD_CONTENT_TYPE_DEFAULT;\n}\n\nexport function getAcceptForUploadContentType(type: UploadContentType): string {\n    if (isDirectoryUploadType(type)) {\n        return \"\";\n    }\n    return ACCEPT_BY_CONTENT_TYPE[type as Exclude<UploadContentType, \"directory\">];\n}\n\n/** `accept` on the hidden file input; folder pick clears the filter. */\nexport function resolveFileInputAccept(\n    cfg: Pick<\n        IUploadConfiguration,\n        \"accept\" | \"type\" | \"allowFolder\" | \"directory\" | \"allowedFileTypes\"\n    >,\n): string {\n    if (isDirectoryUploadType(cfg.type)) {\n        return \"\";\n    }\n    if (cfg.allowFolder || cfg.directory) {\n        return \"\";\n    }\n    const explicit = cfg.accept?.trim();\n    if (explicit) {\n        return explicit;\n    }\n    if (cfg.allowedFileTypes?.length) {\n        return allowedFileTypesToAccept(cfg.allowedFileTypes);\n    }\n    return getAcceptForUploadContentType(resolveUploadContentType(cfg.type));\n}\n\nexport function fileMatchesUploadContentType(file: File, contentType: UploadContentType): boolean {\n    if (contentType === \"file\") {\n        return fileMatchesAllowedFileTypes(file, DEFAULT_FILE_CONTENT_TYPES);\n    }\n    const mime = file.type;\n    if (!mime) {\n        return false;\n    }\n    switch (contentType) {\n        case \"image\":\n            return mime.startsWith(\"image/\");\n        case \"video\":\n            return mime.startsWith(\"video/\");\n        case \"audio\":\n            return mime.startsWith(\"audio/\");\n        default:\n            return false;\n    }\n}\n\n/** Extension groups treated as equivalent (e.g. `.jpg` allows `.jpeg` files). */\nconst EQUIVALENT_EXTENSIONS: string[][] = [[\"jpg\", \"jpeg\"], [\"tif\", \"tiff\"]];\n\nconst EXTENSION_TO_MIME: Record<string, string> = {\n    jpg: \"image/jpeg\",\n    jpeg: \"image/jpeg\",\n    png: \"image/png\",\n    gif: \"image/gif\",\n    webp: \"image/webp\",\n    svg: \"image/svg+xml\",\n    mp4: \"video/mp4\",\n    webm: \"video/webm\",\n    mp3: \"audio/mpeg\",\n    wav: \"audio/wav\",\n    pdf: \"application/pdf\",\n    txt: \"text/plain\",\n    html: \"text/html\",\n    htm: \"text/html\",\n    doc: \"application/msword\",\n    docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n    xls: \"application/vnd.ms-excel\",\n    xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n    csv: \"text/csv\",\n    json: \"application/json\",\n    xml: \"application/xml\",\n    md: \"text/markdown\",\n    rtf: \"application/rtf\",\n    zip: \"application/zip\",\n};\n\nfunction normalizeAllowedFileTypeEntry(entry: string): { mime?: string; extension?: string } {\n    const trimmed = entry.trim().toLowerCase();\n    if (!trimmed) {\n        return {};\n    }\n    if (trimmed.includes(\"/\")) {\n        return { mime: trimmed };\n    }\n    return { extension: trimmed.startsWith(\".\") ? trimmed.slice(1) : trimmed };\n}\n\nfunction getFileExtension(fileName: string): string {\n    const lastDot = fileName.lastIndexOf(\".\");\n    if (lastDot <= 0) {\n        return \"\";\n    }\n    return fileName.slice(lastDot + 1).toLowerCase();\n}\n\nfunction extensionsAreEquivalent(a: string, b: string): boolean {\n    if (a === b) {\n        return true;\n    }\n    return EQUIVALENT_EXTENSIONS.some(\n        (group) => group.includes(a) && group.includes(b),\n    );\n}\n\n/** Matches MIME types (`image/jpeg`) or extensions (`.jpeg`, `png`). */\nexport function fileMatchesAllowedFileTypes(file: File, allowedFileTypes: string[]): boolean {\n    if (!allowedFileTypes.length) {\n        return true;\n    }\n\n    const fileMime = file.type?.toLowerCase() ?? \"\";\n    const fileExtension = getFileExtension(file.name);\n\n    return allowedFileTypes.some((entry) => {\n        const { mime, extension } = normalizeAllowedFileTypeEntry(entry);\n        if (mime) {\n            return fileMime === mime;\n        }\n        if (!extension) {\n            return false;\n        }\n        if (fileExtension && extensionsAreEquivalent(fileExtension, extension)) {\n            return true;\n        }\n        const expectedMime = EXTENSION_TO_MIME[extension];\n        if (fileMime && expectedMime && fileMime === expectedMime) {\n            return true;\n        }\n        return false;\n    });\n}\n\n/** Builds the file input `accept` value from `allowedFileTypes`. */\nexport function allowedFileTypesToAccept(allowedFileTypes: string[] | string): string {\n    if(typeof allowedFileTypes === \"string\") {\n        allowedFileTypes = allowedFileTypes.split(\",\");\n    }\n    return allowedFileTypes\n        .map((entry) => {\n            const trimmed = entry.trim();\n            if (!trimmed) {\n                return \"\";\n            }\n            if (trimmed.includes(\"/\")) {\n                return trimmed;\n            }\n            return trimmed.startsWith(\".\") ? trimmed : `.${trimmed}`;\n        })\n        .filter(Boolean)\n        .join(\",\");\n}\n","import type { ISelectedDirectory, IUploadConfiguration } from \"./upload-configuration.types\";\n\n/** Joins path segments into `documents/some/some` (no leading slash). */\nexport function joinDirectoryPath(...segments: Array<string | undefined | null>): string {\n    return segments\n        .flatMap((segment) => (segment ?? \"\").split(\"/\"))\n        .map((part) => part.trim())\n        .filter(Boolean)\n        .join(\"/\");\n}\n\n/** Best-effort path from `webkitRelativePath` when folder pick uses the file-input fallback. */\nexport function extractDirectoryFromFileList(fileList: FileList): { name: string; path: string } {\n    const paths = Array.from(fileList)\n        .map((file) => file.webkitRelativePath)\n        .filter((path): path is string => !!path);\n\n    if (!paths.length) {\n        const first = fileList[0];\n        const fallback = first?.name ?? \"\";\n        return { name: fallback, path: fallback };\n    }\n\n    const rootName = paths[0].split(\"/\")[0] ?? \"\";\n    const directoryPaths = paths.map((path) => {\n        const parts = path.split(\"/\");\n        parts.pop();\n        return parts.join(\"/\");\n    });\n\n    let commonParts = directoryPaths[0].split(\"/\").filter(Boolean);\n    for (let i = 1; i < directoryPaths.length; i++) {\n        const parts = directoryPaths[i].split(\"/\").filter(Boolean);\n        let index = 0;\n        while (\n            index < commonParts.length &&\n            index < parts.length &&\n            commonParts[index] === parts[index]\n        ) {\n            index++;\n        }\n        commonParts = commonParts.slice(0, index);\n    }\n\n    const path = commonParts.join(\"/\") || rootName;\n    return { name: rootName, path };\n}\n\nexport type DirectoryPathBuilderArgs = {\n    name: string;\n    handle?: FileSystemDirectoryHandle;\n    path?: string;\n};\n\n/** Resolves the slash-separated `path` shown in the UI and returned from the API. */\nexport async function resolveDirectoryPath(\n    props: Pick<IUploadConfiguration, \"directoryPathPrefix\" | \"buildDirectoryPath\">,\n    base: DirectoryPathBuilderArgs,\n    files?: FileList | null,\n): Promise<ISelectedDirectory> {\n    let path = base.path?.trim();\n\n    if (!path && files?.length) {\n        path = extractDirectoryFromFileList(files).path;\n    }\n    if (!path) {\n        path = base.name.trim();\n    }\n\n    const prefix = props.directoryPathPrefix?.trim().replace(/\\/+$/, \"\");\n    if (prefix) {\n        path = joinDirectoryPath(prefix, base.name);\n    }\n\n    if (props.buildDirectoryPath) {\n        const built = await Promise.resolve(\n            props.buildDirectoryPath({ name: base.name, handle: base.handle, path }),\n        );\n        if (typeof built === \"string\" && built.trim()) {\n            path = built.trim().replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n        }\n    }\n\n    return {\n        name: base.name,\n        path,\n        handle: base.handle,\n    };\n}\n\n/** Display / API path — prefers `path`, then `name`. */\nexport function getDirectoryDisplayPath(directory: ISelectedDirectory | null | undefined): string {\n    if (!directory) {\n        return \"\";\n    }\n    return directory.path?.trim() || directory.name.trim();\n}\n","import type { IUploadFile } from \"./upload-configuration.types\";\n\nexport type UploadErrorType =\n    | \"minCount\"\n    | \"required\"\n    | \"maxCount\"\n    | \"maxFileSize\"\n    | \"minFileSize\"\n    | \"fileType\"\n    | \"validation\"\n    | \"upload\";\n\nexport class UploadError extends Error {\n    readonly type: UploadErrorType;\n    readonly file?: IUploadFile;\n    readonly fileList: IUploadFile[];\n    readonly cause?: unknown;\n\n    constructor(\n        type: UploadErrorType,\n        message: string,\n        options?: {\n            file?: IUploadFile;\n            fileList?: IUploadFile[];\n            cause?: unknown;\n        },\n    ) {\n        super(message);\n        this.name = \"UploadError\";\n        this.type = type;\n        this.file = options?.file;\n        this.fileList = options?.fileList ?? [];\n        this.cause = options?.cause;\n    }\n}\n","import { IUploadConfiguration } from \"../upload-configuration.types\";\n\n/** DOM id for the hidden file input; must match `UploadRenderer` and `UploadOptionHandler.getAriaLabelledby`. */\nexport function getUploadFileInputDomId(configuration: IUploadConfiguration): 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 { setAriaInvalid } from \"@dg/corecomponent\";\nimport {fileMatchesAllowedFileTypes,fileMatchesUploadContentType,isDirectoryUploadType,resolveFileInputAccept,resolveUploadContentType} from \"../../upload-content-type\";\nimport {extractDirectoryFromFileList,getDirectoryDisplayPath,resolveDirectoryPath} from \"../../upload-directory-path\";\nimport {IUploadFile,IUploadConfiguration,IRenderer,IUploadItemRendererParams,IUploadOverlayRendererParams,IUploadPanelRendererParams,ISelectedDirectory} from \"../../upload-configuration.types\";\nimport { UploadError, UploadErrorType } from \"../../upload-error.types\";\nimport { getUploadFileInputDomId } from \"../upload-file-input-id\";\nimport { UploadOptionHandler } from \"../model/upload-option-handler\";\n\n\nexport const KB = 1024;\nexport class UploadRenderer implements IRenderer {\n    private rootElement!: HTMLElement;\n    private fileInput!: HTMLInputElement;\n    private listContainer!: HTMLElement;\n    private readonly loadingUids = new Set<string>();\n    private readonly itemLoaderInstances = new Map<string, IRenderer>();\n    private files: IUploadFile[];\n    private activeUploads: Record<string, XMLHttpRequest | number>;\n    private props: IUploadConfiguration;\n    private inputPanelRendererImpl: IRenderer | undefined;\n    private itemRendererInstances: IRenderer[] = [];\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    private triggerHost: HTMLElement | null = null;\n    private directoryNameEl: HTMLElement | null = null;\n    private directoryChooseBtn: HTMLButtonElement | null = null;\n    private selectedDirectory: ISelectedDirectory | null = null;\n    private readonly optionHandler: UploadOptionHandler;\n    private outerRoot: HTMLElement | null = null;\n    /** Last validation message shown; preserved on blur instead of replacing with min-count error */\n    private lastValidationMessage: string | null = null;\n    /** Native file dialog moves focus out of the page; skip blur handlers until it closes. */\n    private suppressBlurValidationForFilePicker = false;\n    /** True between `openFilePicker()` and `change` or picker dismiss — min-count validates only on dismiss. */\n    private awaitingFilePickerResult = false;\n    private readonly onShellFocusIn: () => void;\n    private readonly onShellFocusOut: (ev: FocusEvent) => void;\n    private readonly onWindowFocusAfterFilePicker: () => void;\n\n    constructor(props: IUploadConfiguration, optionHandler: UploadOptionHandler) {\n        this.props = props;\n        this.optionHandler = optionHandler;\n        this.files = [...(props.fileList ?? props.defaultFileList ?? [])];\n        this.activeUploads = {};\n        const defaultDirectory = props.defaultDirectory?.trim();\n        const defaultDirectoryPath = props.defaultDirectoryPath?.trim();\n        if (defaultDirectory || defaultDirectoryPath) {\n            this.selectedDirectory = {\n                name: defaultDirectory ?? defaultDirectoryPath?.split(\"/\").filter(Boolean).pop() ?? \"\",\n                path: defaultDirectoryPath ?? defaultDirectory,\n            };\n        }\n        this.onShellFocusIn = () => {\n            if (this.optionHandler.isDisabled()) {\n                return;\n            }\n            this.outerRoot?.classList.add(\"dg-input__status--focus\");\n        };\n        this.onShellFocusOut = (ev: FocusEvent) => {\n            const next = ev.relatedTarget as Node | null;\n            if (next && this.rootElement.contains(next)) {\n                return;\n            }\n            this.outerRoot?.classList.remove(\"dg-input__status--focus\");\n            if (this.suppressBlurValidationForFilePicker) {\n                return;\n            }\n            this.syncValidationDisplayOnBlur();\n        };\n        this.onWindowFocusAfterFilePicker = () => {\n            if (!this.awaitingFilePickerResult) {\n                this.suppressBlurValidationForFilePicker = false;\n                return;\n            }\n            this.awaitingFilePickerResult = false;\n            this.suppressBlurValidationForFilePicker = false;\n            window.setTimeout(() => {\n                this.validateMinFileCountAfterPickerDismissed();\n            }, 0);\n        };\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        if (this.isDirectoryMode()) {\n            this.rootElement.classList.add(\"dg-upload__gui--directory\");\n        }\n        this.rootElement.tabIndex = 0;\n\n        this.createFileInput();\n        this.createTrigger();\n        this.createListContainer();\n        this.bindPasteHandler();\n        this.bindFocusValidationHandlers();\n        this.renderList();\n        this.syncInteractionState();\n    }\n\n    public setOuterFieldRoot(root: HTMLElement): void {\n        this.outerRoot = root;\n        this.syncInteractionState();\n    }\n\n    public getGui(): HTMLElement {\n        return this.rootElement;\n    }\n\n    public getTooltipAnchor(): HTMLElement {\n        return this.triggerHost ?? this.fileInput ?? this.rootElement;\n    }\n\n    /** Focusable upload shell (mirrors Text `getRootElement` for `focus` / `blur` API). */\n    public getFocusElement(): HTMLElement {\n        return this.rootElement;\n    }\n\n    public focus(): void {\n        this.getFocusElement().focus();\n    }\n\n    public blur(): void {\n        this.getFocusElement().blur();\n    }\n\n    public showErrorMessage(message?: string): void {\n        if (message !== undefined) {\n            this.lastValidationMessage = message;\n            this.optionHandler.updateValidationMessage(message);\n        } else {\n            const currentMessage = this.optionHandler.getValidationMessage();\n            this.lastValidationMessage = currentMessage || null;\n        }\n        this.optionHandler.updateStatus(\"error\");\n        this.syncValidationChrome(true);\n    }\n\n    public hideErrorMessage(): void {\n        this.clearFieldValidation();\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.inputPanelRendererImpl?.destroy?.();\n        this.inputPanelRendererImpl = undefined;\n        this.destroyItemRenderers();\n        this.destroyAllItemLoaders();\n        this.closePreviewOverlay();\n        this.revokeBlobPreviewUrls();\n        this.rootElement?.removeEventListener(\"focusin\", this.onShellFocusIn);\n        this.rootElement?.removeEventListener(\"focusout\", this.onShellFocusOut);\n        window.removeEventListener(\"focus\", this.onWindowFocusAfterFilePicker);\n    }\n\n    public getFileList(): IUploadFile[] {\n        return [...this.files];\n    }\n\n    public setFileList(fileList: IUploadFile[]): void {\n        const next = [...fileList];\n        this.revokeBlobPreviewsNotInFileList(next);\n        this.files = next;\n        this.emitChange();\n        this.renderList();\n    }\n\n    public addFileList(fileList: IUploadFile[]): void {\n        const incoming = [...fileList];\n        if (incoming.length === 0) {\n            return;\n        }\n        const maxCount = this.props.maxCount;\n        const mergedList = [...this.files, ...incoming];\n        const next = typeof maxCount === \"number\" ? mergedList.slice(0, maxCount) : mergedList;\n        this.revokeBlobPreviewsNotInFileList(next);\n        this.files = next;\n        this.emitChange();\n        this.renderList();\n    }\n\n    public clearFiles(): void {\n        this.revokeBlobPreviewUrls();\n        this.files = [];\n        this.loadingUids.clear();\n        this.emitChange();\n        this.renderList();\n    }\n\n    public showLoader(uid: string | string[]): void {\n        this.normalizeLoaderUids(uid).forEach((id) => {\n            if (this.files.some((file) => file.uid === id)) {\n                this.loadingUids.add(id);\n            }\n        });\n        this.syncItemLoaders();\n    }\n\n    public removeLoader(uid: string | string[]): void {\n        this.normalizeLoaderUids(uid).forEach((id) => this.loadingUids.delete(id));\n        this.syncItemLoaders();\n    }\n\n    public removeAllLoader(): void {\n        this.loadingUids.clear();\n        this.syncItemLoaders();\n    }\n\n    public showAllLoader(): void {\n        this.files.forEach((file) => this.loadingUids.add(file.uid));\n        this.syncItemLoaders();\n    }\n\n    public upload(file?: IUploadFile): void {\n        if (this.optionHandler.isDisabled() || this.optionHandler.isReadOnly()) {\n            return;\n        }\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    public syncInteractionState(): void {\n        const disabled = this.optionHandler.isDisabled();\n        const readOnly = this.optionHandler.isReadOnly();\n\n        const applyUploadShellChrome = (el: HTMLElement | null) => {\n            if (!el) {\n                return;\n            }\n            el.classList.toggle(\"dg-upload__status--disabled\", disabled);\n            el.classList.toggle(\"dg-upload__status--read-only\", readOnly && !disabled);\n        };\n\n        applyUploadShellChrome(this.rootElement);\n        applyUploadShellChrome(this.triggerHost);\n        applyUploadShellChrome(this.outerRoot);\n\n        if (this.fileInput) {\n            this.fileInput.disabled = disabled;\n            this.fileInput.classList.toggle(\"dg-input__status--disabled\", disabled);\n            this.fileInput.classList.toggle(\"dg-input__status--read-only\", readOnly && !disabled);\n            this.fileInput.setAttribute(\"aria-disabled\", disabled ? \"true\" : \"false\");\n            this.fileInput.setAttribute(\"aria-readonly\", readOnly && !disabled ? \"true\" : \"false\");\n            this.fileInput.setAttribute(\"aria-required\", this.optionHandler.isRequired() ? \"true\" : \"false\");\n        }\n\n        if (this.rootElement) {\n            this.rootElement.tabIndex = disabled ? -1 : 0;\n        }\n        if (this.triggerHost) {\n            this.triggerHost.setAttribute(\"aria-disabled\", disabled ? \"true\" : \"false\");\n            this.triggerHost.setAttribute(\"aria-readonly\", readOnly && !disabled ? \"true\" : \"false\");\n        }\n        if (this.directoryChooseBtn) {\n            this.directoryChooseBtn.disabled = disabled || readOnly;\n        }\n    }\n\n    private isDirectoryMode(): boolean {\n        return isDirectoryUploadType(this.props.type);\n    }\n\n    private shouldUploadFolderContents(): boolean {\n        return !!(this.props.allowFolder || this.props.directory);\n    }\n\n    private hasDirectorySelection(): boolean {\n        return !!this.selectedDirectory?.name;\n    }\n\n    public getSelectedDirectory(): ISelectedDirectory | null {\n        return this.selectedDirectory ? { ...this.selectedDirectory } : null;\n    }\n\n    public setSelectedDirectory(directory: ISelectedDirectory | null): void {\n        if (!directory) {\n            this.selectedDirectory = null;\n            this.syncDirectoryDisplay();\n            this.props.onDirectoryChange?.(null);\n            this.revalidateFileCountAfterChange();\n            return;\n        }\n        void this.applyDirectorySelection(directory);\n    }\n\n    private async applyDirectorySelection(\n        base: ISelectedDirectory,\n        files?: FileList | null,\n    ): Promise<void> {\n        this.selectedDirectory = await resolveDirectoryPath(this.props, base, files);\n        this.syncDirectoryDisplay();\n        this.props.onDirectoryChange?.(this.selectedDirectory);\n        this.revalidateFileCountAfterChange();\n    }\n\n    /** True when the user must not add files, drop, paste, or remove (disabled or read-only). */\n    private isUserInputLocked(): boolean {\n        return this.optionHandler.isDisabled() || this.optionHandler.isReadOnly();\n    }\n\n    public applyConfiguration(cfg: IUploadConfiguration): void {\n        Object.assign(this.props, cfg);\n        if (cfg.defaultDirectory !== undefined || cfg.defaultDirectoryPath !== undefined) {\n            const name = cfg.defaultDirectory?.trim();\n            const path = cfg.defaultDirectoryPath?.trim();\n            if (!name && !path) {\n                this.selectedDirectory = null;\n            } else {\n                this.selectedDirectory = {\n                    name: name ?? path?.split(\"/\").filter(Boolean).pop() ?? \"\",\n                    path: path ?? name,\n                };\n            }\n            this.syncDirectoryDisplay();\n        }\n        this.rootElement?.classList.toggle(\"dg-upload__gui--directory\", this.isDirectoryMode());\n        if (!this.fileInput) {\n            this.syncInteractionState();\n            return;\n        }\n        this.syncFolderInputAttributes();\n        this.fileInput.id = getUploadFileInputDomId(this.props);\n        const caption = this.rootElement.querySelector(\".dg-upload__trigger-text\");\n        if (caption) {\n            caption.textContent = this.getTriggerCaption();\n        }\n        this.syncDirectoryDisplay();\n        this.renderList();\n        this.refreshPanelRenderer();\n        if (this.isUserInputLocked()) {\n            this.clearFieldValidation();\n        }\n        this.syncInteractionState();\n    }\n\n    private syncFolderInputAttributes(): void {\n        const pickFolder = this.shouldUseFolderInput();\n        this.fileInput.multiple = !!this.props.multiple || pickFolder;\n        this.syncFileInputAccept(pickFolder);\n        if (pickFolder) {\n            (this.fileInput as HTMLInputElement & { webkitdirectory?: boolean }).webkitdirectory = true;\n            this.fileInput.setAttribute(\"directory\", \"true\");\n        } else {\n            (this.fileInput as HTMLInputElement & { webkitdirectory?: boolean }).webkitdirectory = false;\n            this.fileInput.removeAttribute(\"directory\");\n        }\n    }\n\n    private shouldUseFolderInput(): boolean {\n        if (this.isDirectoryMode()) {\n            return this.shouldUploadFolderContents();\n        }\n        return !!(this.props.allowFolder || this.props.directory);\n    }\n\n    private syncFileInputAccept(pickFolder: boolean): void {\n        this.fileInput.accept = pickFolder ? \"\" : resolveFileInputAccept(this.props);\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.syncFolderInputAttributes();\n        this.fileInput.addEventListener(\"change\", () => {\n            this.awaitingFilePickerResult = false;\n            this.suppressBlurValidationForFilePicker = false;\n            const files = this.fileInput.files;\n            if (this.isDirectoryMode() && files?.length) {\n                const extracted = extractDirectoryFromFileList(files);\n                void this.applyDirectorySelection(\n                    { name: extracted.name, path: extracted.path },\n                    files,\n                );\n                if (this.shouldUploadFolderContents()) {\n                    this.onFilesAdded(files);\n                }\n            } else {\n                this.onFilesAdded(files);\n            }\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.inputPanelRenderer) {\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.inputPanelRenderer;\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        if (this.isDirectoryMode()) {\n            return \"Select a folder\";\n        }\n        if (this.props.allowFolder || this.props.directory) {\n            return dragAndDrop ? \"Click or drag a folder here to upload\" : \"Click to choose folder\";\n        }\n        return dragAndDrop ? \"Click or drag files here to upload\" : \"Click to select file\";\n    }\n\n    private getDirectoryPlaceholder(): string {\n        const ph = this.props.placeholder;\n        if (typeof ph === \"string\" && ph.trim()) {\n            return ph.trim();\n        }\n        return \"Select a folder\";\n    }\n\n    private createDirectoryFolderIcon(): HTMLElement {\n        const wrap = document.createElement(\"span\");\n        wrap.className = \"dg-upload__directory-icon\";\n        wrap.setAttribute(\"aria-hidden\", \"true\");\n        const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n        svg.setAttribute(\"width\", \"18\");\n        svg.setAttribute(\"height\", \"18\");\n        svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n        svg.setAttribute(\"fill\", \"currentColor\");\n        const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n        path.setAttribute(\n            \"d\",\n            \"M10 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\",\n        );\n        svg.appendChild(path);\n        wrap.appendChild(svg);\n        return wrap;\n    }\n\n    private syncDirectoryDisplay(): void {\n        const displayPath = getDirectoryDisplayPath(this.selectedDirectory);\n        if (this.directoryNameEl) {\n            this.directoryNameEl.textContent = displayPath || this.getDirectoryPlaceholder();\n            this.directoryNameEl.classList.toggle(\"dg-upload__directory-name--placeholder\", !displayPath);\n            if (this.directoryChooseBtn) {\n                const label = displayPath ? `Change folder ${displayPath}` : \"Choose folder\";\n                this.directoryChooseBtn.setAttribute(\"aria-label\", label);\n            }\n        }\n        this.refreshPanelRenderer();\n    }\n\n    private createPanelRendererParams(): IUploadPanelRendererParams {\n        return {\n            uploadProps: this.props,\n            openFilePicker: () => {\n                this.openFilePicker();\n            },\n            openDirectoryPicker: () => {\n                void this.openDirectoryPicker();\n            },\n            getSelectedDirectory: () => this.getSelectedDirectory(),\n            getDirectoryPlaceholder: () => this.getDirectoryPlaceholder(),\n            isDirectoryMode: () => this.isDirectoryMode(),\n            isUserInputLocked: () => this.isUserInputLocked(),\n            fileInput: this.fileInput,\n            ...(this.props.inputPanelRendererParams ?? {}),\n        };\n    }\n\n    private refreshPanelRenderer(): void {\n        this.inputPanelRendererImpl?.refresh?.(this.createPanelRendererParams());\n    }\n\n    private async onDirectoryHandleSelected(handle: FileSystemDirectoryHandle): Promise<void> {\n        this.awaitingFilePickerResult = false;\n        this.suppressBlurValidationForFilePicker = false;\n        await this.applyDirectorySelection({ name: handle.name, handle });\n    }\n\n    private async openDirectoryPicker(): Promise<void> {\n        if (this.isUserInputLocked()) {\n            return;\n        }\n        this.awaitingFilePickerResult = true;\n        this.suppressBlurValidationForFilePicker = true;\n\n        const showDirectoryPicker = (\n            window as Window & { showDirectoryPicker?: () => Promise<FileSystemDirectoryHandle> }\n        ).showDirectoryPicker;\n\n        if (typeof showDirectoryPicker === \"function\" && !this.shouldUploadFolderContents()) {\n            try {\n                const handle = await showDirectoryPicker.call(window);\n                await this.onDirectoryHandleSelected(handle);\n                return;\n            } catch (error) {\n                if (error instanceof DOMException && error.name === \"AbortError\") {\n                    this.awaitingFilePickerResult = false;\n                    this.suppressBlurValidationForFilePicker = false;\n                    return;\n                }\n            }\n        }\n\n        this.awaitingFilePickerResult = true;\n        this.suppressBlurValidationForFilePicker = true;\n        this.prepareDirectoryFallbackInput();\n        this.fileInput.click();\n    }\n\n    private prepareDirectoryFallbackInput(): void {\n        const input = this.fileInput as HTMLInputElement & { webkitdirectory?: boolean };\n        input.webkitdirectory = true;\n        input.multiple = true;\n        input.accept = \"\";\n        input.setAttribute(\"directory\", \"true\");\n    }\n\n    private createDirectoryPickerTrigger(): void {\n        const row = document.createElement(\"div\");\n        row.className = \"dg-upload__directory\";\n\n        const display = document.createElement(\"div\");\n        display.className = \"dg-upload__directory-display\";\n        display.appendChild(this.createDirectoryFolderIcon());\n\n        const nameEl = document.createElement(\"span\");\n        nameEl.className = \"dg-upload__directory-name\";\n        display.appendChild(nameEl);\n        this.directoryNameEl = nameEl;\n\n        const chooseBtn = document.createElement(\"button\");\n        chooseBtn.type = \"button\";\n        chooseBtn.className = \"dg-upload__directory-choose\";\n        chooseBtn.textContent = \"Choose\";\n        chooseBtn.addEventListener(\"click\", (event) => {\n            event.stopPropagation();\n            void this.openDirectoryPicker();\n        });\n        this.directoryChooseBtn = chooseBtn;\n\n        row.appendChild(display);\n        row.appendChild(chooseBtn);\n        this.triggerHost = row;\n        this.rootElement.appendChild(row);\n        this.syncDirectoryDisplay();\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        if (this.isDirectoryMode() && !this.usesPanelRenderer()) {\n            this.createDirectoryPickerTrigger();\n            return;\n        }\n\n        const dragAndDrop = this.isDirectoryMode() ? false : (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 (this.isDirectoryMode()) {\n            trigger.classList.add(\"dg-upload__trigger--directory\");\n        }\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.inputPanelRenderer!;\n            const impl = new Panel();\n            this.inputPanelRendererImpl = impl;\n            const panelParams = this.createPanelRendererParams();\n            impl.init?.(panelParams);\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\", () => {\n                this.openFilePicker();\n            });\n        } else if (!this.isDirectoryMode()) {\n            trigger.addEventListener(\"click\", (event) => {\n                if (this.isUserInputLocked()) {\n                    return;\n                }\n                if (event.target === trigger) {\n                    this.openFilePicker();\n                }\n            });\n        }\n\n        if (dragAndDrop && !this.isDirectoryMode()) {\n            trigger.addEventListener(\"dragover\", (event) => {\n                if (this.isUserInputLocked()) {\n                    return;\n                }\n                event.preventDefault();\n                trigger.classList.add(\"dg-upload__trigger--active\");\n            });\n            trigger.addEventListener(\"dragleave\", () => {\n                if (!this.isUserInputLocked()) {\n                    trigger.classList.remove(\"dg-upload__trigger--active\");\n                }\n            });\n            trigger.addEventListener(\"drop\", (event) => {\n                if (this.isUserInputLocked()) {\n                    return;\n                }\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.triggerHost = trigger;\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 normalizeLoaderUids(uid: string | string[]): string[] {\n        return Array.isArray(uid) ? uid : [uid];\n    }\n\n    private createItemOverlayParams(file: IUploadFile): IUploadOverlayRendererParams {\n        return {\n            file,\n            fileList: [...this.files],\n            uploadProps: this.props,\n            isUserInputLocked: () => this.isUserInputLocked(),\n            ...(this.props.overLayRendererParams ?? {}),\n        };\n    }\n\n    private destroyItemLoader(uid: string): void {\n        this.itemLoaderInstances.get(uid)?.destroy?.();\n        this.itemLoaderInstances.delete(uid);\n    }\n\n    private destroyAllItemLoaders(): void {\n        this.itemLoaderInstances.forEach((renderer) => renderer.destroy?.());\n        this.itemLoaderInstances.clear();\n    }\n\n    private pruneLoadingUids(): void {\n        const fileUids = new Set(this.files.map((file) => file.uid));\n        for (const uid of this.loadingUids) {\n            if (!fileUids.has(uid)) {\n                this.loadingUids.delete(uid);\n                this.destroyItemLoader(uid);\n            }\n        }\n    }\n\n    private findListItemByUid(uid: string): HTMLElement | null {\n        return this.listContainer?.querySelector(`:scope > [data-upload-uid=\"${uid}\"]`) as HTMLElement | null;\n    }\n\n    private detachItemLoader(listItem: HTMLElement, uid: string): void {\n        listItem.classList.remove(\"dg-upload__item--loading\");\n        listItem.querySelector(\":scope > .dg-upload__item-overlay\")?.remove();\n        this.destroyItemLoader(uid);\n    }\n\n    private attachItemLoader(listItem: HTMLElement, file: IUploadFile): void {\n        listItem.classList.add(\"dg-upload__item--loading\");\n\n        const existingOverlay = listItem.querySelector(\":scope > .dg-upload__item-overlay\");\n        if (existingOverlay && this.itemLoaderInstances.has(file.uid)) {\n            return;\n        }\n\n        existingOverlay?.remove();\n        this.destroyItemLoader(file.uid);\n\n        const overlayHost = document.createElement(\"div\");\n        overlayHost.className = \"dg-upload__item-overlay\";\n        overlayHost.setAttribute(\"aria-busy\", \"true\");\n\n        const OverlayRenderer = this.props.overLayRenderer;\n        if (OverlayRenderer) {\n            const impl = new OverlayRenderer();\n            impl.init?.(this.createItemOverlayParams(file));\n            this.itemLoaderInstances.set(file.uid, impl);\n            overlayHost.appendChild(impl.getGui());\n        } else {\n            const spinner = document.createElement(\"div\");\n            spinner.className = \"dg-upload__item-overlay-spinner\";\n            spinner.setAttribute(\"aria-hidden\", \"true\");\n            overlayHost.appendChild(spinner);\n        }\n\n        listItem.appendChild(overlayHost);\n    }\n\n    private syncItemLoaders(): void {\n        if (!this.listContainer) {\n            return;\n        }\n\n        this.pruneLoadingUids();\n\n        this.files.forEach((file) => {\n            const listItem = this.findListItemByUid(file.uid);\n            if (!listItem) {\n                return;\n            }\n\n            if (this.loadingUids.has(file.uid)) {\n                this.attachItemLoader(listItem, file);\n            } else {\n                this.detachItemLoader(listItem, file.uid);\n            }\n        });\n    }\n\n    private stampListItemUid(listItem: HTMLElement, file: IUploadFile): void {\n        listItem.setAttribute(\"data-upload-uid\", file.uid);\n    }\n\n    private bindPasteHandler(): void {\n        if (!this.props.pasteUpload) {\n            return;\n        }\n        this.rootElement.addEventListener(\"paste\", (event: ClipboardEvent) => {\n            if (this.isUserInputLocked()) {\n                return;\n            }\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 bindFocusValidationHandlers(): void {\n        this.rootElement.addEventListener(\"focusin\", this.onShellFocusIn);\n        this.rootElement.addEventListener(\"focusout\", this.onShellFocusOut);\n        window.addEventListener(\"focus\", this.onWindowFocusAfterFilePicker);\n    }\n\n    private openFilePicker(): void {\n        if (this.isUserInputLocked()) {\n            return;\n        }\n        if (this.isDirectoryMode()) {\n            void this.openDirectoryPicker();\n            return;\n        }\n        this.awaitingFilePickerResult = true;\n        this.suppressBlurValidationForFilePicker = true;\n        this.fileInput.click();\n    }\n\n    private meetsMinimumSelection(): boolean {\n        const minFiles = this.optionHandler.getEffectiveMinFileCount();\n        if (minFiles <= 0) {\n            return true;\n        }\n        if (this.isDirectoryMode() && !this.shouldUploadFolderContents()) {\n            return this.hasDirectorySelection();\n        }\n        return this.files.length >= minFiles;\n    }\n\n    /** Keeps non–min-count errors visible when focus leaves; does not require min files on generic blur. */\n    private syncValidationDisplayOnBlur(): void {\n        if (this.isUserInputLocked()) {\n            return;\n        }\n        if (this.meetsMinimumSelection()) {\n            if (this.lastValidationMessage) {\n                this.applyValidationError(this.lastValidationMessage);\n            } else {\n                this.clearFieldValidation();\n            }\n            return;\n        }\n        if (this.lastValidationMessage) {\n            this.applyValidationError(this.lastValidationMessage);\n        }\n    }\n\n    /** Min-count / required — only after the native picker closes without a `change` event. */\n    private validateMinFileCountAfterPickerDismissed(): void {\n        if (this.isUserInputLocked()) {\n            return;\n        }\n        const minFiles = this.optionHandler.getEffectiveMinFileCount();\n        if (minFiles <= 0) {\n            return;\n        }\n        if (!this.meetsMinimumSelection()) {\n            this.applyFieldValidationError();\n        }\n    }\n\n    private revalidateFileCountAfterChange(): void {\n        const minFiles = this.optionHandler.getEffectiveMinFileCount();\n        if (minFiles <= 0) {\n            return;\n        }\n        if (this.meetsMinimumSelection()) {\n            this.clearFieldValidation();\n        }\n    }\n\n    private clearFieldValidation(): void {\n        this.lastValidationMessage = null;\n        this.optionHandler.updateValidationMessage(\"\");\n        this.optionHandler.updateStatus(\"none\");\n        this.syncValidationChrome(false);\n    }\n\n    private dispatchUploadError(\n        type: UploadErrorType,\n        message: string,\n        options?: { file?: IUploadFile; cause?: unknown; notify?: boolean },\n    ): UploadError {\n        const notify = options?.notify !== false;\n        const error = new UploadError(type, message, {\n            file: options?.file,\n            fileList: [...this.files],\n            cause: options?.cause,\n        });\n        this.lastValidationMessage = message;\n        this.optionHandler.updateValidationMessage(message);\n        this.optionHandler.updateStatus(\"error\");\n        this.syncValidationChrome(true);\n        if (notify) {\n            this.optionHandler.onError(error);\n            this.props.onUploadError?.(options?.file, error, [...this.files]);\n        }\n        return error;\n    }\n\n    private fileSizeToKb(bytes: number): number {\n        return bytes / KB;\n    }\n\n    private createRejectedFile(file: File): IUploadFile {\n        return {\n            uid: `${Date.now()}-${Math.random().toString(16).slice(2)}`,\n            name: file.name,\n            size: this.fileSizeToKb(file.size),\n            type: file.type,\n            status: \"error\",\n            rawFile: file,\n        };\n    }\n\n    private applyValidationError(message: string, type: UploadErrorType = \"validation\"): void {\n        this.dispatchUploadError(type, message);\n    }\n\n    private applyFieldValidationError(): void {\n        const configured = typeof this.props.errorMessage === \"string\" ? this.props.errorMessage.trim() : \"\";\n        const message = configured.length > 0 ? configured : \"This field is required.\";\n        const type: UploadErrorType =\n            this.optionHandler.getMinCount() > 0 ? \"minCount\" : \"required\";\n        this.dispatchUploadError(type, message);\n    }\n\n    private getFileSizeValidationError(\n        file: File,\n    ): { type: \"maxFileSize\" | \"minFileSize\"; message: string } | null {\n        const maxFileSizeKb = this.props.maxFileSize;\n        const minFileSizeKb = this.props.minFileSize;\n\n        if (typeof maxFileSizeKb === \"number\" && file.size > maxFileSizeKb * KB) {\n            const limit = this.formatFileSize(maxFileSizeKb * KB);\n            return {\n                type: \"maxFileSize\",\n                message: `File size exceeds the maximum allowed size of ${limit}.`,\n            };\n        }\n        if (typeof minFileSizeKb === \"number\" && file.size < minFileSizeKb * KB) {\n            const limit = this.formatFileSize(minFileSizeKb * KB);\n            return {\n                type: \"minFileSize\",\n                message: `File size is below the minimum allowed size of ${limit}.`,\n            };\n        }\n        return null;\n    }\n\n    private syncValidationChrome(isError: boolean): void {\n        this.outerRoot?.classList.toggle(\"dg-input__status--error\", isError);\n        setAriaInvalid(this.fileInput, isError ? \"true\" : \"false\");\n    }\n\n    private onFilesAdded(fileList: FileList | null): void {\n        if (this.isUserInputLocked()) {\n            return;\n        }\n        if (!fileList || fileList.length === 0) {\n            return;\n        }\n\n        const selectedFiles = Array.from(fileList);\n        const normalized: IUploadFile[] = [];\n        let hadValidationError = false;\n\n        for (const file of selectedFiles) {\n            const sizeError = this.getFileSizeValidationError(file);\n            if (sizeError) {\n                hadValidationError = true;\n                this.dispatchUploadError(sizeError.type, sizeError.message, {\n                    file: this.createRejectedFile(file),\n                });\n                continue;\n            }\n            const uploadFile = this.createUploadFile(file);\n            if (uploadFile) {\n                normalized.push(uploadFile);\n            }\n        }\n\n        if (normalized.length === 0) {\n            return;\n        }\n\n        const maxCount = this.props.maxCount;\n        const mergedList = [...this.files, ...normalized];\n        if (typeof maxCount === \"number\" && mergedList.length > maxCount) {\n            hadValidationError = true;\n            const excess = mergedList.length - maxCount;\n            this.dispatchUploadError(\n                \"maxCount\",\n                `Cannot upload more than ${maxCount} file(s). ${excess} file(s) were not added.`,\n            );\n        }\n        this.files = typeof maxCount === \"number\" ? mergedList.slice(0, maxCount) : mergedList;\n        this.emitChange();\n        this.renderList();\n\n        if (!hadValidationError) {\n            this.lastValidationMessage = null;\n            this.revalidateFileCountAfterChange();\n            if (this.optionHandler.getEffectiveMinFileCount() <= 0) {\n                this.clearFieldValidation();\n            }\n        }\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 allowedFileTypes = this.props.allowedFileTypes;\n        const contentType = resolveUploadContentType(this.props.type);\n\n        if (\n            !this.isDirectoryMode() &&\n            !allowedFileTypes?.length &&\n            !fileMatchesUploadContentType(file, contentType)\n        ) {\n            this.dispatchUploadError(\n                \"fileType\",\n                `File type is not allowed for upload type \"${contentType}\": ${file.type || file.name}`,\n                { file: this.createRejectedFile(file) },\n            );\n            return null;\n        }\n\n        if (\n            allowedFileTypes?.length &&\n            !fileMatchesAllowedFileTypes(file, allowedFileTypes)\n        ) {\n            this.dispatchUploadError(\n                \"fileType\",\n                `File type is not allowed: ${file.type || file.name}`,\n                { file: this.createRejectedFile(file) },\n            );\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: this.fileSizeToKb(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            this.dispatchUploadError(\"validation\", `Upload rejected for ${file.name}.`, {\n                file: candidate,\n            });\n            return null;\n        }\n\n        const validationResult = this.props.validator?.(candidate, this.files);\n        if (validationResult === false) {\n            this.dispatchUploadError(\"validation\", `Validation failed for ${file.name}.`, {\n                file: candidate,\n            });\n            return null;\n        }\n\n        return candidate;\n    }\n\n    private uploadFile(file: IUploadFile): void {\n        if (this.optionHandler.isDisabled()) {\n            return;\n        }\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.dispatchUploadError(\"upload\", `Upload failed for ${file.name}.`, {\n                    file,\n                    cause: xhr.response,\n                });\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            this.dispatchUploadError(\"upload\", `Upload failed for ${file.name}.`, {\n                file,\n                cause: xhr.response,\n            });\n            delete this.activeUploads[file.uid];\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        if (this.isUserInputLocked()) {\n            return;\n        }\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.loadingUids.delete(uid);\n        this.destroyItemLoader(uid);\n        this.revokeBlobPreviewForUid(target.uid);\n        this.closePreviewOverlay();\n\n        target.status = \"removed\";\n        const fileListForChange = [...this.files];\n        this.files = this.files.filter((file) => file.uid !== uid);\n        this.props.onRemove?.(target, [...this.files]);\n        this.emitChange(fileListForChange);\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 appendCloseIcon(parent: HTMLElement, iconClass?: string): void {\n        const icon = document.createElement(\"span\");\n        icon.setAttribute(\"aria-hidden\", \"true\");\n        if (iconClass) {\n            icon.className = iconClass;\n        }\n        icon.textContent = \"\\u00d7\";\n        parent.appendChild(icon);\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        this.appendCloseIcon(closeBtn);\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 destroyItemRenderers(): void {\n        this.itemRendererInstances.forEach((renderer) => renderer.destroy?.());\n        this.itemRendererInstances = [];\n    }\n\n    private createUploadItemRendererParams(file: IUploadFile): IUploadItemRendererParams {\n        return {\n            file,\n            fileList: [...this.files],\n            uploadProps: this.props,\n            removeFile: () => this.removeFile(file.uid),\n            previewFile: () => this.previewFile(file),\n            getThumbSrc: () => this.getThumbSrcForFile(file),\n            formatFileSize: (bytes: number) => this.formatFileSize(bytes),\n            isUserInputLocked: () => this.isUserInputLocked(),\n            ...(this.props.listItemRendererParams ?? {}),\n        };\n    }\n\n    private renderCustomListItem(file: IUploadFile): HTMLElement {\n        const ItemRenderer = this.props.listItemRenderer!;\n        const impl = new ItemRenderer();\n        const params = this.createUploadItemRendererParams(file);\n        impl.init?.(params);\n\n        const listItem = impl.getGui();\n        if (listItem.tagName !== \"LI\") {\n            const wrapper = document.createElement(\"li\");\n            wrapper.className = `dg-upload__item dg-upload__item--${file.status}`;\n            this.stampListItemUid(wrapper, file);\n            wrapper.appendChild(listItem);\n            this.itemRendererInstances.push(impl);\n            return wrapper;\n        }\n\n        if (!listItem.classList.contains(\"dg-upload__item\")) {\n            listItem.classList.add(\"dg-upload__item\", `dg-upload__item--${file.status}`);\n        }\n        this.stampListItemUid(listItem, file);\n        this.itemRendererInstances.push(impl);\n        return listItem;\n    }\n\n    private renderDefaultListItem(file: IUploadFile): HTMLElement {\n        const listItem = document.createElement(\"li\");\n        listItem.className = `dg-upload__item dg-upload__item--${file.status}`;\n        this.stampListItemUid(listItem, file);\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 * KB);\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 && !this.isUserInputLocked()) {\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            this.appendCloseIcon(removeButton, \"dg-upload__remove-icon\");\n            removeButton.addEventListener(\"click\", () => this.removeFile(file.uid));\n            listItem.appendChild(removeButton);\n        }\n\n        return listItem;\n    }\n\n    private renderList(): void {\n        if (!this.listContainer) {\n            return;\n        }\n\n        const shouldShowUploadList = this.props.showUploadList !== false;\n        this.listContainer.classList.toggle(\"dg-upload__list--hidden\", !shouldShowUploadList);\n        this.destroyItemRenderers();\n        this.destroyAllItemLoaders();\n        this.listContainer.replaceChildren();\n        if (!shouldShowUploadList) {\n            return;\n        }\n\n        const usesCustomItemRenderer = !!this.props.listItemRenderer;\n\n        this.files.forEach((file) => {\n            const listItem = usesCustomItemRenderer\n                ? this.renderCustomListItem(file)\n                : this.renderDefaultListItem(file);\n            this.listContainer.appendChild(listItem);\n            if (this.loadingUids.has(file.uid)) {\n                this.attachItemLoader(listItem, file);\n            }\n        });\n    }\n\n    private emitChange(fileList?: IUploadFile[]): void {\n        this.props.onChange?.([...(fileList ?? this.files)]);\n        this.revalidateFileCountAfterChange();\n    }\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport {\n\tICustomReggexType,\n\tIInputMeta,\n} from \"../../../../Text/src/core/model/text-options-handler.types\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { IRenderer, IUploadConfiguration } from \"../../upload-configuration.types\";\nimport { UploadError } from \"../../upload-error.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!: IUploadConfiguration;\n\n\tisDisabled(): boolean {\n\t\treturn this.configuration.disabled ?? false;\n\t}\n\tisReadOnly(): boolean {\n\t\treturn this.configuration.readOnly ?? 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(error: UploadError): void {\n\t\tthis.configuration.onError?.(error);\n\t}\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\tconst n = this.configuration.minCount;\n\t\treturn typeof n === \"number\" && n > 0 ? Math.floor(n) : 0;\n\t}\n\t/** Minimum files implied by `required` and `minCount` (for validation). */\n\tgetEffectiveMinFileCount(): number {\n\t\treturn Math.max(this.isRequired() ? 1 : 0, this.getMinCount());\n\t}\n\tgetMaxCount(): number | null {\n\t\tconst n = this.configuration.maxCount;\n\t\treturn typeof n === \"number\" && n >= 0 ? Math.floor(n) : 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 this.configuration.validationMessage ?? this.configuration.errorMessage ?? \"\";\n\t}\n\tgetValidationMessageRenderer(): any {\n\t\treturn this.configuration.validationMessageRenderer ?? \"\";\n\t}\n\tgetValidationMessageRendererParams(): any {\n\t\treturn this.configuration.validationMessageRendererParams ?? \"\";\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\t\tthis.configuration.disabled = !!value;\n\t}\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: Partial<IUploadConfiguration>): void {\n\t\tObject.assign(this.configuration, options);\n\t\t/** Notifies label/description controllers (same pattern as link `updateProperties`). */\n\t\tthis.dispatchEvent({ type: \"PROPERTY_CHANGED\", force: true });\n\t}\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 this.configuration?.ignoreEmptyDOM !== undefined\n\t\t\t? !this.configuration.ignoreEmptyDOM\n\t\t\t: 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\tshowErrorState(): boolean {\n\t\treturn this.configuration.showErrorState ?? true;\n\t}\n\tisShowErrorState(): boolean {\n\t\treturn this.showErrorState();\n\t}\n\tisValid(): boolean {\n\t\treturn this.configuration.status === \"error\";\n\t}\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\tupdateValidationMessage(message: string): void {\n\t\tthis.configuration.validationMessage = message;\n\t}\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\tgetTooltipMessage(): string {\n\t\treturn this.configuration.tooltipMessage ?? \"Please check your file selection\";\n\t}\n\n\tgetTooltipRegex(): RegExp | undefined {\n\t\treturn this.configuration.tooltipRegex;\n\t}\n\n\tgetTooltipPosition(): string {\n\t\treturn this.configuration.tooltipPosition ?? Position.bottomRight;\n\t}\n\n\tgetTooltipAppendto(): HTMLElement {\n\t\treturn this.configuration.tooltipAppendto ?? document.body;\n\t}\n\n\tgetTooltipHideDelay(): number {\n\t\treturn this.configuration.tooltipHideDelay ?? 700;\n\t}\n\n\tgetTooltipShowDelay(): number | undefined {\n\t\treturn this.configuration.tooltipShowDelay;\n\t}\n\n\tshouldShowTooltip(): boolean {\n\t\treturn this.configuration.tooltip ?? false;\n\t}\n\n\tgetTooltipRenderer(): { new (): IRenderer } | undefined {\n\t\treturn this.configuration.toolTipRenderer;\n\t}\n\n\tgetTooltipRendererParams(): object {\n\t\treturn this.configuration.toolTipRendererParams ?? {};\n\t}\n\n\tisTooltipMouseTrack(): boolean {\n\t\treturn this.configuration.tooltipMouseTrack ?? false;\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { IUploadFile, IUploadConfiguration, ISelectedDirectory } 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\";\nimport { UploadOptionHandler } from \"./upload-option-handler\";\nimport { UploadTooltipHandlerType } from \"./upload-tooltip-handler.types\";\n\ntype UploadRootSubPart = \"label\" | \"description\" | \"upload\" | \"field\";\n\n@Bean(UPLOAD_BEAN_NAME.UPLOAD_API)\nexport class UploadAPI implements IUploadAPI {\n\t@AutoWired(\"configuration\") configuration!: IUploadConfiguration;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: UploadOptionHandler;\n\t@AutoWired(UPLOAD_BEAN_NAME.UPLOAD_TOOLTIP_HANDLER)\n\tprivate uploadTooltipHandler!: UploadTooltipHandlerType;\n\n\tprivate renderer: UploadRenderer | undefined;\n\tprivate fieldRoot: HTMLElement | undefined;\n\n\t/** Called from `UploadRootComponent` so `getElement` / `hide` / `show` target the outer field root (like Text). */\n\tregisterFieldRoot(root: HTMLElement): void {\n\t\tthis.fieldRoot = root;\n\t\tthis.renderer?.setOuterFieldRoot(root);\n\t}\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, this.optionHandler);\n\t\tthis.attachTooltipIfEnabled();\n\t}\n\n\tprivate attachTooltipIfEnabled(): void {\n\t\tif (!this.optionHandler.shouldShowTooltip()) {\n\t\t\treturn;\n\t\t}\n\t\tconst anchor = this.getTooltipAnchor();\n\t\tif (!anchor) {\n\t\t\treturn;\n\t\t}\n\t\tthis.uploadTooltipHandler.attachTooltip(anchor);\n\t}\n\n\tprivate getTooltipAnchor(): HTMLElement | undefined {\n\t\treturn this.renderer?.getTooltipAnchor() ?? this.fieldRoot ?? undefined;\n\t}\n\n\tdestroyToolTip(): void {\n\t\tthis.uploadTooltipHandler.destroyTooltip();\n\t}\n\n\topenToolTip(): void {\n\t\tconst anchor = this.getTooltipAnchor();\n\t\tif (!anchor) {\n\t\t\treturn;\n\t\t}\n\t\tthis.uploadTooltipHandler.createToolTip(anchor);\n\t\tthis.uploadTooltipHandler.openToolTip();\n\t}\n\n\tshowErrorMessage(message?: string): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.showErrorMessage(message);\n\t}\n\n\thideErrorMessage(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.hideErrorMessage();\n\t}\n\n\tgetGui(): HTMLElement {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.getGui();\n\t}\n\n\tgetElement(): HTMLElement | undefined {\n\t\treturn this.fieldRoot;\n\t}\n\n\tonFocus(): void {\n\t\tthis.getElement()?.focus();\n\t}\n\n\tonBlur(): void {\n\t\tthis.getElement()?.blur();\n\t}\n\n\tfocus(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.focus();\n\t}\n\n\tblur(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.blur();\n\t}\n\n\thide(subElements?: string[]): void {\n\t\tconst root = this.fieldRoot;\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\t\tif (!subElements?.length) {\n\t\t\troot.style.display = \"none\";\n\t\t\treturn;\n\t\t}\n\t\tconst actions: Record<string, () => void> = {\n\t\t\tlabel: () => UploadAPI.hidePart(root, \"label\"),\n\t\t\tdescription: () => UploadAPI.hidePart(root, \"description\"),\n\t\t\tupload: () => UploadAPI.hidePart(root, \"upload\"),\n\t\t\tfield: () => UploadAPI.hidePart(root, \"field\"),\n\t\t};\n\t\tsubElements.forEach((key) => actions[key]?.());\n\t}\n\n\tshow(subElements?: string[]): void {\n\t\tconst root = this.fieldRoot;\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\t\tif (!subElements?.length) {\n\t\t\troot.style.removeProperty(\"display\");\n\t\t\treturn;\n\t\t}\n\t\tconst actions: Record<string, () => void> = {\n\t\t\tlabel: () => UploadAPI.showPart(root, \"label\"),\n\t\t\tdescription: () => UploadAPI.showPart(root, \"description\"),\n\t\t\tupload: () => UploadAPI.showPart(root, \"upload\"),\n\t\t\tfield: () => UploadAPI.showPart(root, \"field\"),\n\t\t};\n\t\tsubElements.forEach((key) => actions[key]?.());\n\t}\n\n\tprivate static hidePart(root: HTMLElement, part: UploadRootSubPart): void {\n\t\tconst el = UploadAPI.resolveSubPart(root, part);\n\t\tif (el) {\n\t\t\tel.style.display = \"none\";\n\t\t}\n\t}\n\n\tprivate static showPart(root: HTMLElement, part: UploadRootSubPart): void {\n\t\tconst el = UploadAPI.resolveSubPart(root, part);\n\t\tif (el) {\n\t\t\tel.style.removeProperty(\"display\");\n\t\t}\n\t}\n\n\tprivate static resolveSubPart(root: HTMLElement, part: UploadRootSubPart): HTMLElement | null {\n\t\tswitch (part) {\n\t\t\tcase \"label\": {\n\t\t\t\tconst host = root.querySelector(\":scope > text-label\") as HTMLElement | null;\n\t\t\t\tif (host) {\n\t\t\t\t\treturn host;\n\t\t\t\t}\n\t\t\t\treturn root.querySelector(\".dg-field__label\") as HTMLElement | null;\n\t\t\t}\n\t\t\tcase \"description\": {\n\t\t\t\tconst host = root.querySelector(\":scope > text-helper\") as HTMLElement | null;\n\t\t\t\tif (host) {\n\t\t\t\t\treturn host;\n\t\t\t\t}\n\t\t\t\treturn root.querySelector(\".dg-field__description\") as HTMLElement | null;\n\t\t\t}\n\t\t\tcase \"upload\":\n\t\t\t\treturn root.querySelector(\":scope > .dg-upload__container.dg-field__container\") as HTMLElement | null;\n\t\t\tcase \"field\": {\n\t\t\t\tconst container = root.querySelector(\n\t\t\t\t\t\":scope > .dg-upload__container.dg-field__container\",\n\t\t\t\t) as HTMLElement | null;\n\t\t\t\tconst byPath = container?.querySelector(\":scope > upload-field\") as HTMLElement | null;\n\t\t\t\tif (byPath) {\n\t\t\t\t\treturn byPath;\n\t\t\t\t}\n\t\t\t\treturn root.querySelector(\"upload-field\") as HTMLElement | null;\n\t\t\t}\n\t\t}\n\t}\n\n\tdisable(value: boolean): void {\n\t\tthis.optionHandler.setDisabled(!!value);\n\t\tthis.renderer?.syncInteractionState();\n\t}\n\n\tresetFileList(): void {\n\t\tthis.ensureRenderer();\n\t\tconst initial = [...(this.configuration.defaultFileList ?? [])];\n\t\tthis.setFileList(initial);\n\t}\n\n\tupdateProperties(options: Partial<IUploadConfiguration>): void {\n\t\tthis.optionHandler.updateProperty(options);\n\t\tthis.renderer?.applyConfiguration(this.configuration);\n\t}\n\n\tdestroy(): void {\n\t\tthis.destroyToolTip();\n\t\tthis.renderer?.destroy();\n\t\tthis.renderer = undefined;\n\t\tthis.fieldRoot = undefined;\n\t}\n\n\tgetFileList(): IUploadFile[] {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.getFileList();\n\t}\n\n\tsetFileList(fileList: IUploadFile[]): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.setFileList(fileList);\n\t}\n\n\taddFileList(fileList: IUploadFile[]): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.addFileList(fileList);\n\t}\n\n\tclear(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.clearFiles();\n\t}\n\n\tupload(file?: IUploadFile): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.upload(file);\n\t}\n\n\tshowLoader(uid: string | string[]): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.showLoader(uid);\n\t}\n\n\tremoveLoader(uid: string | string[]): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.removeLoader(uid);\n\t}\n\n\tremoveAllLoader(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.removeAllLoader();\n\t}\n\n\tshowAllLoader(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.showAllLoader();\n\t}\n\n\tgetSelectedDirectory(): ISelectedDirectory | null {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.getSelectedDirectory();\n\t}\n\n\tsetSelectedDirectory(directory: ISelectedDirectory | null): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.setSelectedDirectory(directory);\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 { UPLOAD_BEAN_NAME } from \"../../constants/upload-bean-constants\";\nimport { UploadAPI } from \"../model/upload-api\";\nimport { UploadOptionHandler } from \"../model/upload-option-handler\";\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!: UploadOptionHandler;\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\terror: this.optionHandler.showErrorState(),\n\t\t};\n\t\tconst properties = controller.getParamsProperty();\n\t\tconst emptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\tconst template = uploadRootTemplate(props, emptyDom);\n\t\tthis.setTemplate(template, {\n\t\t\tlabel: properties.label,\n\t\t\tdescription: properties.description,\n\t\t\terror: properties.description,\n\t\t});\n\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t\tthis.uploadApi.registerFieldRoot(this.getGui());\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` `rootTemplate`: optional `text-label`, field container, optional `text-helper`, optional `error`. */\nexport function uploadRootTemplate(\n\tprops: { label: boolean; helper: boolean; error: boolean },\n\temptyDom: boolean,\n): HTMLElement {\n\tconst rootDiv = document.createElement(\"div\");\n\trootDiv.className = \"dg-upload__root dg-field__root\";\n\n\tif (emptyDom || 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 (emptyDom || 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\tif (emptyDom || props.error) {\n\t\tconst errorElement = document.createElement(\"error\");\n\t\terrorElement.setAttribute(\"ref\", \"error\");\n\t\trootDiv.appendChild(errorElement);\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\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 { Bean } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { UploadOptionHandler } from \"./upload-option-handler\";\n\n@Bean(\"stateManager\")\nexport class UploadStateManager extends EventEmitter {\n\tisInValid(): boolean {\n\t\treturn (this.optionsHandler as UploadOptionHandler).isValid();\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 { Tooltip } from \"../../../../Tooltip/src/Tooltip\";\nimport { TooltipRenderer } from \"../../../../Tooltip/src/Components/TooltipRenderer\";\nimport { TooltipTriggerStates } from \"../../../../Tooltip/src/Constants/DefaultTooltipValues\";\nimport { ITooltipConfiguration } from \"../../../../Tooltip/src/Interface/ITooltipConfiguration\";\nimport { UPLOAD_BEAN_NAME } from \"../../constants/upload-bean-constants\";\nimport { UploadOptionHandler } from \"./upload-option-handler\";\nimport { UploadTooltipHandlerType } from \"./upload-tooltip-handler.types\";\n\n@Bean(UPLOAD_BEAN_NAME.UPLOAD_TOOLTIP_HANDLER)\nexport class UploadTooltipHandler extends EventEmitter implements UploadTooltipHandlerType {\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler!: UploadOptionHandler;\n\n\tprivate tooltipComponent: any = null;\n\tprivate tooltipTimeoutId: number | null = null;\n\tprivate anchor: HTMLElement | null = null;\n\n\tattachTooltip(component: HTMLElement): void {\n\t\tthis.destroyTooltip();\n\t\tthis.anchor = component;\n\n\t\tconst tooltipConfiguration: ITooltipConfiguration = {\n\t\t\tpopupParent: this.optionHandler.getTooltipAppendto(),\n\t\t\ttooltipValue: this.optionHandler.getTooltipMessage(),\n\t\t\tshouldShowTooltip: () => true,\n\t\t\tshouldAttachEvents: true,\n\t\t\thideTooltip: true,\n\t\t\tposition: this.optionHandler.getTooltipPosition() as ITooltipConfiguration[\"position\"],\n\t\t\trenderer: this.optionHandler.getTooltipRenderer() ?? TooltipRenderer,\n\t\t\tuserRendererParams: this.optionHandler.getTooltipRendererParams(),\n\t\t\ttooltipShowDelay: this.optionHandler.getTooltipShowDelay(),\n\t\t\ttooltipHideDelay: this.optionHandler.getTooltipHideDelay(),\n\t\t\ttooltipMouseTrack: this.optionHandler.isTooltipMouseTrack(),\n\t\t\ttooltipTrigger: TooltipTriggerStates.HOVER,\n\t\t\tgapX: 7,\n\t\t\tgapY: 2,\n\t\t\tarrow: true,\n\t\t};\n\n\t\tthis.tooltipComponent = new Tooltip(component, tooltipConfiguration);\n\t}\n\n\tcreateToolTip(component: HTMLElement): void {\n\t\tthis.destroyTooltip();\n\t\tthis.anchor = component;\n\n\t\tconst tooltipConfiguration: ITooltipConfiguration = {\n\t\t\tpopupParent: this.optionHandler.getTooltipAppendto(),\n\t\t\ttooltipValue: this.optionHandler.getTooltipMessage(),\n\t\t\tshouldShowTooltip: () => true,\n\t\t\tshouldAttachEvents: false,\n\t\t\thideTooltip: false,\n\t\t\tposition: this.optionHandler.getTooltipPosition() as ITooltipConfiguration[\"position\"],\n\t\t\trenderer: this.optionHandler.getTooltipRenderer() ?? TooltipRenderer,\n\t\t\tuserRendererParams: this.optionHandler.getTooltipRendererParams(),\n\t\t\ttooltipShowDelay: this.optionHandler.getTooltipShowDelay(),\n\t\t\ttooltipMouseTrack: this.optionHandler.isTooltipMouseTrack(),\n\t\t\tgapX: 7,\n\t\t\tgapY: 2,\n\t\t\tarrow: true,\n\t\t};\n\n\t\tthis.tooltipComponent = new Tooltip(component, tooltipConfiguration);\n\t}\n\n\topenToolTip(): void {\n\t\tif (!this.tooltipComponent) {\n\t\t\tif (!this.anchor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.createToolTip(this.anchor);\n\t\t}\n\n\t\tthis.tooltipComponent.api.open();\n\n\t\tconst tooltipDelay = this.optionHandler.getTooltipHideDelay();\n\t\tif (this.tooltipTimeoutId) {\n\t\t\tclearTimeout(this.tooltipTimeoutId);\n\t\t\tthis.tooltipTimeoutId = null;\n\t\t}\n\n\t\tthis.tooltipTimeoutId = window.setTimeout(() => {\n\t\t\tthis.tooltipComponent?.api.close();\n\t\t\tthis.tooltipTimeoutId = null;\n\t\t}, tooltipDelay);\n\t}\n\n\tdestroyTooltip(): void {\n\t\tif (!this.tooltipComponent) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tooltipComponent.api.destroy();\n\t\tthis.tooltipComponent = null;\n\t\tthis.anchor = null;\n\n\t\tif (this.tooltipTimeoutId) {\n\t\t\tclearTimeout(this.tooltipTimeoutId);\n\t\t\tthis.tooltipTimeoutId = null;\n\t\t}\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 { ErrorComponent } from \"../../error/error-view\";\nimport { Label } from \"../../label/label-view\";\nimport { UploadUserComponentHandler } from \"./core/model/upload-user-component-handler\";\nimport { UploadStateManager } from \"./core/model/upload-state-manager\";\nimport { UPLOAD_CONTENT_TYPE_DEFAULT } from \"./upload-content-type\";\nimport { IUploadConfiguration } 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\";\nimport { UploadTooltipHandler } from \"./core/model/upload-tooltip-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: IUploadConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\t\t(configuration as IUploadConfiguration).instanceID = instanceID;\n\t\tif (configuration.type === undefined) {\n\t\t\tconfiguration.type = UPLOAD_CONTENT_TYPE_DEFAULT;\n\t\t}\n\t\tif (!configuration.inputPanelRenderer && configuration.panelRenderer) {\n\t\t\tconfiguration.inputPanelRenderer = configuration.panelRenderer;\n\t\t}\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\tUploadStateManager,\n\t\t\tUploadUserComponentHandler,\n\t\t\tUploadAPI,\n\t\t\tUploadTooltipHandler,\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: \"error\", componentClass: ErrorComponent },\n\t\t\t{ componentName: \"upload-field\", componentClass: UploadFieldComponent },\n\t\t];\n\t\tregistry.setupComponents(components);\n\t}\n}\n","const SIGNATURE_BEAN_NAME = {\n\tSIGNATURE_API: \"SignatureAPI\",\n\tSIGNATURE_TOOLTIP_HANDLER: \"SignatureTooltipHandler\",\n};\n\nexport { SIGNATURE_BEAN_NAME };\n","import { ISignatureConfig } from \"../../signature-configuration.types\";\n\nexport interface SignaturePoint {\n\tx: number;\n\ty: number;\n\tpressure: number;\n}\n\nexport interface SignatureStroke {\n\tpoints: SignaturePoint[];\n\tcolor: string;\n\twidth: number;\n}\n\nexport interface SignatureCanvasSnapshot {\n\tstrokes: SignatureStroke[];\n\tbackgroundDataUrl: string | null;\n}\n\nexport type SignatureCanvasChangeReason = \"draw\" | \"clear\" | \"undo\" | \"redo\" | \"load\" | \"resize\";\n\nexport interface SignatureCanvasEngineOptions {\n\tcanvas: HTMLCanvasElement;\n\tconfig: ISignatureConfig;\n\tonChange?: (reason: SignatureCanvasChangeReason) => void;\n\tonBegin?: () => void;\n\tonEnd?: () => void;\n\tonDrawingProgress?: () => void;\n}\n\nconst DEFAULT_WIDTH = 400;\nconst DEFAULT_HEIGHT = 200;\nconst DEFAULT_PEN_COLOR = \"#111827\";\nconst DEFAULT_PEN_WIDTH = 2;\nconst DEFAULT_BG = \"#ffffff\";\nconst MOVE_THROTTLE_MS = 8;\nconst PLACEHOLDER_HIDE_MIN_DISTANCE = 5;\n\nexport class SignatureCanvasEngine {\n\tprivate readonly canvas: HTMLCanvasElement;\n\tprivate readonly config: ISignatureConfig;\n\tprivate readonly onChange?: (reason: SignatureCanvasChangeReason) => void;\n\tprivate readonly onBegin?: () => void;\n\tprivate readonly onEnd?: () => void;\n\tprivate readonly onDrawingProgress?: () => void;\n\n\tprivate ctx!: CanvasRenderingContext2D;\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate padWrap: HTMLElement | null = null;\n\n\tprivate strokes: SignatureStroke[] = [];\n\tprivate currentStroke: SignatureStroke | null = null;\n\tprivate backgroundDataUrl: string | null = null;\n\tprivate backgroundImage: HTMLImageElement | null = null;\n\n\tprivate undoStack: SignatureCanvasSnapshot[] = [];\n\tprivate redoStack: SignatureCanvasSnapshot[] = [];\n\n\tprivate activePointerId: number | null = null;\n\tprivate drawing = false;\n\tprivate drawingProgressNotified = false;\n\tprivate rafId: number | null = null;\n\tprivate pendingMove: PointerEvent | null = null;\n\tprivate lastMoveTs = 0;\n\n\tprivate readonly boundPointerDown: (ev: PointerEvent) => void;\n\tprivate readonly boundPointerMove: (ev: PointerEvent) => void;\n\tprivate readonly boundPointerUp: (ev: PointerEvent) => void;\n\tprivate readonly boundPointerCancel: (ev: PointerEvent) => void;\n\tprivate readonly boundLostPointerCapture: (ev: PointerEvent) => void;\n\n\tconstructor(options: SignatureCanvasEngineOptions) {\n\t\tthis.canvas = options.canvas;\n\t\tthis.config = options.config;\n\t\tthis.onChange = options.onChange;\n\t\tthis.onBegin = options.onBegin;\n\t\tthis.onEnd = options.onEnd;\n\t\tthis.onDrawingProgress = options.onDrawingProgress;\n\n\t\tthis.boundPointerDown = (ev) => this.handlePointerDown(ev);\n\t\tthis.boundPointerMove = (ev) => this.handlePointerMove(ev);\n\t\tthis.boundPointerUp = (ev) => this.handlePointerUp(ev);\n\t\tthis.boundPointerCancel = (ev) => this.handlePointerUp(ev);\n\t\tthis.boundLostPointerCapture = (ev) => this.handlePointerUp(ev);\n\n\t\tconst context = this.canvas.getContext(\"2d\", { willReadFrequently: true });\n\t\tif (!context) {\n\t\t\tthrow new Error(\"SignatureCanvasEngine: 2d context unavailable\");\n\t\t}\n\t\tthis.ctx = context;\n\t}\n\n\tpublic mount(padWrap: HTMLElement): void {\n\t\tthis.padWrap = padWrap;\n\t\tthis.applyCanvasStyles();\n\t\tthis.bindEvents();\n\t\tthis.setupResizeObserver();\n\t\tthis.resize();\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.unbindEvents();\n\t\tif (this.resizeObserver) {\n\t\t\tthis.resizeObserver.disconnect();\n\t\t\tthis.resizeObserver = null;\n\t\t}\n\t\tif (this.rafId != null) {\n\t\t\tcancelAnimationFrame(this.rafId);\n\t\t\tthis.rafId = null;\n\t\t}\n\t\tthis.backgroundImage = null;\n\t\tthis.padWrap = null;\n\t}\n\n\tpublic refresh(): void {\n\t\tthis.resize();\n\t}\n\n\tpublic clear(): void {\n\t\tif (this.isInteractionBlocked()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pushUndoSnapshot();\n\t\tthis.strokes = [];\n\t\tthis.currentStroke = null;\n\t\tthis.backgroundDataUrl = null;\n\t\tthis.backgroundImage = null;\n\t\tthis.redoStack = [];\n\t\tthis.redraw();\n\t\tthis.emitChange(\"clear\");\n\t}\n\n\tpublic undo(): void {\n\t\tif (!this.isUndoRedoEnabled() || this.undoStack.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.redoStack.push(this.captureSnapshot());\n\t\tconst prev = this.undoStack.pop()!;\n\t\tthis.applySnapshot(prev);\n\t\tthis.emitChange(\"undo\");\n\t}\n\n\tpublic redo(): void {\n\t\tif (!this.isUndoRedoEnabled() || this.redoStack.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.undoStack.push(this.captureSnapshot());\n\t\tconst next = this.redoStack.pop()!;\n\t\tthis.applySnapshot(next);\n\t\tthis.emitChange(\"redo\");\n\t}\n\n\tpublic async load(data: string): Promise<void> {\n\t\tif (!data) {\n\t\t\tthis.clear();\n\t\t\treturn;\n\t\t}\n\t\tthis.pushUndoSnapshot();\n\t\tthis.strokes = [];\n\t\tthis.currentStroke = null;\n\t\tthis.redoStack = [];\n\n\t\tif (data.trim().startsWith(\"<svg\")) {\n\t\t\tawait this.loadSvg(data);\n\t\t} else {\n\t\t\tawait this.loadRaster(data);\n\t\t}\n\t\tthis.emitChange(\"load\");\n\t}\n\n\tpublic toDataURL(type?: string): string {\n\t\tconst mime = this.resolveMimeType(type);\n\t\tif (mime === \"image/svg+xml\") {\n\t\t\treturn this.toSvgDataUrl();\n\t\t}\n\t\tif (this.isEmpty()) {\n\t\t\treturn this.exportEmptyCanvas(mime);\n\t\t}\n\t\treturn this.canvas.toDataURL(mime, mime === \"image/jpeg\" ? 0.92 : undefined);\n\t}\n\n\tpublic async toBlob(type?: string): Promise<Blob> {\n\t\tconst mime = this.resolveMimeType(type);\n\t\tif (mime === \"image/svg+xml\") {\n\t\t\tconst svg = this.buildSvgMarkup();\n\t\t\treturn new Blob([svg], { type: mime });\n\t\t}\n\t\tconst dataUrl = this.toDataURL(mime);\n\t\tconst response = await fetch(dataUrl);\n\t\treturn response.blob();\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\tif (this.strokes.length > 0) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !this.backgroundDataUrl;\n\t}\n\n\tpublic shouldHidePlaceholder(): boolean {\n\t\tif (!this.isEmpty()) {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.currentStroke) {\n\t\t\treturn this.computeStrokeLength(this.currentStroke) >= PLACEHOLDER_HIDE_MIN_DISTANCE;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic getTotalStrokeLength(): number {\n\t\tlet total = 0;\n\t\tfor (const stroke of this.strokes) {\n\t\t\ttotal += this.computeStrokeLength(stroke);\n\t\t}\n\t\treturn total;\n\t}\n\n\tpublic getStrokeCount(): number {\n\t\treturn this.strokes.length;\n\t}\n\n\tprivate applyCanvasStyles(): void {\n\t\tthis.canvas.style.touchAction = \"none\";\n\t\tthis.canvas.style.userSelect = \"none\";\n\t\tthis.canvas.setAttribute(\"role\", \"img\");\n\t}\n\n\tprivate bindEvents(): void {\n\t\tthis.canvas.addEventListener(\"pointerdown\", this.boundPointerDown);\n\t\tthis.canvas.addEventListener(\"pointermove\", this.boundPointerMove);\n\t\tthis.canvas.addEventListener(\"pointerup\", this.boundPointerUp);\n\t\tthis.canvas.addEventListener(\"pointercancel\", this.boundPointerCancel);\n\t\tthis.canvas.addEventListener(\"lostpointercapture\", this.boundLostPointerCapture);\n\t}\n\n\tprivate unbindEvents(): void {\n\t\tthis.canvas.removeEventListener(\"pointerdown\", this.boundPointerDown);\n\t\tthis.canvas.removeEventListener(\"pointermove\", this.boundPointerMove);\n\t\tthis.canvas.removeEventListener(\"pointerup\", this.boundPointerUp);\n\t\tthis.canvas.removeEventListener(\"pointercancel\", this.boundPointerCancel);\n\t\tthis.canvas.removeEventListener(\"lostpointercapture\", this.boundLostPointerCapture);\n\t}\n\n\tprivate setupResizeObserver(): void {\n\t\tconst target = this.config.responsive !== false ? this.padWrap ?? this.canvas.parentElement : null;\n\t\tif (!target || typeof ResizeObserver === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\t\tthis.resizeObserver = new ResizeObserver(() => {\n\t\t\tthis.resize();\n\t\t});\n\t\tthis.resizeObserver.observe(target);\n\t}\n\n\tprivate resize(): void {\n\t\tconst cssWidth = this.resolveCssSize(\"width\", DEFAULT_WIDTH);\n\t\tconst cssHeight = this.resolveCssSize(\"height\", DEFAULT_HEIGHT);\n\t\tconst dpr = Math.max(1, window.devicePixelRatio || 1);\n\n\t\tthis.canvas.style.width = `${cssWidth}px`;\n\t\tthis.canvas.style.height = `${cssHeight}px`;\n\t\tthis.canvas.width = Math.floor(cssWidth * dpr);\n\t\tthis.canvas.height = Math.floor(cssHeight * dpr);\n\n\t\tthis.ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\tthis.ctx.scale(dpr, dpr);\n\n\t\tthis.redraw();\n\t}\n\n\tprivate resolveCssSize(axis: \"width\" | \"height\", fallback: number): number {\n\t\tif (axis === \"width\") {\n\t\t\tif (this.config.responsive !== false && this.padWrap) {\n\t\t\t\tconst measured = this.padWrap.clientWidth;\n\t\t\t\tif (measured > 0) {\n\t\t\t\t\treturn measured;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn fallback;\n\t\t}\n\n\t\tconst raw = this.config.height;\n\t\tif (this.config.responsive !== false && this.padWrap) {\n\t\t\tconst measured = this.padWrap.clientHeight;\n\t\t\tif (measured > 0) {\n\t\t\t\treturn measured;\n\t\t\t}\n\t\t}\n\t\tif (typeof raw === \"number\" && raw > 0) {\n\t\t\treturn raw;\n\t\t}\n\t\tif (typeof raw === \"string\") {\n\t\t\tconst parsed = parseFloat(raw);\n\t\t\tif (!Number.isNaN(parsed) && parsed > 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate handlePointerDown(ev: PointerEvent): void {\n\t\tif (this.isInteractionBlocked() || !this.isPrimaryPointer(ev)) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.activePointerId != null) {\n\t\t\treturn;\n\t\t}\n\t\tev.preventDefault();\n\t\tthis.canvas.setPointerCapture(ev.pointerId);\n\t\tthis.activePointerId = ev.pointerId;\n\t\tthis.drawing = true;\n\t\tthis.drawingProgressNotified = false;\n\t\tthis.pushUndoSnapshot();\n\t\tthis.redoStack = [];\n\t\tthis.onBegin?.();\n\n\t\tconst point = this.toLocalPoint(ev);\n\t\tthis.currentStroke = {\n\t\t\tpoints: [point],\n\t\t\tcolor: this.config.penColor ?? DEFAULT_PEN_COLOR,\n\t\t\twidth: this.config.penWidth ?? DEFAULT_PEN_WIDTH,\n\t\t};\n\t\tthis.redraw();\n\t}\n\n\tprivate handlePointerMove(ev: PointerEvent): void {\n\t\tif (!this.drawing || ev.pointerId !== this.activePointerId) {\n\t\t\treturn;\n\t\t}\n\t\tev.preventDefault();\n\t\tthis.pendingMove = ev;\n\t\tif (this.rafId != null) {\n\t\t\treturn;\n\t\t}\n\t\tthis.rafId = requestAnimationFrame(() => {\n\t\t\tthis.rafId = null;\n\t\t\tconst moveEv = this.pendingMove;\n\t\t\tthis.pendingMove = null;\n\t\t\tif (!moveEv || !this.currentStroke) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst now = performance.now();\n\t\t\tif (now - this.lastMoveTs < MOVE_THROTTLE_MS) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.lastMoveTs = now;\n\t\t\tthis.currentStroke.points.push(this.toLocalPoint(moveEv));\n\t\t\tthis.redraw();\n\t\t\tthis.notifyDrawingProgressIfNeeded();\n\t\t});\n\t}\n\n\tprivate handlePointerUp(ev: PointerEvent): void {\n\t\tif (ev.pointerId !== this.activePointerId) {\n\t\t\treturn;\n\t\t}\n\t\tev.preventDefault();\n\t\tif (this.canvas.hasPointerCapture(ev.pointerId)) {\n\t\t\tthis.canvas.releasePointerCapture(ev.pointerId);\n\t\t}\n\t\tthis.finishStroke();\n\t}\n\n\tprivate finishStroke(): void {\n\t\tif (!this.drawing) {\n\t\t\treturn;\n\t\t}\n\t\tthis.drawing = false;\n\t\tthis.activePointerId = null;\n\n\t\tif (this.currentStroke && this.currentStroke.points.length > 0) {\n\t\t\tthis.strokes.push(this.currentStroke);\n\t\t}\n\t\tthis.currentStroke = null;\n\t\tthis.trimUndoStack();\n\t\tthis.redraw();\n\t\tthis.emitChange(\"draw\");\n\t\tthis.onEnd?.();\n\t}\n\n\tprivate isPrimaryPointer(ev: PointerEvent): boolean {\n\t\treturn ev.isPrimary !== false;\n\t}\n\n\tprivate isInteractionBlocked(): boolean {\n\t\treturn !!(this.config.disabled || this.config.readonly || this.config.readOnly);\n\t}\n\n\tprivate isUndoRedoEnabled(): boolean {\n\t\treturn this.config.enableUndoRedo !== false;\n\t}\n\n\tprivate toLocalPoint(ev: PointerEvent): SignaturePoint {\n\t\tconst rect = this.canvas.getBoundingClientRect();\n\t\tconst x = ev.clientX - rect.left;\n\t\tconst y = ev.clientY - rect.top;\n\t\tconst pressure = ev.pressure > 0 ? ev.pressure : 0.5;\n\t\treturn { x, y, pressure };\n\t}\n\n\tprivate redraw(): void {\n\t\tconst cssWidth = this.resolveCssSize(\"width\", DEFAULT_WIDTH);\n\t\tconst cssHeight = this.resolveCssSize(\"height\", DEFAULT_HEIGHT);\n\n\t\tthis.ctx.save();\n\t\tthis.ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\tconst dpr = Math.max(1, window.devicePixelRatio || 1);\n\t\tthis.ctx.scale(dpr, dpr);\n\t\tthis.ctx.clearRect(0, 0, cssWidth, cssHeight);\n\t\tthis.ctx.fillStyle = this.config.backgroundColor ?? DEFAULT_BG;\n\t\tthis.ctx.fillRect(0, 0, cssWidth, cssHeight);\n\n\t\tif (this.backgroundImage) {\n\t\t\tthis.ctx.drawImage(this.backgroundImage, 0, 0, cssWidth, cssHeight);\n\t\t}\n\n\t\tfor (const stroke of this.strokes) {\n\t\t\tthis.drawStroke(stroke);\n\t\t}\n\t\tif (this.currentStroke) {\n\t\t\tthis.drawStroke(this.currentStroke);\n\t\t}\n\t\tthis.ctx.restore();\n\t}\n\n\tprivate drawStroke(stroke: SignatureStroke): void {\n\t\tconst points = stroke.points;\n\t\tif (points.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tthis.ctx.lineCap = \"round\";\n\t\tthis.ctx.lineJoin = \"round\";\n\t\tthis.ctx.strokeStyle = stroke.color;\n\t\tthis.ctx.fillStyle = stroke.color;\n\n\t\tif (points.length === 1) {\n\t\t\tconst p = points[0];\n\t\t\tconst radius = Math.max(stroke.width / 2, 0.5) * (0.5 + p.pressure);\n\t\t\tthis.ctx.beginPath();\n\t\t\tthis.ctx.arc(p.x, p.y, radius, 0, Math.PI * 2);\n\t\t\tthis.ctx.fill();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.ctx.beginPath();\n\t\tthis.ctx.moveTo(points[0].x, points[0].y);\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst width = stroke.width * (0.5 + curr.pressure);\n\t\t\tthis.ctx.lineWidth = width;\n\t\t\tconst midX = (prev.x + curr.x) / 2;\n\t\t\tconst midY = (prev.y + curr.y) / 2;\n\t\t\tthis.ctx.quadraticCurveTo(prev.x, prev.y, midX, midY);\n\t\t}\n\t\tthis.ctx.stroke();\n\t}\n\n\tprivate async loadRaster(data: string): Promise<void> {\n\t\tconst image = await this.loadImage(data);\n\t\tthis.backgroundImage = image;\n\t\tthis.backgroundDataUrl = data;\n\t\tthis.redraw();\n\t}\n\n\tprivate async loadSvg(svgMarkup: string): Promise<void> {\n\t\tconst blob = new Blob([svgMarkup], { type: \"image/svg+xml\" });\n\t\tconst url = URL.createObjectURL(blob);\n\t\ttry {\n\t\t\tconst image = await this.loadImage(url);\n\t\t\tthis.backgroundImage = image;\n\t\t\tthis.backgroundDataUrl = await this.rasterizeImageToDataUrl(image);\n\t\t} finally {\n\t\t\tURL.revokeObjectURL(url);\n\t\t}\n\t\tthis.redraw();\n\t}\n\n\tprivate loadImage(src: string): Promise<HTMLImageElement> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst image = new Image();\n\t\t\timage.crossOrigin = \"anonymous\";\n\t\t\timage.onload = () => resolve(image);\n\t\t\timage.onerror = () => reject(new Error(\"SignatureCanvasEngine: failed to load image\"));\n\t\t\timage.src = src;\n\t\t});\n\t}\n\n\tprivate rasterizeImageToDataUrl(image: HTMLImageElement): Promise<string> {\n\t\tconst cssWidth = this.resolveCssSize(\"width\", DEFAULT_WIDTH);\n\t\tconst cssHeight = this.resolveCssSize(\"height\", DEFAULT_HEIGHT);\n\t\tconst off = document.createElement(\"canvas\");\n\t\toff.width = cssWidth;\n\t\toff.height = cssHeight;\n\t\tconst offCtx = off.getContext(\"2d\");\n\t\tif (!offCtx) {\n\t\t\treturn Promise.resolve(\"\");\n\t\t}\n\t\toffCtx.fillStyle = this.config.backgroundColor ?? DEFAULT_BG;\n\t\toffCtx.fillRect(0, 0, cssWidth, cssHeight);\n\t\toffCtx.drawImage(image, 0, 0, cssWidth, cssHeight);\n\t\treturn Promise.resolve(off.toDataURL(this.resolveMimeType()));\n\t}\n\n\tprivate captureSnapshot(): SignatureCanvasSnapshot {\n\t\treturn {\n\t\t\tstrokes: this.strokes.map((stroke) => ({\n\t\t\t\tpoints: stroke.points.map((p) => ({ ...p })),\n\t\t\t\tcolor: stroke.color,\n\t\t\t\twidth: stroke.width,\n\t\t\t})),\n\t\t\tbackgroundDataUrl: this.backgroundDataUrl,\n\t\t};\n\t}\n\n\tprivate applySnapshot(snapshot: SignatureCanvasSnapshot): void {\n\t\tthis.strokes = snapshot.strokes.map((stroke) => ({\n\t\t\tpoints: stroke.points.map((p) => ({ ...p })),\n\t\t\tcolor: stroke.color,\n\t\t\twidth: stroke.width,\n\t\t}));\n\t\tthis.currentStroke = null;\n\t\tthis.backgroundDataUrl = snapshot.backgroundDataUrl;\n\t\tif (this.backgroundDataUrl) {\n\t\t\tvoid this.loadImage(this.backgroundDataUrl).then((img) => {\n\t\t\t\tthis.backgroundImage = img;\n\t\t\t\tthis.redraw();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.backgroundImage = null;\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\n\tprivate pushUndoSnapshot(): void {\n\t\tif (!this.isUndoRedoEnabled()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.undoStack.push(this.captureSnapshot());\n\t\tthis.trimUndoStack();\n\t}\n\n\tprivate trimUndoStack(): void {\n\t\tconst max = this.config.maxUndoStack ?? 20;\n\t\twhile (this.undoStack.length > max) {\n\t\t\tthis.undoStack.shift();\n\t\t}\n\t}\n\n\tprivate computeStrokeLength(stroke: SignatureStroke): number {\n\t\tlet length = 0;\n\t\tfor (let i = 1; i < stroke.points.length; i++) {\n\t\t\tconst a = stroke.points[i - 1];\n\t\t\tconst b = stroke.points[i];\n\t\t\tlength += Math.hypot(b.x - a.x, b.y - a.y);\n\t\t}\n\t\treturn length;\n\t}\n\n\tprivate resolveMimeType(type?: string): string {\n\t\tconst requested = (type ?? this.config.exportType ?? \"png\").toLowerCase();\n\t\tif (requested.includes(\"jpeg\") || requested === \"jpg\") {\n\t\t\treturn \"image/jpeg\";\n\t\t}\n\t\tif (requested.includes(\"svg\")) {\n\t\t\treturn \"image/svg+xml\";\n\t\t}\n\t\treturn \"image/png\";\n\t}\n\n\tprivate exportEmptyCanvas(mime: string): string {\n\t\tconst off = document.createElement(\"canvas\");\n\t\toff.width = this.canvas.width;\n\t\toff.height = this.canvas.height;\n\t\tconst offCtx = off.getContext(\"2d\");\n\t\tif (!offCtx) {\n\t\t\treturn \"\";\n\t\t}\n\t\toffCtx.fillStyle = this.config.backgroundColor ?? DEFAULT_BG;\n\t\toffCtx.fillRect(0, 0, off.width, off.height);\n\t\treturn off.toDataURL(mime, mime === \"image/jpeg\" ? 0.92 : undefined);\n\t}\n\n\tprivate toSvgDataUrl(): string {\n\t\tconst svg = this.buildSvgMarkup();\n\t\treturn `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n\t}\n\n\tprivate buildSvgMarkup(): string {\n\t\tconst width = this.resolveCssSize(\"width\", DEFAULT_WIDTH);\n\t\tconst height = this.resolveCssSize(\"height\", DEFAULT_HEIGHT);\n\t\tconst bg = this.config.backgroundColor ?? DEFAULT_BG;\n\t\tconst paths = this.strokes\n\t\t\t.map((stroke) => {\n\t\t\t\tif (stroke.points.length === 0) {\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\tconst d = stroke.points\n\t\t\t\t\t.map((p, index) => `${index === 0 ? \"M\" : \"L\"} ${p.x.toFixed(2)} ${p.y.toFixed(2)}`)\n\t\t\t\t\t.join(\" \");\n\t\t\t\treturn `<path d=\"${d}\" fill=\"none\" stroke=\"${stroke.color}\" stroke-width=\"${stroke.width}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>`;\n\t\t\t})\n\t\t\t.join(\"\");\n\t\tconst bgImage = this.backgroundDataUrl\n\t\t\t? `<image href=\"${this.backgroundDataUrl}\" width=\"${width}\" height=\"${height}\" preserveAspectRatio=\"xMidYMid meet\"/>`\n\t\t\t: \"\";\n\t\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\"><rect width=\"100%\" height=\"100%\" fill=\"${bg}\"/>${bgImage}${paths}</svg>`;\n\t}\n\n\tprivate notifyDrawingProgressIfNeeded(): void {\n\t\tif (this.drawingProgressNotified || !this.shouldHidePlaceholder()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.drawingProgressNotified = true;\n\t\tthis.onDrawingProgress?.();\n\t}\n\n\tprivate emitChange(reason: SignatureCanvasChangeReason): void {\n\t\tthis.onChange?.(reason);\n\t}\n}\n","import { ISignatureConfiguration } from \"../signature-configuration.types\";\n\nexport function getSignatureCanvasDomId(configuration: ISignatureConfiguration): 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-signature-canvas-${raw}`;\n}\n","import { setAriaInvalid } from \"@dg/corecomponent\";\nimport { IRenderer, ISignatureConfiguration } from \"../../signature-configuration.types\";\nimport { SignatureCanvasEngine } from \"../signature-canvas/signature-canvas-engine\";\nimport { getSignatureCanvasDomId } from \"../signature-canvas-dom-id\";\nimport { SignatureOptionHandler } from \"../model/signature-option-handler\";\n\nexport class SignatureRenderer implements IRenderer {\n\tprivate rootElement!: HTMLElement;\n\tprivate padWrap!: HTMLElement;\n\tprivate canvas!: HTMLCanvasElement;\n\tprivate placeholderEl!: HTMLElement;\n\tprivate toolbarEl: HTMLElement | null = null;\n\tprivate engine!: SignatureCanvasEngine;\n\n\tprivate readonly props: ISignatureConfiguration;\n\tprivate readonly optionHandler: SignatureOptionHandler;\n\tprivate readonly onShowTooltip?: () => void;\n\tprivate outerRoot: HTMLElement | null = null;\n\n\tprivate readonly onShellFocusIn: () => void;\n\tprivate readonly onShellFocusOut: (ev: FocusEvent) => void;\n\n\tconstructor(\n\t\tprops: ISignatureConfiguration,\n\t\toptionHandler: SignatureOptionHandler,\n\t\tonShowTooltip?: () => void,\n\t) {\n\t\tthis.props = props;\n\t\tthis.optionHandler = optionHandler;\n\t\tthis.onShowTooltip = onShowTooltip;\n\t\tthis.onShellFocusIn = () => {\n\t\t\tif (this.optionHandler.isDisabled()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.outerRoot?.classList.add(\"dg-input__status--focus\");\n\t\t};\n\t\tthis.onShellFocusOut = (ev: FocusEvent) => {\n\t\t\tconst next = ev.relatedTarget as Node | null;\n\t\t\tif (next && this.rootElement.contains(next)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.outerRoot?.classList.remove(\"dg-input__status--focus\");\n\t\t\tthis.validateOnBlur();\n\t\t};\n\t\tthis.buildDom();\n\t}\n\n\tpublic getGui(): HTMLElement {\n\t\treturn this.rootElement;\n\t}\n\n\tpublic getTooltipAnchor(): HTMLElement {\n\t\treturn this.canvas;\n\t}\n\n\tpublic destroy(): void {\n\t\tthis.engine?.destroy();\n\t\tthis.rootElement?.removeEventListener(\"focusin\", this.onShellFocusIn);\n\t\tthis.rootElement?.removeEventListener(\"focusout\", this.onShellFocusOut);\n\t}\n\n\tpublic setOuterFieldRoot(root: HTMLElement): void {\n\t\tthis.outerRoot = root;\n\t\tthis.syncInteractionState();\n\t}\n\n\tpublic syncInteractionState(): void {\n\t\tconst disabled = this.optionHandler.isDisabled();\n\t\tconst readOnly = this.optionHandler.isReadOnly();\n\n\t\tthis.rootElement.classList.toggle(\"dg-signature__status--disabled\", disabled);\n\t\tthis.rootElement.classList.toggle(\"dg-signature__status--read-only\", readOnly && !disabled);\n\t\tthis.outerRoot?.classList.toggle(\"dg-signature__status--disabled\", disabled);\n\t\tthis.outerRoot?.classList.toggle(\"dg-signature__status--read-only\", readOnly && !disabled);\n\n\t\tthis.canvas.classList.toggle(\"dg-input__status--disabled\", disabled);\n\t\tthis.canvas.classList.toggle(\"dg-input__status--read-only\", readOnly && !disabled);\n\t\tthis.canvas.setAttribute(\"aria-disabled\", disabled ? \"true\" : \"false\");\n\t\tthis.canvas.setAttribute(\"aria-readonly\", readOnly ? \"true\" : \"false\");\n\t\tthis.canvas.setAttribute(\"aria-required\", this.optionHandler.isRequired() ? \"true\" : \"false\");\n\n\t\tconst customClass = this.optionHandler.getClassName();\n\t\tif (typeof customClass === \"string\" && customClass.length > 0) {\n\t\t\tthis.rootElement.classList.add(customClass);\n\t\t} else if (Array.isArray(customClass)) {\n\t\t\tcustomClass.forEach((name) => name && this.rootElement.classList.add(name));\n\t\t}\n\n\t\tif (this.toolbarEl) {\n\t\t\tthis.toolbarEl.querySelectorAll(\"button\").forEach((btn) => {\n\t\t\t\t(btn as HTMLButtonElement).disabled = disabled || readOnly;\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic applyConfiguration(configuration: ISignatureConfiguration): void {\n\t\tObject.assign(this.props, configuration);\n\t\tthis.updatePlaceholder();\n\t\tthis.syncToolbar();\n\t\tthis.syncInteractionState();\n\t\tthis.engine.refresh();\n\t}\n\n\tpublic clear(): void {\n\t\tthis.engine.clear();\n\t\tthis.updatePlaceholder();\n\t\tthis.emitValueChange();\n\t}\n\n\tpublic undo(): void {\n\t\tthis.engine.undo();\n\t\tthis.updatePlaceholder();\n\t\tthis.emitValueChange();\n\t}\n\n\tpublic redo(): void {\n\t\tthis.engine.redo();\n\t\tthis.updatePlaceholder();\n\t\tthis.emitValueChange();\n\t}\n\n\tpublic load(data: string): Promise<void> {\n\t\treturn this.engine.load(data).then(() => {\n\t\t\tthis.updatePlaceholder();\n\t\t\tthis.emitValueChange();\n\t\t});\n\t}\n\n\tpublic toDataURL(type?: string): string {\n\t\treturn this.engine.toDataURL(type);\n\t}\n\n\tpublic toBlob(type?: string): Promise<Blob> {\n\t\treturn this.engine.toBlob(type);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\treturn this.engine.isEmpty();\n\t}\n\n\tpublic refresh(_params?: unknown): boolean {\n\t\tthis.engine.refresh();\n\t\treturn true;\n\t}\n\n\tpublic validate(): boolean {\n\t\treturn this.runValidation(false);\n\t}\n\n\tpublic showErrorMessage(message?: string): void {\n\t\tif (message !== undefined) {\n\t\t\tthis.optionHandler.updateValidationMessage(message);\n\t\t}\n\t\tthis.optionHandler.updateStatus(\"error\");\n\t\tthis.syncValidationChrome(true);\n\t}\n\n\tpublic hideErrorMessage(): void {\n\t\tthis.optionHandler.updateValidationMessage(\"\");\n\t\tthis.optionHandler.updateStatus(\"none\");\n\t\tthis.syncValidationChrome(false);\n\t}\n\n\tprivate buildDom(): void {\n\t\tthis.rootElement = document.createElement(\"div\");\n\t\tthis.rootElement.className = \"dg-signature__gui\";\n\t\tthis.rootElement.tabIndex = 0;\n\n\t\tthis.padWrap = document.createElement(\"div\");\n\t\tthis.padWrap.className = \"dg-signature__pad-wrap\";\n\n\t\tthis.canvas = document.createElement(\"canvas\");\n\t\tthis.canvas.className = \"dg-signature__canvas\";\n\t\tthis.canvas.id = getSignatureCanvasDomId(this.props);\n\n\t\tthis.placeholderEl = document.createElement(\"span\");\n\t\tthis.placeholderEl.className = \"dg-signature__placeholder\";\n\t\tthis.placeholderEl.setAttribute(\"aria-hidden\", \"true\");\n\n\t\tthis.padWrap.appendChild(this.canvas);\n\t\tthis.padWrap.appendChild(this.placeholderEl);\n\t\tthis.rootElement.appendChild(this.padWrap);\n\n\t\tthis.engine = new SignatureCanvasEngine({\n\t\t\tcanvas: this.canvas,\n\t\t\tconfig: this.props,\n\t\t\tonChange: () => {\n\t\t\t\tthis.updatePlaceholder();\n\t\t\t\tthis.emitValueChange();\n\t\t\t},\n\t\t\tonDrawingProgress: () => this.updatePlaceholder(),\n\t\t\tonBegin: () => this.props.onBegin?.(),\n\t\t\tonEnd: () => {\n\t\t\t\tthis.props.onEnd?.(this.engine.toDataURL());\n\t\t\t\tthis.emitValueChange();\n\t\t\t},\n\t\t});\n\t\tthis.engine.mount(this.padWrap);\n\n\t\tthis.syncToolbar();\n\t\tthis.updatePlaceholder();\n\t\tthis.syncInteractionState();\n\t\tthis.bindFocusValidationHandlers();\n\t}\n\n\tprivate syncToolbar(): void {\n\t\tconst shouldShow = this.props.showToolbar !== false;\n\n\t\tif (!shouldShow) {\n\t\t\tif (this.toolbarEl) {\n\t\t\t\tthis.toolbarEl.remove();\n\t\t\t\tthis.toolbarEl = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.toolbarEl) {\n\t\t\tthis.toolbarEl.remove();\n\t\t}\n\t\tthis.toolbarEl = this.createToolbar();\n\t\tthis.rootElement.appendChild(this.toolbarEl);\n\t}\n\n\tprivate createToolbar(): HTMLElement {\n\t\tconst toolbar = document.createElement(\"div\");\n\t\ttoolbar.className = \"dg-signature__toolbar\";\n\t\ttoolbar.setAttribute(\"role\", \"toolbar\");\n\t\ttoolbar.setAttribute(\"aria-label\", \"Signature actions\");\n\n\t\tconst buttons = [this.createToolbarButton(\"Clear\", () => this.clear())];\n\n\t\tif (this.optionHandler.isUndoRedoEnabled()) {\n\t\t\tbuttons.push(\n\t\t\t\tthis.createToolbarButton(\"Undo\", () => this.undo()),\n\t\t\t\tthis.createToolbarButton(\"Redo\", () => this.redo()),\n\t\t\t);\n\t\t}\n\n\t\ttoolbar.append(...buttons);\n\t\treturn toolbar;\n\t}\n\n\tprivate createToolbarButton(label: string, onClick: () => void): HTMLButtonElement {\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.type = \"button\";\n\t\tbutton.className = \"dg-signature__toolbar-btn\";\n\t\tbutton.textContent = label;\n\t\tbutton.addEventListener(\"click\", (ev) => {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t\tonClick();\n\t\t});\n\t\treturn button;\n\t}\n\n\tprivate bindFocusValidationHandlers(): void {\n\t\tthis.rootElement.addEventListener(\"focusin\", this.onShellFocusIn);\n\t\tthis.rootElement.addEventListener(\"focusout\", this.onShellFocusOut);\n\t}\n\n\tprivate updatePlaceholder(): void {\n\t\tconst text = this.optionHandler.getPlaceHolder();\n\t\tthis.placeholderEl.textContent = text;\n\t\tconst hidePlaceholder = this.engine.shouldHidePlaceholder();\n\t\tthis.placeholderEl.classList.toggle(\"dg-signature__placeholder--hidden\", hidePlaceholder);\n\t\tthis.canvas.setAttribute(\"aria-label\", text || this.optionHandler.getAriaLabel());\n\t}\n\n\tprivate emitValueChange(): void {\n\t\tconst dataUrl = this.engine.isEmpty() ? \"\" : this.engine.toDataURL();\n\t\tthis.props.onChange?.(dataUrl, this.engine.isEmpty());\n\t}\n\n\tprivate validateOnBlur(): void {\n\t\tthis.runValidation(true);\n\t}\n\n\tprivate syncValidationChrome(isError: boolean): void {\n\t\tthis.outerRoot?.classList.toggle(\"dg-input__status--error\", isError);\n\t\tsetAriaInvalid(this.canvas, isError);\n\t}\n\n\tprivate runValidation(fromBlur: boolean): boolean {\n\t\tconst required = this.optionHandler.isRequired();\n\t\tconst minLength = this.optionHandler.getMinStrokeLength();\n\t\tconst empty = this.engine.isEmpty();\n\t\tconst strokeLength = this.engine.getTotalStrokeLength();\n\n\t\tlet invalid = false;\n\t\tif (required && empty) {\n\t\t\tinvalid = true;\n\t\t} else if (minLength > 0 && !empty && strokeLength < minLength) {\n\t\t\tinvalid = true;\n\t\t}\n\n\t\tif (invalid) {\n\t\t\tthis.optionHandler.updateStatus(\"error\");\n\t\t\tthis.syncValidationChrome(true);\n\t\t\tif (fromBlur) {\n\t\t\t\tthis.optionHandler.updateValidationMessage(this.optionHandler.getValidationMessage());\n\t\t\t}\n\t\t\tthis.onShowTooltip?.();\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.optionHandler.updateStatus(\"none\");\n\t\tthis.syncValidationChrome(false);\n\t\treturn true;\n\t}\n}\n\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { IRenderer, ISignatureConfiguration } from \"../../signature-configuration.types\";\nimport { getSignatureCanvasDomId } from \"../signature-canvas-dom-id\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class SignatureOptionHandler extends EventEmitter {\n\t@AutoWired(\"configuration\") private configuration!: ISignatureConfiguration;\n\n\tisDisabled(): boolean {\n\t\treturn this.configuration.disabled ?? false;\n\t}\n\n\tisReadOnly(): boolean {\n\t\treturn this.configuration.readonly ?? this.configuration.readOnly ?? false;\n\t}\n\n\tgetLabel(): string {\n\t\treturn this.configuration.label ?? \"\";\n\t}\n\n\tgetAriaLabel(): string {\n\t\treturn this.configuration.placeholder ?? \"Signature pad\";\n\t}\n\n\tgetAppendTo(): HTMLElement | null {\n\t\treturn this.configuration.appendTo ?? null;\n\t}\n\n\tgetPlaceHolder(): string {\n\t\treturn this.configuration.placeholder ?? \"\";\n\t}\n\n\tgetAriaLabelledby(): string {\n\t\treturn this.configuration.ariaLabelledBy ?? getSignatureCanvasDomId(this.configuration);\n\t}\n\n\tgetDescription(): string {\n\t\treturn this.configuration.description ?? \"\";\n\t}\n\n\tgetDescriptionRenderer(): any {\n\t\treturn this.configuration.descriptionRenderer ?? \"\";\n\t}\n\n\tgetDescriptionRendererParams(): any {\n\t\treturn this.configuration.descriptionRendererParams ?? {};\n\t}\n\n\tgetValidationMessage(): string {\n\t\treturn this.configuration.validationMessage ?? this.configuration.errorMessage ?? \"Signature is required\";\n\t}\n\n\tgetAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? \"\";\n\t}\n\n\tisRequired(): boolean {\n\t\treturn this.configuration.required ?? false;\n\t}\n\n\tsetDisabled(value: boolean): void {\n\t\tthis.configuration.disabled = !!value;\n\t}\n\n\tsetReadOnly(value: boolean): void {\n\t\tthis.configuration.readonly = !!value;\n\t\tthis.configuration.readOnly = !!value;\n\t}\n\n\tupdateProperty(options: Partial<ISignatureConfiguration>): void {\n\t\tObject.assign(this.configuration, options);\n\t\tthis.dispatchEvent({ type: \"PROPERTY_CHANGED\", force: true });\n\t}\n\n\tgetClassName(): string | string[] | null {\n\t\treturn this.configuration.cssClass ?? null;\n\t}\n\n\tshouldGenerateEmptyDom(): boolean {\n\t\treturn this.configuration?.ignoreEmptyDOM !== undefined\n\t\t\t? !this.configuration.ignoreEmptyDOM\n\t\t\t: false;\n\t}\n\n\tisShowErrorState(): boolean {\n\t\treturn this.configuration.showErrorState ?? true;\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\tgetLabelRenderer(): { new (): IRenderer } | undefined {\n\t\treturn this.configuration.labelRenderer;\n\t}\n\n\tgetLabelRendererParams(): object {\n\t\treturn this.configuration.labelRendererParams ?? {};\n\t}\n\n\tgetMinStrokeLength(): number {\n\t\tconst n = this.configuration.minStrokeLength;\n\t\treturn typeof n === \"number\" && n > 0 ? n : 0;\n\t}\n\n\tisUndoRedoEnabled(): boolean {\n\t\treturn this.configuration.enableUndoRedo !== false;\n\t}\n\n\tgetMaxUndoStack(): number {\n\t\tconst n = this.configuration.maxUndoStack;\n\t\treturn typeof n === \"number\" && n > 0 ? Math.floor(n) : 20;\n\t}\n\n\tgetExportType(): string {\n\t\treturn this.configuration.exportType ?? \"png\";\n\t}\n\n\tgetTooltipMessage(): string {\n\t\treturn this.configuration.tooltipMessage ?? \"Please provide a valid signature\";\n\t}\n\n\tgetTooltipRegex(): RegExp | undefined {\n\t\treturn this.configuration.tooltipRegex;\n\t}\n\n\tgetTooltipPosition(): string {\n\t\treturn this.configuration.tooltipPosition ?? Position.bottomRight;\n\t}\n\n\tgetTooltipAppendto(): HTMLElement {\n\t\treturn this.configuration.tooltipAppendto ?? document.body;\n\t}\n\n\tgetTooltipHideDelay(): number {\n\t\treturn this.configuration.tooltipHideDelay ?? 700;\n\t}\n\n\tgetTooltipShowDelay(): number | undefined {\n\t\treturn this.configuration.tooltipShowDelay;\n\t}\n\n\tshouldShowTooltip(): boolean {\n\t\treturn this.configuration.tooltip ?? false;\n\t}\n\n\tgetTooltipRenderer(): { new (): IRenderer } | undefined {\n\t\treturn this.configuration.toolTipRenderer;\n\t}\n\n\tgetTooltipRendererParams(): object {\n\t\treturn this.configuration.toolTipRendererParams ?? {};\n\t}\n\n\tisTooltipMouseTrack(): boolean {\n\t\treturn this.configuration.tooltipMouseTrack ?? false;\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { ISignatureConfiguration } from \"../../signature-configuration.types\";\nimport { ISignatureAPI } from \"./signature-api.types\";\nimport { SIGNATURE_BEAN_NAME } from \"../../constants/signature-bean-constants\";\nimport { SignatureRenderer } from \"../signature-renderer/signature-renderer\";\nimport { SignatureOptionHandler } from \"./signature-option-handler\";\nimport { SignatureTooltipHandlerType } from \"./signature-tooltip-handler.types\";\n\ntype SignatureRootSubPart = \"label\" | \"description\" | \"signature\" | \"field\";\n\n@Bean(SIGNATURE_BEAN_NAME.SIGNATURE_API)\nexport class SignatureAPI implements ISignatureAPI {\n\t@AutoWired(\"configuration\") configuration!: ISignatureConfiguration;\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: SignatureOptionHandler;\n\t@AutoWired(SIGNATURE_BEAN_NAME.SIGNATURE_TOOLTIP_HANDLER)\n\tprivate signatureTooltipHandler!: SignatureTooltipHandlerType;\n\n\tprivate renderer: SignatureRenderer | undefined;\n\tprivate fieldRoot: HTMLElement | undefined;\n\tprivate previewOverlayEl: HTMLElement | null = null;\n\tprivate previewOverlayOnKeyDown: ((ev: KeyboardEvent) => void) | null = null;\n\n\tregisterFieldRoot(root: HTMLElement): void {\n\t\tthis.fieldRoot = root;\n\t\tthis.renderer?.setOuterFieldRoot(root);\n\t}\n\n\tprivate ensureRenderer(): void {\n\t\tif (this.renderer) {\n\t\t\treturn;\n\t\t}\n\t\tthis.renderer = new SignatureRenderer(this.configuration, this.optionHandler, () =>\n\t\t\tthis.showTooltipIfEnabled(),\n\t\t);\n\t}\n\n\tprivate showTooltipIfEnabled(): void {\n\t\tif (!this.optionHandler.shouldShowTooltip()) {\n\t\t\treturn;\n\t\t}\n\t\tconst anchor = this.getTooltipAnchor();\n\t\tif (!anchor) {\n\t\t\treturn;\n\t\t}\n\t\tthis.signatureTooltipHandler.createToolTip(anchor);\n\t\tthis.signatureTooltipHandler.openToolTip();\n\t}\n\n\tprivate getTooltipAnchor(): HTMLElement | undefined {\n\t\treturn this.renderer?.getTooltipAnchor() ?? this.fieldRoot ?? undefined;\n\t}\n\n\tdestroyToolTip(): void {\n\t\tthis.signatureTooltipHandler.destroyTooltip();\n\t}\n\n\topenToolTip(): void {\n\t\tconst anchor = this.getTooltipAnchor();\n\t\tif (!anchor) {\n\t\t\treturn;\n\t\t}\n\t\tthis.signatureTooltipHandler.createToolTip(anchor);\n\t\tthis.signatureTooltipHandler.openToolTip();\n\t}\n\n\tshowErrorMessage(message?: string): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.showErrorMessage(message);\n\t}\n\n\thideErrorMessage(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.hideErrorMessage();\n\t}\n\n\tgetGui(): HTMLElement {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.getGui();\n\t}\n\n\tgetElement(): HTMLElement | undefined {\n\t\treturn this.fieldRoot;\n\t}\n\n\tclear(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.clear();\n\t}\n\n\tundo(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.undo();\n\t}\n\n\tredo(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.redo();\n\t}\n\n\tload(data: string): Promise<void> {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.load(data);\n\t}\n\n\ttoDataURL(type?: string): string {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.toDataURL(type);\n\t}\n\n\ttoBlob(type?: string): Promise<Blob> {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.toBlob(type);\n\t}\n\n\tisEmpty(): boolean {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.isEmpty();\n\t}\n\n\tenable(): void {\n\t\tthis.optionHandler.setDisabled(false);\n\t\tthis.renderer?.syncInteractionState();\n\t}\n\n\tdisable(): void {\n\t\tthis.optionHandler.setDisabled(true);\n\t\tthis.renderer?.syncInteractionState();\n\t}\n\n\trefresh(): void {\n\t\tthis.ensureRenderer();\n\t\tthis.renderer!.refresh();\n\t}\n\n\tvalidate(): boolean {\n\t\tthis.ensureRenderer();\n\t\treturn this.renderer!.validate();\n\t}\n\n\tgetOutput(): string {\n\t\tthis.ensureRenderer();\n\t\tif (this.renderer!.isEmpty()) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn this.renderer!.toDataURL(this.optionHandler.getExportType());\n\t}\n\n\tdownloadOutput(): void {\n\t\tconst dataUrl = this.getOutput();\n\t\tif (!dataUrl) {\n\t\t\treturn;\n\t\t}\n\t\tconst exportType = this.optionHandler.getExportType();\n\t\tconst link = document.createElement(\"a\");\n\t\tlink.href = dataUrl;\n\t\tlink.download = SignatureAPI.resolveDownloadFilename(exportType);\n\t\tlink.rel = \"noopener\";\n\t\tdocument.body.appendChild(link);\n\t\tlink.click();\n\t\tdocument.body.removeChild(link);\n\t}\n\n\tpreviewOutput(): void {\n\t\tthis.ensureRenderer();\n\t\tconst exportType = this.optionHandler.getExportType();\n\t\tconst dataUrl = this.renderer!.toDataURL(exportType);\n\t\tthis.openPreviewOverlay(dataUrl, exportType);\n\t}\n\n\thide(subElements?: string[]): void {\n\t\tconst root = this.fieldRoot;\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\t\tif (!subElements?.length) {\n\t\t\troot.style.display = \"none\";\n\t\t\treturn;\n\t\t}\n\t\tconst actions: Record<string, () => void> = {\n\t\t\tlabel: () => SignatureAPI.hidePart(root, \"label\"),\n\t\t\tdescription: () => SignatureAPI.hidePart(root, \"description\"),\n\t\t\tsignature: () => SignatureAPI.hidePart(root, \"signature\"),\n\t\t\tfield: () => SignatureAPI.hidePart(root, \"field\"),\n\t\t};\n\t\tsubElements.forEach((key) => actions[key]?.());\n\t}\n\n\tshow(subElements?: string[]): void {\n\t\tconst root = this.fieldRoot;\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\t\tif (!subElements?.length) {\n\t\t\troot.style.removeProperty(\"display\");\n\t\t\treturn;\n\t\t}\n\t\tconst actions: Record<string, () => void> = {\n\t\t\tlabel: () => SignatureAPI.showPart(root, \"label\"),\n\t\t\tdescription: () => SignatureAPI.showPart(root, \"description\"),\n\t\t\tsignature: () => SignatureAPI.showPart(root, \"signature\"),\n\t\t\tfield: () => SignatureAPI.showPart(root, \"field\"),\n\t\t};\n\t\tsubElements.forEach((key) => actions[key]?.());\n\t}\n\n\tupdateProperties(options: Partial<ISignatureConfiguration>): void {\n\t\tthis.optionHandler.updateProperty(options);\n\t\tthis.renderer?.applyConfiguration(this.configuration);\n\t}\n\n\tdestroy(): void {\n\t\tthis.destroyToolTip();\n\t\tthis.closePreviewOverlay();\n\t\tthis.renderer?.destroy();\n\t\tthis.renderer = undefined;\n\t\tthis.fieldRoot = undefined;\n\t}\n\n\tprivate closePreviewOverlay(): void {\n\t\tif (this.previewOverlayOnKeyDown) {\n\t\t\tdocument.removeEventListener(\"keydown\", this.previewOverlayOnKeyDown);\n\t\t\tthis.previewOverlayOnKeyDown = null;\n\t\t}\n\t\tif (this.previewOverlayEl?.parentNode) {\n\t\t\tthis.previewOverlayEl.parentNode.removeChild(this.previewOverlayEl);\n\t\t}\n\t\tthis.previewOverlayEl = null;\n\t}\n\n\tprivate openPreviewOverlay(src: string, exportType: string): void {\n\t\tthis.closePreviewOverlay();\n\n\t\tconst formatLabel = exportType.toUpperCase();\n\t\tconst overlay = document.createElement(\"div\");\n\t\toverlay.className = \"dg-signature__preview-overlay\";\n\t\toverlay.setAttribute(\"role\", \"dialog\");\n\t\toverlay.setAttribute(\"aria-modal\", \"true\");\n\t\toverlay.setAttribute(\"aria-label\", `Signature preview (${formatLabel})`);\n\n\t\tconst backdrop = document.createElement(\"button\");\n\t\tbackdrop.type = \"button\";\n\t\tbackdrop.className = \"dg-signature__preview-backdrop\";\n\t\tbackdrop.setAttribute(\"aria-label\", \"Close preview\");\n\n\t\tconst panel = document.createElement(\"div\");\n\t\tpanel.className = \"dg-signature__preview-panel\";\n\n\t\tconst closeBtn = document.createElement(\"button\");\n\t\tcloseBtn.type = \"button\";\n\t\tcloseBtn.className = \"dg-signature__preview-close\";\n\t\tcloseBtn.setAttribute(\"aria-label\", \"Close\");\n\t\tcloseBtn.textContent = \"\\u00d7\";\n\n\t\tconst caption = document.createElement(\"span\");\n\t\tcaption.className = \"dg-signature__preview-format\";\n\t\tcaption.textContent = formatLabel;\n\n\t\tconst img = document.createElement(\"img\");\n\t\timg.className = \"dg-signature__preview-img\";\n\t\timg.src = src;\n\t\timg.alt = `Signature exported as ${formatLabel}`;\n\n\t\tconst close = () => this.closePreviewOverlay();\n\t\tbackdrop.addEventListener(\"click\", close);\n\t\tcloseBtn.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\tclose();\n\t\t});\n\t\tpanel.addEventListener(\"click\", (e) => e.stopPropagation());\n\n\t\tpanel.appendChild(closeBtn);\n\t\tpanel.appendChild(caption);\n\t\tpanel.appendChild(img);\n\t\toverlay.appendChild(backdrop);\n\t\toverlay.appendChild(panel);\n\n\t\tconst onKeyDown = (ev: KeyboardEvent) => {\n\t\t\tif (ev.key === \"Escape\") {\n\t\t\t\tev.preventDefault();\n\t\t\t\tclose();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", onKeyDown);\n\t\tthis.previewOverlayOnKeyDown = onKeyDown;\n\n\t\tdocument.body.appendChild(overlay);\n\t\tthis.previewOverlayEl = overlay;\n\t\trequestAnimationFrame(() => closeBtn.focus());\n\t}\n\n\tprivate static resolveDownloadFilename(exportType: string): string {\n\t\tconst type = exportType.toLowerCase();\n\t\tif (type.includes(\"jpeg\") || type === \"jpg\") {\n\t\t\treturn \"signature.jpg\";\n\t\t}\n\t\tif (type.includes(\"svg\")) {\n\t\t\treturn \"signature.svg\";\n\t\t}\n\t\treturn \"signature.png\";\n\t}\n\n\tprivate static hidePart(root: HTMLElement, part: SignatureRootSubPart): void {\n\t\tconst el = SignatureAPI.resolveSubPart(root, part);\n\t\tif (el) {\n\t\t\tel.style.display = \"none\";\n\t\t}\n\t}\n\n\tprivate static showPart(root: HTMLElement, part: SignatureRootSubPart): void {\n\t\tconst el = SignatureAPI.resolveSubPart(root, part);\n\t\tif (el) {\n\t\t\tel.style.removeProperty(\"display\");\n\t\t}\n\t}\n\n\tprivate static resolveSubPart(root: HTMLElement, part: SignatureRootSubPart): HTMLElement | null {\n\t\tswitch (part) {\n\t\t\tcase \"label\": {\n\t\t\t\tconst host = root.querySelector(\":scope > signature-label\") as HTMLElement | null;\n\t\t\t\treturn host ?? (root.querySelector(\".dg-field__label\") as HTMLElement | null);\n\t\t\t}\n\t\t\tcase \"description\": {\n\t\t\t\tconst host = root.querySelector(\":scope > signature-description\") as HTMLElement | null;\n\t\t\t\treturn host ?? (root.querySelector(\".dg-field__description\") as HTMLElement | null);\n\t\t\t}\n\t\t\tcase \"signature\":\n\t\t\t\treturn root.querySelector(\":scope > .dg-signature__container.dg-field__container\") as HTMLElement | null;\n\t\t\tcase \"field\": {\n\t\t\t\tconst container = root.querySelector(\n\t\t\t\t\t\":scope > .dg-signature__container.dg-field__container\",\n\t\t\t\t) as HTMLElement | null;\n\t\t\t\treturn (\n\t\t\t\t\t(container?.querySelector(\":scope > signature-field\") as HTMLElement | null) ??\n\t\t\t\t\t(root.querySelector(\"signature-field\") as HTMLElement | null)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { AbstractController } from \"../../../../utility/abstract-controller\";\nimport { SignatureOptionHandler } from \"../model/signature-option-handler\";\n\nexport type SignatureRootComponentType = {\n\tgetElement(): HTMLElement;\n};\n\nexport class SignatureRootController extends AbstractController<SignatureRootComponentType> {\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler!: SignatureOptionHandler;\n\n\tinit(): void {}\n\n\tgetParamsProperty() {\n\t\treturn {\n\t\t\tlabel: {\n\t\t\t\tgetLabelClasses: () => \"dg-field__label dg-signature__label\",\n\t\t\t\tgetLabelTitleClasses: () => \"dg-field__label__title dg-signature__label-title\",\n\t\t\t},\n\t\t\tdescription: {\n\t\t\t\tgetValidationMessageClasses: () => \"dg-field__validation-message dg-signature__validation-message\",\n\t\t\t\tgetDescriptionClasses: () => \"dg-field__description dg-signature__description\",\n\t\t\t\tinvalid: () => this.optionHandler.isShowErrorState() && this.optionHandler.isValid(),\n\t\t\t\tinvalidText: () => this.optionHandler.getValidationMessage(),\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 { SIGNATURE_BEAN_NAME } from \"../../constants/signature-bean-constants\";\nimport { SignatureAPI } from \"../model/signature-api\";\nimport { SignatureOptionHandler } from \"../model/signature-option-handler\";\nimport { SignatureRootController, SignatureRootComponentType } from \"./signature-root-controller\";\nimport { signatureRootTemplate } from \"./signature-root-template\";\n\nexport class SignatureRootComponent extends Component {\n\tprivate componentHolder: HTMLElement | null;\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) protected optionHandler!: SignatureOptionHandler;\n\t@AutoWired(SIGNATURE_BEAN_NAME.SIGNATURE_API) private signatureApi!: SignatureAPI;\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: SignatureRootComponentType = {\n\t\t\tgetElement: () => this.getGui(),\n\t\t};\n\t\tconst controller = this.createManagedBean(new SignatureRootController());\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 emptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\tconst template = signatureRootTemplate(props, emptyDom);\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\t\tcontroller.setComponent(component);\n\n\t\tthis.appendElementIntoUserDom();\n\t\tthis.signatureApi.registerFieldRoot(this.getGui());\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.signatureApi.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","export function signatureRootTemplate(\n\tprops: { label: boolean; helper: boolean },\n\temptyDom: boolean,\n): HTMLElement {\n\tconst rootDiv = document.createElement(\"div\");\n\trootDiv.className = \"dg-signature__root dg-field__root\";\n\n\tif (emptyDom || props.label) {\n\t\tconst labelElement = document.createElement(\"signature-label\");\n\t\tlabelElement.setAttribute(\"ref\", \"label\");\n\t\trootDiv.appendChild(labelElement);\n\t}\n\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"dg-signature__container dg-field__container\";\n\tconst signatureField = document.createElement(\"signature-field\");\n\tsignatureField.setAttribute(\"ref\", \"signatureField\");\n\tcontainer.appendChild(signatureField);\n\trootDiv.appendChild(container);\n\n\tif (emptyDom || props.helper) {\n\t\tconst descriptionElement = document.createElement(\"signature-description\");\n\t\tdescriptionElement.setAttribute(\"ref\", \"description\");\n\t\trootDiv.appendChild(descriptionElement);\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 {SignatureRendererPropertyName,type ISignatureRendererComponentDetails,type SignatureUserComponentHandlerTypes} from \"./signature-user-component-handler.types\";\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class SignatureUserComponentHandler\n\textends UserComponentHandler\n\timplements SignatureUserComponentHandlerTypes, 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, SignatureRendererPropertyName.LABEL_RENDERER, params, SignatureRendererPropertyName.LABEL_RENDERER);\n\t}\n\n\tgetPrefixRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, SignatureRendererPropertyName.PREFIX_RENDERER, params, SignatureRendererPropertyName.PREFIX_RENDERER);\n\t}\n\n\tgetSuffixRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, SignatureRendererPropertyName.SUFFIX_RENDERER, params, SignatureRendererPropertyName.SUFFIX_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.resolveSignatureRendererDetails(\n\t\t\titem,\n\t\t\tSignatureRendererPropertyName.HELPER_TEXT_RENDERER,\n\t\t\tparams,\n\t\t\tSignatureRendererPropertyName.HELPER_TEXT_RENDERER,\n\t\t);\n\t}\n\n\tgetErrorRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.resolveSignatureRendererDetails(\n\t\t\titem,\n\t\t\tSignatureRendererPropertyName.ERROR_RENDERER,\n\t\t\tparams,\n\t\t\tSignatureRendererPropertyName.ERROR_RENDERER,\n\t\t);\n\t}\n\n\tprotected resolveSignatureRendererDetails(\n\t\titem: any,\n\t\tpropertyName: SignatureRendererPropertyName,\n\t\tparams?: any,\n\t\tdefaultName?: string,\n\t): ISignatureRendererComponentDetails | 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 && defaultName != null) {\n\t\t\tlookupRegistry(defaultName);\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\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: SignatureRendererPropertyName): any {\n\t\tswitch (propertyName) {\n\t\t\tcase SignatureRendererPropertyName.ERROR_RENDERER:\n\t\t\tcase SignatureRendererPropertyName.HELPER_TEXT_RENDERER:\n\t\t\tcase SignatureRendererPropertyName.PREFIX_RENDERER:\n\t\t\tcase SignatureRendererPropertyName.SUFFIX_RENDERER:\n\t\t\tcase SignatureRendererPropertyName.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: SignatureRendererPropertyName,\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\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: SignatureRendererPropertyName, params: any): any {\n\t\treturn { ...params, ...this.getUserParams(item, propertyName, params) };\n\t}\n\n\tprivate getUserParams(item: any, propertyName: SignatureRendererPropertyName, _params: any): any {\n\t\tswitch (propertyName) {\n\t\t\tcase SignatureRendererPropertyName.PREFIX_RENDERER:\n\t\t\tcase SignatureRendererPropertyName.SUFFIX_RENDERER:\n\t\t\tcase SignatureRendererPropertyName.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 { SIGNATURE_BEAN_NAME } from \"../../constants/signature-bean-constants\";\nimport { SignatureAPI } from \"../model/signature-api\";\n\nexport class SignatureFieldComponent extends Component {\n\t@AutoWired(SIGNATURE_BEAN_NAME.SIGNATURE_API) private signatureApi!: SignatureAPI;\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tthis.setTemplate(this.signatureApi.getGui());\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Tooltip } from \"../../../../Tooltip/src/Tooltip\";\nimport { TooltipRenderer } from \"../../../../Tooltip/src/Components/TooltipRenderer\";\nimport { ITooltipConfiguration } from \"../../../../Tooltip/src/Interface/ITooltipConfiguration\";\nimport { SIGNATURE_BEAN_NAME } from \"../../constants/signature-bean-constants\";\nimport { SignatureOptionHandler } from \"./signature-option-handler\";\nimport { SignatureTooltipHandlerType } from \"./signature-tooltip-handler.types\";\n\n@Bean(SIGNATURE_BEAN_NAME.SIGNATURE_TOOLTIP_HANDLER)\nexport class SignatureTooltipHandler extends EventEmitter implements SignatureTooltipHandlerType {\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER) private optionHandler!: SignatureOptionHandler;\n\n\tprivate tooltipComponent: any = null;\n\tprivate tooltipTimeoutId: number | null = null;\n\tprivate openState = false;\n\n\tcreateToolTip(component: HTMLElement): void {\n\t\tif (this.tooltipComponent) {\n\t\t\tthis.destroyTooltip();\n\t\t}\n\n\t\tconst tooltipConfiguration: ITooltipConfiguration = {\n\t\t\tpopupParent: this.optionHandler.getTooltipAppendto(),\n\t\t\ttooltipValue: this.optionHandler.getTooltipMessage(),\n\t\t\tshouldShowTooltip: () => true,\n\t\t\tshouldAttachEvents: false,\n\t\t\thideTooltip: false,\n\t\t\tposition: this.optionHandler.getTooltipPosition() as ITooltipConfiguration[\"position\"],\n\t\t\trenderer: this.optionHandler.getTooltipRenderer() ?? TooltipRenderer,\n\t\t\tuserRendererParams: this.optionHandler.getTooltipRendererParams(),\n\t\t\ttooltipShowDelay: this.optionHandler.getTooltipShowDelay(),\n\t\t\ttooltipMouseTrack: this.optionHandler.isTooltipMouseTrack(),\n\t\t\tgapX: 7,\n\t\t\tgapY: 2,\n\t\t\tarrow: true,\n\t\t};\n\n\t\tthis.tooltipComponent = new Tooltip(component, tooltipConfiguration);\n\t}\n\n\topenToolTip(): void {\n\t\tif (this.openState) {\n\t\t\tthis.destroyTooltip();\n\t\t\tthis.openState = false;\n\t\t}\n\n\t\tif (!this.tooltipComponent) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tooltipComponent.api.open();\n\t\tthis.openState = true;\n\n\t\tconst tooltipDelay = this.optionHandler.getTooltipHideDelay();\n\t\tif (this.tooltipTimeoutId) {\n\t\t\tclearTimeout(this.tooltipTimeoutId);\n\t\t\tthis.tooltipTimeoutId = null;\n\t\t}\n\n\t\tthis.tooltipTimeoutId = window.setTimeout(() => {\n\t\t\tthis.destroyTooltip();\n\t\t\tthis.tooltipTimeoutId = null;\n\t\t}, tooltipDelay);\n\t}\n\n\tdestroyTooltip(): void {\n\t\tif (!this.tooltipComponent) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tooltipComponent.api.destroy();\n\t\tthis.openState = false;\n\t\tthis.tooltipComponent = null;\n\n\t\tif (this.tooltipTimeoutId) {\n\t\t\tclearTimeout(this.tooltipTimeoutId);\n\t\t\tthis.tooltipTimeoutId = null;\n\t\t}\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 { SignatureUserComponentHandler } from \"./core/model/signature-user-component-handler\";\nimport { ISignatureConfiguration } from \"./signature-configuration.types\";\nimport { SignatureAPI } from \"./core/model/signature-api\";\nimport { SignatureFieldComponent } from \"./core/signature-field/signature-field-view\";\nimport { SignatureOptionHandler } from \"./core/model/signature-option-handler\";\nimport { SignatureTooltipHandler } from \"./core/model/signature-tooltip-handler\";\n\nexport interface IUserParams {\n\tglobalEventListener?: Function;\n\tframeworkOverrides?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n}\n\nlet nextInstanceId = 1;\n\nexport class SignatureCoreComponent {\n\tinitializeSignature(configuration: ISignatureConfiguration, params: IUserParams = {}, createUI: CallableFunction): void {\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\t\t(configuration as ISignatureConfiguration).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\tSignatureOptionHandler,\n\t\t\tSignatureUserComponentHandler,\n\t\t\tSignatureAPI,\n\t\t\tSignatureTooltipHandler,\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\tregistry.setupComponents(createComponentList());\n\t}\n}\n\nexport function createComponentList(): ComponentMeta[] {\n\treturn [\n\t\t{\n\t\t\tcomponentName: \"signature-label\",\n\t\t\tcomponentClass: Label,\n\t\t},\n\t\t{\n\t\t\tcomponentName: \"signature-description\",\n\t\t\tcomponentClass: DescriptionComponent,\n\t\t},\n\t\t{\n\t\t\tcomponentName: \"signature-field\",\n\t\t\tcomponentClass: SignatureFieldComponent,\n\t\t},\n\t];\n}\n","export const COMPOSITE_COMPONENT_BEAN_NAME = {\n\tCOMPOSITE_CONFIGURATION: \"configuration\",\n\tCOMPOSITE_API: \"CompositeComponentApi\",\n\tOPTION_HANDLER: \"CompositeComponentOptionHandler\",\n\tSTATE_MANAGER: \"CompositeComponentStateManager\",\n\tCONTROLLER_HANDLER: \"CompositeComponentControllerHandler\",\n\tUSER_COMPONENT_HANDLER: \"CompositeComponentUserComponentHandler\",\n\tTOOLTIP_HANDLER: \"CompositeComponentTooltipHandler\",\n} as const;\n","import {\n\tCompositeChildComponentCtor,\n\tCompositeComponentItemReference,\n\tICompositeComponentItem,\n\tICompositeComponentResolvedItem,\n} from \"../composite-component-configuration.types\";\nimport { SelectOptionElementModel } from \"../../../select/src/select-configuration-types/select_configuration\";\n\nexport interface ICompositeComponentRendererSet {\n\ticonRenderer?: new (...args: any[]) => any;\n\ticonRendererParams?: object;\n\tdropdownOptionRenderer?: new (...args: any[]) => any;\n\tdropdownOptionRendererParams?: object;\n}\n\nconst DEFAULT_ICON_TEXT_MAP: Record<string, string> = {\n\tNumberComponent: \"123\",\n\tDropdown: \"v\",\n\tSelect: \"v\",\n\tRadioComponent: \"o\",\n\tTextComponent: \"T\",\n\tMultilineComponent: \"T\",\n};\n\nexport function formatCompositeComponentLabel(value: string): string {\n\treturn value\n\t\t.replace(/Component$/, \"\")\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n\t\t.replace(/[-_]+/g, \" \")\n\t\t.trim();\n}\n\nexport function resolveCompositeComponentClass(\n\titem: ICompositeComponentItem,\n): CompositeChildComponentCtor | undefined {\n\tif (item.componentClass) {\n\t\treturn item.componentClass;\n\t}\n\n\tif (!item.componentName) {\n\t\treturn undefined;\n\t}\n\n\tconst registry = (window as any).DG_Components as Record<string, CompositeChildComponentCtor> | undefined;\n\treturn registry?.[item.componentName];\n}\n\nexport function normalizeCompositeItems(\n\titems: ICompositeComponentItem[] = [],\n): ICompositeComponentResolvedItem[] {\n\tconst seen = new Set<string>();\n\tconst normalized: ICompositeComponentResolvedItem[] = [];\n\n\titems.forEach((item) => {\n\t\tif (!item?.id || seen.has(item.id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tseen.add(item.id);\n\n\t\tconst fallbackLabel = item.componentName\n\t\t\t? formatCompositeComponentLabel(item.componentName)\n\t\t\t: formatCompositeComponentLabel(item.value ?? item.id);\n\t\tconst label = item.label?.trim() || fallbackLabel;\n\t\tconst value = item.value?.trim() || label;\n\t\tconst keywords = Array.from(\n\t\t\tnew Set(\n\t\t\t\t[item.id, label, value, item.componentName, ...(item.keywords ?? [])]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.map((entry) => String(entry).trim()),\n\t\t\t),\n\t\t);\n\n\t\tnormalized.push({\n\t\t\t...item,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\tkeywords,\n\t\t\tcomponentClass: resolveCompositeComponentClass(item),\n\t\t\ticonText: item.iconText ?? DEFAULT_ICON_TEXT_MAP[item.componentName ?? \"\"] ?? label.charAt(0).toUpperCase(),\n\t\t\ticonAriaLabel: item.iconAriaLabel ?? `${label} icon`,\n\t\t});\n\t});\n\n\treturn normalized;\n}\n\nexport function resolveCompositeSelectedIds(\n\titems: ICompositeComponentResolvedItem[],\n\tselectedItems: CompositeComponentItemReference[] = [],\n): string[] {\n\tconst resolved = new Set<string>();\n\n\titems.forEach((item) => {\n\t\tif (item.selected) {\n\t\t\tresolved.add(item.id);\n\t\t}\n\t});\n\n\tselectedItems.forEach((item) => {\n\t\tif (typeof item === \"string\") {\n\t\t\tresolved.add(item);\n\t\t\treturn;\n\t\t}\n\n\t\titem?.id && resolved.add(item.id);\n\t});\n\n\treturn items.filter((item) => resolved.has(item.id)).map((item) => item.id);\n}\n\nexport function toCompositeSelectOption(\n\titem: ICompositeComponentResolvedItem,\n\trenderers: ICompositeComponentRendererSet,\n): SelectOptionElementModel {\n\treturn {\n\t\tid: item.id,\n\t\tvalue: item.value,\n\t\tlabel: item.label,\n\t\tdisabled: item.disabled,\n\t\treadonly: item.readonly,\n\t\thidden: item.hidden,\n\t\tclassName: item.className,\n\t\tcustomData: {\n\t\t\tcompositeItem: item,\n\t\t},\n\t\tthumbnailRenderer: item.iconRenderer ?? renderers.iconRenderer,\n\t\tuserThumbnailRendererParams: {\n\t\t\t...(renderers.iconRendererParams ?? {}),\n\t\t\t...(item.iconRendererParams ?? {}),\n\t\t\tcompositeItem: item,\n\t\t},\n\t\tdropdownOptionRenderer: item.dropdownOptionRenderer ?? renderers.dropdownOptionRenderer,\n\t\tdropdownOptionRendererParams: {\n\t\t\t...(renderers.dropdownOptionRendererParams ?? {}),\n\t\t\t...(item.dropdownOptionRendererParams ?? {}),\n\t\t\tcompositeItem: item,\n\t\t},\n\t};\n}\n\nexport function getCompositeItemFromOption(option: SelectOptionElementModel): ICompositeComponentResolvedItem | undefined {\n\treturn option?.customData?.compositeItem as ICompositeComponentResolvedItem | undefined;\n}\n","import {\n\tCompositeComponentItemReference,\n\tICompositeComponentResolvedItem,\n\tICompositeComponentSegment,\n\tICompositeComponentTextSegment,\n\tICompositeComponentTokenSegment,\n} from \"../composite-component-configuration.types\";\nimport { resolveCompositeSelectedIds } from \"./composite-component-option-adapter\";\n\nexport const COMPOSITE_TOKEN_ATTR = \"data-composite-token-id\";\nexport const COMPOSITE_CARET_ANCHOR = \"\\u200B\";\nconst COMPOSITE_LEADING_CARET_ANCHOR_PATTERN = /^[\\s\\u00A0\\u200B]+/;\nconst COMPOSITE_TRAILING_CARET_ANCHOR_PATTERN = /[\\s\\u00A0\\u200B]+$/;\nconst COMPOSITE_CARET_ANCHOR_ONLY_PATTERN = /\\u200B/g;\n\nexport function createTextSegment(value: string): ICompositeComponentTextSegment {\n\treturn { type: \"text\", value };\n}\n\nexport function createTokenSegment(itemId: string): ICompositeComponentTokenSegment {\n\treturn { type: \"token\", itemId };\n}\n\nexport function segmentsToPlainText(segments: ICompositeComponentSegment[]): string {\n\treturn segments\n\t\t.map((segment) => (segment.type === \"text\" ? segment.value : `{${segment.itemId}}`))\n\t\t.join(\"\");\n}\n\nexport function getTokenIdsFromSegments(segments: ICompositeComponentSegment[]): string[] {\n\treturn segments.filter((segment): segment is ICompositeComponentTokenSegment => segment.type === \"token\").map(\n\t\t(segment) => segment.itemId,\n\t);\n}\n\nexport function resolveInitialSegments(\n\titems: ICompositeComponentResolvedItem[],\n\tsegments?: ICompositeComponentSegment[],\n\tselectedItems?: CompositeComponentItemReference[],\n): ICompositeComponentSegment[] {\n\tif (segments?.length) {\n\t\treturn normalizeSegments(segments, items);\n\t}\n\n\tconst selectedIds = resolveCompositeSelectedIds(items, selectedItems ?? []);\n\treturn selectedIds.map((itemId) => createTokenSegment(itemId));\n}\n\nexport function normalizeSegments(\n\tsegments: ICompositeComponentSegment[],\n\titems: ICompositeComponentResolvedItem[],\n): ICompositeComponentSegment[] {\n\tconst validIds = new Set(items.map((item) => item.id));\n\n\treturn segments.filter((segment) => {\n\t\tif (segment.type === \"text\") {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn validIds.has(segment.itemId);\n\t});\n}\n\nfunction stripWhitespaceAdjacentToTokens(segments: ICompositeComponentSegment[]): ICompositeComponentSegment[] {\n\tconst normalized: ICompositeComponentSegment[] = [];\n\n\tsegments.forEach((segment, index) => {\n\t\tif (segment.type !== \"text\") {\n\t\t\tnormalized.push(segment);\n\t\t\treturn;\n\t\t}\n\n\t\tlet value = segment.value;\n\t\tconst followsToken = index > 0 && segments[index - 1].type === \"token\";\n\t\tconst precedesToken = index < segments.length - 1 && segments[index + 1].type === \"token\";\n\n\t\tif (followsToken) {\n\t\t\tvalue = value.replace(COMPOSITE_LEADING_CARET_ANCHOR_PATTERN, \"\");\n\t\t}\n\t\tif (precedesToken) {\n\t\t\tvalue = value.replace(COMPOSITE_TRAILING_CARET_ANCHOR_PATTERN, \"\");\n\t\t}\n\n\t\tif (value.length > 0) {\n\t\t\tnormalized.push(createTextSegment(value));\n\t\t}\n\t});\n\n\treturn normalized;\n}\n\nexport function mergeAdjacentTextSegments(segments: ICompositeComponentSegment[]): ICompositeComponentSegment[] {\n\tconst merged: ICompositeComponentSegment[] = [];\n\n\tsegments.forEach((segment) => {\n\t\tif (segment.type !== \"text\") {\n\t\t\tmerged.push(segment);\n\t\t\treturn;\n\t\t}\n\n\t\tconst previous = merged[merged.length - 1];\n\t\tif (previous?.type === \"text\") {\n\t\t\tprevious.value += segment.value;\n\t\t\treturn;\n\t\t}\n\n\t\tmerged.push({ ...segment });\n\t});\n\n\treturn merged;\n}\n\nexport function sanitizeTextSegments(\n\tsegments: ICompositeComponentSegment[],\n\tfilterText: (text: string) => string,\n): ICompositeComponentSegment[] {\n\tconst sanitized = segments\n\t\t.map((segment) => {\n\t\t\tif (segment.type !== \"text\") {\n\t\t\t\treturn segment;\n\t\t\t}\n\n\t\t\tconst value = filterText(segment.value);\n\t\t\tif (value.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn value === segment.value ? segment : createTextSegment(value);\n\t\t})\n\t\t.filter((segment): segment is ICompositeComponentSegment => segment !== null);\n\n\treturn mergeAdjacentTextSegments(sanitized);\n}\n\nexport function parseSegmentsFromElement(element: HTMLElement): ICompositeComponentSegment[] {\n\tconst segments: ICompositeComponentSegment[] = [];\n\n\telement.childNodes.forEach((node) => {\n\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\tconst value = (node.textContent ?? \"\").replace(COMPOSITE_CARET_ANCHOR_ONLY_PATTERN, \"\");\n\t\t\tif (value.length > 0) {\n\t\t\t\tsegments.push(createTextSegment(value));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (node.nodeType !== Node.ELEMENT_NODE) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst child = node as HTMLElement;\n\t\tconst tokenId = child.getAttribute(COMPOSITE_TOKEN_ATTR);\n\t\tif (tokenId) {\n\t\t\tsegments.push(createTokenSegment(tokenId));\n\t\t\treturn;\n\t\t}\n\n\t\tconst nestedText = child.textContent ?? \"\";\n\t\tif (nestedText.length > 0) {\n\t\t\tsegments.push(createTextSegment(nestedText));\n\t\t}\n\t});\n\n\treturn stripWhitespaceAdjacentToTokens(mergeAdjacentTextSegments(segments));\n}\n","import { ICustomRenderer } from \"../../../../select/src/select-configuration-types/select_configuration\";\nimport { ICompositeComponentResolvedItem } from \"../../composite-component-configuration.types\";\n\ninterface ICompositeComponentIconRendererParams {\n\tcompositeItem?: ICompositeComponentResolvedItem;\n}\n\nexport class CompositeComponentIconRenderer implements ICustomRenderer {\n\tprivate params!: ICompositeComponentIconRendererParams;\n\tprivate element: HTMLElement | null = null;\n\n\tinit(params: ICompositeComponentIconRendererParams): void {\n\t\tthis.params = params;\n\t}\n\n\tgetElement(): HTMLElement {\n\t\tconst item = this.params?.compositeItem;\n\t\tconst icon = document.createElement(\"span\");\n\t\ticon.className = \"dg-composite-component__icon\";\n\t\ticon.setAttribute(\"aria-hidden\", \"true\");\n\t\ticon.style.display = \"inline-flex\";\n\t\ticon.style.alignItems = \"center\";\n\t\ticon.style.justifyContent = \"center\";\n\t\ticon.style.minWidth = \"20px\";\n\t\ticon.style.height = \"20px\";\n\t\ticon.style.fontSize = \"12px\";\n\t\ticon.style.lineHeight = \"1\";\n\t\ticon.textContent = item?.iconText ?? \"\";\n\t\tthis.element = icon;\n\t\treturn icon;\n\t}\n\n\tdestroy(): void {\n\t\tthis.element?.remove();\n\t\tthis.element = null;\n\t}\n}\n","import { ICustomRenderer } from \"../../../../utility/custom-render.types\";\nimport { ICompositeComponentResolvedItem } from \"../../composite-component-configuration.types\";\n\nexport interface ICompositeComponentTokenFieldRendererParams {\n\tcompositeItem?: ICompositeComponentResolvedItem;\n\treadonly?: boolean;\n\tonRemove?: () => void;\n}\n\nfunction createTokenRemoveButton(onRemove: () => void): HTMLButtonElement {\n\tconst removeButton = document.createElement(\"button\");\n\tremoveButton.type = \"button\";\n\tremoveButton.className = \"dg-token-input__remove-icon\";\n\tremoveButton.setAttribute(\"tabindex\", \"-1\");\n\tremoveButton.setAttribute(\"aria-label\", \"Remove\");\n\n\tconst svgNS = \"http://www.w3.org/2000/svg\";\n\tconst svgElem = document.createElementNS(svgNS, \"svg\");\n\tsvgElem.setAttribute(\"width\", \"8\");\n\tsvgElem.setAttribute(\"height\", \"16\");\n\tsvgElem.setAttribute(\"viewBox\", \"0 0 20 20\");\n\tsvgElem.classList.add(\"dg-token-input__remove-svg\");\n\n\tconst gElem = document.createElementNS(svgNS, \"g\");\n\tgElem.setAttribute(\"id\", \"Layer_1-2\");\n\tgElem.setAttribute(\"data-name\", \"Layer 1\");\n\n\tconst path1 = document.createElementNS(svgNS, \"path\");\n\tpath1.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\tconst path2 = document.createElementNS(svgNS, \"path\");\n\tpath2.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\tgElem.appendChild(path1);\n\tgElem.appendChild(path2);\n\tsvgElem.appendChild(gElem);\n\tremoveButton.appendChild(svgElem);\n\n\tremoveButton.addEventListener(\"click\", (event) => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tonRemove();\n\t});\n\n\treturn removeButton;\n}\n\nexport class CompositeComponentTokenFieldRenderer implements ICustomRenderer {\n\tprivate element: HTMLElement | null = null;\n\tprivate removeHandler?: () => void;\n\n\tinit(params: ICompositeComponentTokenFieldRendererParams): void {\n\t\tconst item = params.compositeItem;\n\t\tconst label = item?.label ?? item?.value ?? \"\";\n\n\t\tconst tokenElement = document.createElement(\"div\");\n\t\ttokenElement.className = \"dg-token__element\";\n\t\tif (params.readonly) {\n\t\t\ttokenElement.classList.add(\"dg-token__element--not-editable\");\n\t\t}\n\n\t\tconst tokenInput = document.createElement(\"div\");\n\t\ttokenInput.className = \"dg-token-input\";\n\n\t\tconst labelElement = document.createElement(\"div\");\n\t\tlabelElement.className = \"dg-token-input__label\";\n\t\tlabelElement.textContent = label;\n\n\t\ttokenInput.appendChild(labelElement);\n\n\t\tif (!params.readonly) {\n\t\t\tthis.removeHandler = () => params.onRemove?.();\n\t\t\ttokenInput.appendChild(createTokenRemoveButton(this.removeHandler));\n\t\t}\n\n\t\ttokenElement.appendChild(tokenInput);\n\t\tthis.element = tokenElement;\n\t}\n\n\tgetElement(): HTMLElement | null {\n\t\treturn this.element;\n\t}\n\n\tdestroy(): void {\n\t\tthis.element?.remove();\n\t\tthis.element = null;\n\t\tthis.removeHandler = undefined;\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME, getBeanInstanceByBeanName } from \"@dg/corecomponent\";\nimport { IComponentDetails } from \"@dg/corecomponent/UserComponentHandler.js\";\nimport { IHelperTextUserComponentHandler } from \"../../../../description/description-view.types\";\nimport { ILabelUserComponentHandler } from \"../../../../label/label.types\";\nimport { AbstractUserComponentHandler } from \"../../../../utility/abstract-user-component-handler\";\nimport { ComponentItemType } from \"../../../../utility/component-detail.types\";\nimport { ICompositeComponentConfiguration, ICompositeComponentResolvedItem } from \"../../composite-component-configuration.types\";\nimport { CompositeComponentIconRenderer } from \"../renderers/composite-component-icon-renderer\";\nimport { CompositeComponentTokenFieldRenderer } from \"../renderers/composite-component-token-field-renderer\";\n\nexport const enum CompositeRendererPropertyName {\n\tLABEL_RENDERER = \"labelRenderer\",\n\tDESCRIPTION_RENDERER = \"descriptionRenderer\",\n}\n\n@Bean(BEAN_NAME.USER_COMPONENT_HANDLER)\nexport class CompositeComponentUserComponentHandler\n\textends AbstractUserComponentHandler\n\timplements ILabelUserComponentHandler, IHelperTextUserComponentHandler\n{\n\t@AutoWired(BEAN_NAME.BEANS) protected getBeanInstanceByBeanName!: getBeanInstanceByBeanName;\n\n\t@AutoWired(\"configuration\")\n\tprivate configuration!: ICompositeComponentConfiguration;\n\n\tgetLabelRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(item, CompositeRendererPropertyName.LABEL_RENDERER, params, CompositeRendererPropertyName.LABEL_RENDERER);\n\t}\n\n\tgetDescriptionRendererDetails(item: any, params?: any): IComponentDetails | undefined {\n\t\treturn this.getComponentDetails(\n\t\t\titem,\n\t\t\tCompositeRendererPropertyName.DESCRIPTION_RENDERER,\n\t\t\tparams,\n\t\t\tCompositeRendererPropertyName.DESCRIPTION_RENDERER,\n\t\t);\n\t}\n\n\tgetIconRenderer(item: ICompositeComponentResolvedItem) {\n\t\treturn item.iconRenderer ?? this.configuration.iconRenderer ?? CompositeComponentIconRenderer;\n\t}\n\n\tgetIconRendererParams(item: ICompositeComponentResolvedItem): object {\n\t\treturn {\n\t\t\t...(this.configuration.iconRendererParams ?? {}),\n\t\t\t...(item.iconRendererParams ?? {}),\n\t\t};\n\t}\n\n\tgetTokenRenderer(item: ICompositeComponentResolvedItem) {\n\t\treturn item.tokenRenderer\n\t\t\t?? this.configuration.tokenRenderer\n\t\t\t?? CompositeComponentTokenFieldRenderer;\n\t}\n\n\tgetTokenRendererParams(item: ICompositeComponentResolvedItem): object {\n\t\treturn {\n\t\t\t...(this.configuration.tokenRendererParams ?? {}),\n\t\t\t...(item.tokenRendererParams ?? {}),\n\t\t};\n\t}\n\n\tgetDropdownOptionRenderer(item: ICompositeComponentResolvedItem) {\n\t\treturn item.dropdownOptionRenderer\n\t\t\t?? this.configuration.dropdownOptionRenderer;\n\t}\n\n\tgetDropdownOptionRendererParams(item: ICompositeComponentResolvedItem): object {\n\t\treturn {\n\t\t\t...(this.configuration.dropdownOptionRendererParams ?? {}),\n\t\t\t...(item.dropdownOptionRendererParams ?? {}),\n\t\t};\n\t}\n\n\tprotected getComponent<T>(item: ComponentItemType<T>, propertyName: string): T | undefined {\n\t\tswitch (propertyName) {\n\t\t\tcase CompositeRendererPropertyName.LABEL_RENDERER:\n\t\t\tcase CompositeRendererPropertyName.DESCRIPTION_RENDERER:\n\t\t\t\treturn item.getRenderer();\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprotected getUserParams<T, P>(item: ComponentItemType<T>, propertyName: string, params: P): any {\n\t\tswitch (propertyName) {\n\t\t\tcase CompositeRendererPropertyName.LABEL_RENDERER:\n\t\t\t\treturn this.getUserRendererParams(item, params);\n\t\t\tdefault:\n\t\t\t\treturn {};\n\t\t}\n\t}\n}\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { ICustomRenderer } from \"../../../../utility/custom-render.types\";\nimport {ICompositeComponentResolvedItem,ICompositeComponentSegment,} from \"../../composite-component-configuration.types\";\nimport {COMPOSITE_TOKEN_ATTR,COMPOSITE_CARET_ANCHOR,parseSegmentsFromElement,} from \"../../utils/composite-component-segment-utils\";\nimport { containsNonAllowableCharacter } from \"../../utils/composite-component-character-filter-utils\";\nimport { CompositeComponentUserComponentHandler } from \"../model/composite-component-user-component-handler\";\nimport { ICompositeComponentOptionHandler } from \"../model/composite-component-option-handler.types\";\nimport { CompositeInputComponentType } from \"./composite-input-view\";\n\ntype CompositeTokenHostElement = HTMLElement & {\n\t__compositeTokenRenderer?: ICustomRenderer;\n};\n\nconst NAVIGATION_KEYS = new Set([\n\t\"Backspace\",\n\t\"Delete\",\n\t\"ArrowLeft\",\n\t\"ArrowRight\",\n\t\"ArrowUp\",\n\t\"ArrowDown\",\n\t\"Tab\",\n\t\"Enter\",\n\t\"Escape\",\n\t\"Home\",\n\t\"End\",\n]);\n\nexport class CompositeInputController extends EventEmitter {\n\tprivate component!: CompositeInputComponentType;\n\tprivate isComposing = false;\n\tprivate savedInsertRange: Range | null = null;\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER)\n\tprivate optionHandler!: ICompositeComponentOptionHandler;\n\n\t@AutoWired(BEAN_NAME.USER_COMPONENT_HANDLER)\n\tprivate userComponentHandler!: CompositeComponentUserComponentHandler;\n\n\tsetComponent(component: CompositeInputComponentType): void {\n\t\tthis.component = component;\n\t\tthis.registerEvents();\n\t}\n\n\tdestroy(): void {\n\t\tthis.destroyAllTokenRenderers();\n\t\tthis.component.getInputElement().replaceChildren();\n\t}\n\n\tfocus(): void {\n\t\tthis.component.getInputElement().focus();\n\t}\n\n\tgetInputElement(): HTMLElement {\n\t\treturn this.component.getInputElement();\n\t}\n\n\trenderSegments(segments: ICompositeComponentSegment[]): void {\n\t\tconst sanitized = this.optionHandler.sanitizeSegments(segments);\n\t\tconst input = this.component.getInputElement();\n\t\tconst shouldRestoreCaret = document.activeElement === input;\n\t\tconst caretOffset = shouldRestoreCaret ? this.getCaretOffset(input) : null;\n\n\t\tthis.savedInsertRange = null;\n\t\tthis.destroyAllTokenRenderers();\n\t\tinput.replaceChildren();\n\n\t\tsanitized.forEach((segment) => {\n\t\t\tif (segment.type === \"text\") {\n\t\t\t\tinput.appendChild(document.createTextNode(segment.value));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst item = this.getItemById(segment.itemId);\n\t\t\tif (!item) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinput.appendChild(this.createCaretAnchorNode());\n\t\t\tinput.appendChild(this.createTokenElement(item));\n\t\t\tinput.appendChild(this.createCaretAnchorNode());\n\t\t});\n\n\t\tif (caretOffset !== null) {\n\t\t\tthis.setCaretOffset(input, caretOffset);\n\t\t}\n\n\t\tthis.updatePlaceholderState(sanitized);\n\t}\n\n\tgetSegments(): ICompositeComponentSegment[] {\n\t\treturn parseSegmentsFromElement(this.component.getInputElement());\n\t}\n\n\tsaveInsertPosition(): void {\n\t\tconst input = this.component.getInputElement();\n\t\tconst selection = window.getSelection();\n\t\tif (!selection || selection.rangeCount === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst range = selection.getRangeAt(0);\n\t\tif (!this.isRangeWithinInput(range, input)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.savedInsertRange = range.cloneRange();\n\t}\n\n\tinsertToken(item: ICompositeComponentResolvedItem): void {\n\t\tconst input = this.component.getInputElement();\n\t\tconst range = this.resolveInsertRange();\n\n\t\tinput.focus();\n\n\t\tconst selection = window.getSelection();\n\t\tif (selection) {\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange(range);\n\t\t}\n\n\t\trange.deleteContents();\n\t\tconst tokenElement = this.createTokenElement(item);\n\t\trange.insertNode(tokenElement);\n\n\t\tconst spacer = this.createCaretAnchorNode();\n\t\ttokenElement.after(spacer);\n\t\tthis.ensureCaretAnchorBefore(tokenElement);\n\n\t\tif (selection) {\n\t\t\tconst caretRange = document.createRange();\n\t\t\tcaretRange.setStart(spacer, spacer.textContent?.length ?? 1);\n\t\t\tcaretRange.collapse(true);\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange(caretRange);\n\t\t\tthis.savedInsertRange = caretRange.cloneRange();\n\t\t}\n\n\t\tthis.syncFromDom(\"UI\");\n\t}\n\n\tremoveTokenElement(tokenElement: HTMLElement): void {\n\t\tthis.destroyTokenRenderer(tokenElement);\n\t\ttokenElement.remove();\n\t\tthis.syncFromDom(\"UI\");\n\t}\n\n\tremoveToken(itemId: string): void {\n\t\tconst input = this.component.getInputElement();\n\t\tinput.querySelectorAll(`[${COMPOSITE_TOKEN_ATTR}=\"${itemId}\"]`).forEach((element) => {\n\t\t\telement.remove();\n\t\t});\n\t\tthis.syncFromDom(\"UI\");\n\t}\n\n\tclear(): void {\n\t\tthis.savedInsertRange = null;\n\t\tthis.component.getInputElement().replaceChildren();\n\t\tthis.updatePlaceholderState([]);\n\t\tthis.dispatchEvent({ type: \"segmentsChanged\", segments: [], initiator: \"API\" });\n\t}\n\n\tprivate registerEvents(): void {\n\t\tconst input = this.component.getInputElement();\n\t\tconst ownerState = {\n\t\t\tdisabled: this.optionHandler.isDisabled(),\n\t\t\treadonly: this.optionHandler.isReadOnly(),\n\t\t};\n\n\t\tinput.classList.toggle(\"dg-composite-component__input--disabled\", ownerState.disabled);\n\t\tinput.classList.toggle(\"dg-composite-component__input--readonly\", ownerState.readonly);\n\t\tinput.setAttribute(\"contenteditable\", ownerState.disabled || ownerState.readonly ? \"false\" : \"true\");\n\n\t\tif (ownerState.disabled || ownerState.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.addListener(input, \"input\", () => {\n\t\t\tif (this.isComposing) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.sanitizeInputText()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.ensureDomCaretAnchors();\n\t\t\tthis.syncFromDom(\"UI\");\n\t\t});\n\t\tthis.addListener(input, \"compositionstart\", () => {\n\t\t\tthis.isComposing = true;\n\t\t});\n\t\tthis.addListener(input, \"compositionend\", () => {\n\t\t\tthis.isComposing = false;\n\t\t\tif (this.sanitizeInputText()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.syncFromDom(\"UI\");\n\t\t});\n\t\tthis.addListener(input, \"beforeinput\", (event: InputEvent) => {\n\t\t\tif (this.isComposing) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.inputType === \"insertText\"\n\t\t\t\t&& event.data\n\t\t\t\t&& this.handleInsertTextAfterToken(event.data)\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!event.data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst matcher = this.optionHandler.getNonAllowableCharacterMatcher();\n\t\t\tif (!matcher) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.inputType === \"insertFromPaste\" || event.inputType === \"insertFromDrop\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (containsNonAllowableCharacter(event.data, matcher)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\t\tthis.addListener(input, \"paste\", (event: ClipboardEvent) => {\n\t\t\tconst matcher = this.optionHandler.getNonAllowableCharacterMatcher();\n\t\t\tif (!matcher) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\t\t\tconst pastedText = event.clipboardData?.getData(\"text/plain\") ?? \"\";\n\t\t\tconst filteredText = this.optionHandler.filterAllowedText(pastedText);\n\t\t\tif (filteredText.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.insertTextAtSelection(filteredText);\n\t\t\tthis.syncFromDom(\"UI\");\n\t\t});\n\t\tthis.addListener(input, \"keydown\", (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.shouldAllowKeydown(event)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.optionHandler.isCharacterAllowed(event.key)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\t\tthis.addListener(input, \"keyup\", () => {\n\t\t\tthis.saveInsertPosition();\n\t\t});\n\t\tthis.addListener(input, \"mousedown\", (event: MouseEvent) => {\n\t\t\tthis.handlePointerDown(event);\n\t\t});\n\t\tthis.addListener(input, \"mouseup\", (event: MouseEvent) => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tthis.setCaretFromPointer(event);\n\t\t\t\tthis.saveInsertPosition();\n\t\t\t});\n\t\t});\n\t\tthis.addListener(document, \"selectionchange\", () => {\n\t\t\tif (document.activeElement === input) {\n\t\t\t\tthis.saveInsertPosition();\n\t\t\t}\n\t\t});\n\t\tthis.addListener(input, 'focus', (event: FocusEvent) => {\n\t\t\tthis.optionHandler.onFocus(event);\n\t\t});\n\t\tthis.addListener(input, 'blur', (event: FocusEvent) => {\n\t\t\tthis.saveInsertPosition();\n\t\t\tthis.optionHandler.onBlur(event);\n\t\t});\n\t}\n\n\tprivate createTokenElement(item: ICompositeComponentResolvedItem): HTMLElement {\n\t\tconst wrapper = document.createElement(\"span\") as CompositeTokenHostElement;\n\t\twrapper.className = \"dg-composite-component__token-host\";\n\t\twrapper.setAttribute(COMPOSITE_TOKEN_ATTR, item.id);\n\t\twrapper.setAttribute(\"contenteditable\", \"false\");\n\n\t\tconst RendererClass = this.userComponentHandler.getTokenRenderer(item);\n\t\tconst renderer = new RendererClass();\n\t\trenderer.init({\n\t\t\t...this.userComponentHandler.getTokenRendererParams(item),\n\t\t\tcompositeItem: item,\n\t\t\treadonly: this.optionHandler.isReadOnly(),\n\t\t\tonRemove: () => this.removeTokenElement(wrapper),\n\t\t});\n\t\twrapper.__compositeTokenRenderer = renderer;\n\n\t\tconst tokenElement = renderer.getElement?.() ?? (renderer as any).createElement?.();\n\t\ttokenElement && wrapper.appendChild(tokenElement);\n\t\treturn wrapper;\n\t}\n\n\tprivate destroyAllTokenRenderers(): void {\n\t\tthis.component.getInputElement()\n\t\t\t.querySelectorAll(`[${COMPOSITE_TOKEN_ATTR}]`)\n\t\t\t.forEach((element) => this.destroyTokenRenderer(element as CompositeTokenHostElement));\n\t}\n\n\tprivate destroyTokenRenderer(tokenElement: CompositeTokenHostElement): void {\n\t\ttokenElement.__compositeTokenRenderer?.destroy?.();\n\t\tdelete tokenElement.__compositeTokenRenderer;\n\t}\n\n\tprivate getItemById(itemId: string): ICompositeComponentResolvedItem | undefined {\n\t\treturn this.optionHandler.getItems().find((item) => item.id === itemId);\n\t}\n\n\tprivate syncFromDom(initiator: \"UI\" | \"API\"): void {\n\t\tconst rawSegments = this.getSegments();\n\t\tconst segments = this.optionHandler.sanitizeSegments(rawSegments);\n\t\tif (this.segmentsChanged(rawSegments, segments)) {\n\t\t\tthis.renderSegments(segments);\n\t\t}\n\t\tthis.updatePlaceholderState(segments);\n\t\tthis.dispatchEvent({ type: \"segmentsChanged\", segments, initiator });\n\t}\n\n\tprivate segmentsChanged(\n\t\tbefore: ICompositeComponentSegment[],\n\t\tafter: ICompositeComponentSegment[],\n\t): boolean {\n\t\tif (before.length !== after.length) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn before.some((segment, index) => {\n\t\t\tconst next = after[index];\n\t\t\tif (segment.type !== next.type) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (segment.type === \"text\" && next.type === \"text\") {\n\t\t\t\treturn segment.value !== next.value;\n\t\t\t}\n\n\t\t\tif (segment.type === \"token\" && next.type === \"token\") {\n\t\t\t\treturn segment.itemId !== next.itemId;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tprivate sanitizeInputText(): boolean {\n\t\tconst matcher = this.optionHandler.getNonAllowableCharacterMatcher();\n\t\tif (!matcher) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst input = this.component.getInputElement();\n\t\tlet changed = false;\n\n\t\tinput.childNodes.forEach((node) => {\n\t\t\tif (node.nodeType !== Node.TEXT_NODE) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = node.textContent ?? \"\";\n\t\t\tconst filteredText = this.filterTextPreservingCaretAnchors(text);\n\t\t\tif (filteredText === text) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selection = window.getSelection();\n\t\t\tconst range = selection?.rangeCount ? selection.getRangeAt(0) : null;\n\t\t\tconst shouldRestoreCaret = !!range && range.startContainer === node;\n\t\t\tconst caretOffset = shouldRestoreCaret ? range!.startOffset : null;\n\n\t\t\tnode.textContent = filteredText;\n\t\t\tchanged = true;\n\n\t\t\tif (shouldRestoreCaret && caretOffset !== null && selection) {\n\t\t\t\tconst nextRange = document.createRange();\n\t\t\t\tconst nextOffset = this.mapCaretOffsetAfterFilter(text, filteredText, caretOffset);\n\t\t\t\tnextRange.setStart(node, nextOffset);\n\t\t\t\tnextRange.collapse(true);\n\t\t\t\tselection.removeAllRanges();\n\t\t\t\tselection.addRange(nextRange);\n\t\t\t\tthis.savedInsertRange = nextRange.cloneRange();\n\t\t\t}\n\t\t});\n\n\t\tif (changed) {\n\t\t\tthis.ensureDomCaretAnchors();\n\t\t\tthis.syncFromDom(\"UI\");\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\tprivate filterTextPreservingCaretAnchors(text: string): string {\n\t\tif (!text.includes(COMPOSITE_CARET_ANCHOR)) {\n\t\t\treturn this.optionHandler.filterAllowedText(text);\n\t\t}\n\n\t\treturn text\n\t\t\t.split(COMPOSITE_CARET_ANCHOR)\n\t\t\t.map((part) => this.optionHandler.filterAllowedText(part))\n\t\t\t.join(COMPOSITE_CARET_ANCHOR);\n\t}\n\n\tprivate mapCaretOffsetAfterFilter(before: string, after: string, caretOffset: number): number {\n\t\tif (before === after) {\n\t\t\treturn caretOffset;\n\t\t}\n\n\t\tconst prefix = before.slice(0, caretOffset);\n\t\tconst filteredPrefix = this.filterTextPreservingCaretAnchors(prefix);\n\t\treturn Math.min(filteredPrefix.length, after.length);\n\t}\n\n\tprivate resolveInsertRange(): Range {\n\t\tconst input = this.component.getInputElement();\n\t\tconst selection = window.getSelection();\n\n\t\tif (selection && selection.rangeCount > 0) {\n\t\t\tconst activeRange = selection.getRangeAt(0);\n\t\t\tif (this.isRangeWithinInput(activeRange, input)) {\n\t\t\t\treturn activeRange.cloneRange();\n\t\t\t}\n\t\t}\n\n\t\tif (this.savedInsertRange && this.isRangeWithinInput(this.savedInsertRange, input)) {\n\t\t\treturn this.savedInsertRange.cloneRange();\n\t\t}\n\n\t\tconst fallbackRange = document.createRange();\n\t\tfallbackRange.selectNodeContents(input);\n\t\tfallbackRange.collapse(false);\n\t\treturn fallbackRange;\n\t}\n\n\tprivate isRangeWithinInput(range: Range, input: HTMLElement): boolean {\n\t\treturn input.contains(range.startContainer) && input.contains(range.endContainer);\n\t}\n\n\tprivate insertTextAtSelection(text: string): void {\n\t\tconst input = this.component.getInputElement();\n\t\tconst selection = window.getSelection();\n\t\tif (!selection || selection.rangeCount === 0) {\n\t\t\tinput.appendChild(document.createTextNode(text));\n\t\t\treturn;\n\t\t}\n\n\t\tconst range = selection.getRangeAt(0);\n\t\tif (!input.contains(range.commonAncestorContainer)) {\n\t\t\treturn;\n\t\t}\n\n\t\trange.deleteContents();\n\t\tconst textNode = document.createTextNode(text);\n\t\trange.insertNode(textNode);\n\t\trange.setStartAfter(textNode);\n\t\trange.collapse(true);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t}\n\n\tprivate shouldAllowKeydown(event: KeyboardEvent): boolean {\n\t\tif (NAVIGATION_KEYS.has(event.key)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.ctrlKey || event.metaKey) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.key.length !== 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate updatePlaceholderState(segments: ICompositeComponentSegment[]): void {\n\t\tconst placeholder = this.component.getPlaceholderElement();\n\t\tconst hasContent = segments.some((segment) => {\n\t\t\tif (segment.type === \"token\") {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn segment.value.trim().length > 0;\n\t\t});\n\t\tplaceholder.classList.toggle(\"dg-composite-component__placeholder--hidden\", hasContent);\n\t\tplaceholder.textContent = this.optionHandler.getPlaceholder();\n\t}\n\n\tprivate createCaretAnchorNode(): Text {\n\t\treturn document.createTextNode(COMPOSITE_CARET_ANCHOR);\n\t}\n\n\tprivate ensureCaretAnchorBefore(tokenElement: HTMLElement): void {\n\t\tconst previous = tokenElement.previousSibling;\n\t\tif (\n\t\t\tprevious?.nodeType === Node.TEXT_NODE\n\t\t\t&& (previous.textContent ?? \"\").includes(COMPOSITE_CARET_ANCHOR)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\ttokenElement.before(this.createCaretAnchorNode());\n\t}\n\n\tprivate ensureCaretAnchorAfter(tokenElement: HTMLElement): void {\n\t\tconst next = tokenElement.nextSibling;\n\t\tif (next?.nodeType === Node.TEXT_NODE && (next.textContent ?? \"\").includes(COMPOSITE_CARET_ANCHOR)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttokenElement.after(this.createCaretAnchorNode());\n\t}\n\n\tprivate ensureDomCaretAnchors(): void {\n\t\tconst input = this.component.getInputElement();\n\t\tinput.childNodes.forEach((node) => {\n\t\t\tif (node.nodeType !== Node.ELEMENT_NODE) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst tokenHost = node as HTMLElement;\n\t\t\tif (!tokenHost.hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.ensureCaretAnchorBefore(tokenHost);\n\t\t\tthis.ensureCaretAnchorAfter(tokenHost);\n\t\t});\n\t}\n\n\tprivate handleInsertTextAfterToken(text: string): boolean {\n\t\tif (!this.optionHandler.isCharacterAllowed(text)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst input = this.component.getInputElement();\n\t\tconst selection = window.getSelection();\n\t\tif (!selection || selection.rangeCount === 0 || !selection.isCollapsed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst range = selection.getRangeAt(0);\n\t\tif (!this.isRangeWithinInput(range, input)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { textNode, anchorOffset } = this.resolveTextInsertionPoint(range);\n\t\tif (!textNode || !this.shouldHandleTokenAdjacentInsert(textNode, anchorOffset)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst currentText = textNode.textContent ?? \"\";\n\t\tconst insertOffset = this.resolveInsertOffsetInAnchorText(currentText, anchorOffset);\n\t\tconst nextText = `${currentText.slice(0, insertOffset)}${text}${currentText.slice(insertOffset)}`;\n\t\ttextNode.textContent = this.filterTextPreservingCaretAnchors(nextText);\n\n\t\tconst nextRange = document.createRange();\n\t\tconst insertedOffset = insertOffset + text.length;\n\t\tnextRange.setStart(textNode, Math.min(insertedOffset, textNode.textContent?.length ?? 0));\n\t\tnextRange.collapse(true);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(nextRange);\n\t\tthis.savedInsertRange = nextRange.cloneRange();\n\t\tthis.ensureDomCaretAnchors();\n\t\tthis.syncFromDom(\"UI\");\n\t\treturn true;\n\t}\n\n\tprivate shouldHandleTokenAdjacentInsert(textNode: Text, offset: number): boolean {\n\t\tconst text = textNode.textContent ?? \"\";\n\t\tif (text.includes(COMPOSITE_CARET_ANCHOR)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst previous = textNode.previousSibling;\n\t\tif (\n\t\t\tprevious?.nodeType === Node.ELEMENT_NODE\n\t\t\t&& (previous as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst next = textNode.nextSibling;\n\t\treturn (\n\t\t\tnext?.nodeType === Node.ELEMENT_NODE\n\t\t\t&& (next as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)\n\t\t\t&& offset === text.length\n\t\t);\n\t}\n\n\tprivate resolveInsertOffsetInAnchorText(text: string, offset: number): number {\n\t\tif (!text.includes(COMPOSITE_CARET_ANCHOR)) {\n\t\t\treturn offset;\n\t\t}\n\n\t\tif (text === COMPOSITE_CARET_ANCHOR || offset >= text.length) {\n\t\t\treturn text.length;\n\t\t}\n\n\t\tconst leadingAnchorLength = text.startsWith(COMPOSITE_CARET_ANCHOR) ? COMPOSITE_CARET_ANCHOR.length : 0;\n\t\treturn Math.max(offset, leadingAnchorLength);\n\t}\n\n\tprivate resolveTextInsertionPoint(range: Range): {\n\t\ttextNode: Text | null;\n\t\tanchorOffset: number;\n\t} {\n\t\tconst { startContainer, startOffset } = range;\n\n\t\tif (startContainer.nodeType === Node.TEXT_NODE) {\n\t\t\treturn {\n\t\t\t\ttextNode: startContainer as Text,\n\t\t\t\tanchorOffset: startOffset,\n\t\t\t};\n\t\t}\n\n\t\tif (startContainer.nodeType !== Node.ELEMENT_NODE) {\n\t\t\treturn { textNode: null, anchorOffset: startOffset };\n\t\t}\n\n\t\tconst element = startContainer as HTMLElement;\n\t\tif (element.hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\tconst trailingAnchor = this.getOrCreateTrailingCaretAnchor(element);\n\t\t\treturn {\n\t\t\t\ttextNode: trailingAnchor,\n\t\t\t\tanchorOffset: trailingAnchor.textContent?.length ?? 0,\n\t\t\t};\n\t\t}\n\n\t\tconst child = element.childNodes[startOffset] ?? element.childNodes[startOffset - 1];\n\t\tif (child?.nodeType === Node.TEXT_NODE) {\n\t\t\tconst textNode = child as Text;\n\t\t\treturn {\n\t\t\t\ttextNode,\n\t\t\t\tanchorOffset: child === element.childNodes[startOffset] ? 0 : textNode.textContent?.length ?? 0,\n\t\t\t};\n\t\t}\n\n\t\tif (child?.nodeType === Node.ELEMENT_NODE && (child as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\tconst trailingAnchor = this.getOrCreateTrailingCaretAnchor(child as HTMLElement);\n\t\t\treturn {\n\t\t\t\ttextNode: trailingAnchor,\n\t\t\t\tanchorOffset: trailingAnchor.textContent?.length ?? 0,\n\t\t\t};\n\t\t}\n\n\t\treturn { textNode: null, anchorOffset: startOffset };\n\t}\n\n\tprivate getOrCreateTrailingCaretAnchor(tokenHost: HTMLElement): Text {\n\t\tconst next = tokenHost.nextSibling;\n\t\tif (next?.nodeType === Node.TEXT_NODE) {\n\t\t\tconst textNode = next as Text;\n\t\t\tif ((textNode.textContent ?? \"\").includes(COMPOSITE_CARET_ANCHOR)) {\n\t\t\t\treturn textNode;\n\t\t\t}\n\t\t}\n\n\t\tconst anchor = this.createCaretAnchorNode();\n\t\ttokenHost.after(anchor);\n\t\treturn anchor;\n\t}\n\n\tprivate getNodeCaretLength(node: Node): number {\n\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\treturn node.textContent?.length ?? 0;\n\t\t}\n\n\t\tif (node.nodeType === Node.ELEMENT_NODE && (node as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tprivate getCaretOffset(input: HTMLElement): number | null {\n\t\tconst selection = window.getSelection();\n\t\tif (!selection || selection.rangeCount === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst range = selection.getRangeAt(0);\n\t\tif (!this.isRangeWithinInput(range, input)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet offset = 0;\n\t\tfor (const child of input.childNodes) {\n\t\t\tif (child === range.startContainer) {\n\t\t\t\treturn offset + range.startOffset;\n\t\t\t}\n\n\t\t\tif (child.contains(range.startContainer)) {\n\t\t\t\tif (child.nodeType === Node.TEXT_NODE) {\n\t\t\t\t\treturn offset + range.startOffset;\n\t\t\t\t}\n\n\t\t\t\tif ((child as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\t\t\treturn offset + 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toffset += this.getNodeCaretLength(child);\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tprivate setCaretOffset(input: HTMLElement, targetOffset: number): void {\n\t\tconst selection = window.getSelection();\n\t\tif (!selection) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet offset = 0;\n\t\tfor (const child of input.childNodes) {\n\t\t\tconst length = this.getNodeCaretLength(child);\n\t\t\tif (offset + length >= targetOffset) {\n\t\t\t\tconst range = document.createRange();\n\t\t\t\tif (child.nodeType === Node.TEXT_NODE) {\n\t\t\t\t\trange.setStart(child, Math.max(0, targetOffset - offset));\n\t\t\t\t} else if ((child as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\t\t\tthis.placeCaretAfterToken(child as HTMLElement);\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\trange.setStart(child, 0);\n\t\t\t\t}\n\n\t\t\t\trange.collapse(true);\n\t\t\t\tselection.removeAllRanges();\n\t\t\t\tselection.addRange(range);\n\t\t\t\tthis.savedInsertRange = range.cloneRange();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset += length;\n\t\t}\n\n\t\tconst fallbackRange = document.createRange();\n\t\tfallbackRange.selectNodeContents(input);\n\t\tfallbackRange.collapse(false);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(fallbackRange);\n\t\tthis.savedInsertRange = fallbackRange.cloneRange();\n\t}\n\n\tprivate findAncestorTokenHost(node: Node): HTMLElement | null {\n\t\tlet current: Node | null = node;\n\t\tconst input = this.component.getInputElement();\n\n\t\twhile (current && current !== input) {\n\t\t\tif (current.nodeType === Node.ELEMENT_NODE && (current as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\t\treturn current as HTMLElement;\n\t\t\t}\n\t\t\tcurrent = current.parentNode;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate placeCaretBeforeToken(tokenHost: HTMLElement): Range | null {\n\t\tconst selection = window.getSelection();\n\t\tif (!selection) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst range = document.createRange();\n\t\tconst previous = tokenHost.previousSibling;\n\t\tif (previous?.nodeType === Node.TEXT_NODE) {\n\t\t\tconst text = previous.textContent ?? \"\";\n\t\t\tif (text === COMPOSITE_CARET_ANCHOR) {\n\t\t\t\tconst textBeforeAnchor = previous.previousSibling;\n\t\t\t\tif (textBeforeAnchor?.nodeType === Node.TEXT_NODE) {\n\t\t\t\t\trange.setStart(textBeforeAnchor, textBeforeAnchor.textContent?.length ?? 0);\n\t\t\t\t} else {\n\t\t\t\t\trange.setStart(previous, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trange.setStart(previous, text.length);\n\t\t\t}\n\t\t} else {\n\t\t\tconst spacer = this.createCaretAnchorNode();\n\t\t\ttokenHost.before(spacer);\n\t\t\trange.setStart(spacer, 0);\n\t\t}\n\n\t\trange.collapse(true);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t\tthis.savedInsertRange = range.cloneRange();\n\t\treturn range;\n\t}\n\n\tprivate placeCaretAfterToken(tokenHost: HTMLElement): Range | null {\n\t\tconst selection = window.getSelection();\n\t\tif (!selection) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst range = document.createRange();\n\t\tconst next = tokenHost.nextSibling;\n\t\tif (next?.nodeType === Node.TEXT_NODE) {\n\t\t\tconst text = next.textContent ?? \"\";\n\t\t\tif (text === COMPOSITE_CARET_ANCHOR) {\n\t\t\t\trange.setStart(next, text.length);\n\t\t\t} else if (text.startsWith(COMPOSITE_CARET_ANCHOR)) {\n\t\t\t\trange.setStart(next, COMPOSITE_CARET_ANCHOR.length);\n\t\t\t} else {\n\t\t\t\trange.setStart(next, 0);\n\t\t\t}\n\t\t} else {\n\t\t\tconst spacer = this.createCaretAnchorNode();\n\t\t\ttokenHost.after(spacer);\n\t\t\trange.setStart(spacer, spacer.textContent?.length ?? 1);\n\t\t}\n\n\t\trange.collapse(true);\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(range);\n\t\tthis.savedInsertRange = range.cloneRange();\n\t\treturn range;\n\t}\n\n\tprivate handlePointerDown(event: MouseEvent): void {\n\t\tconst input = this.component.getInputElement();\n\t\tconst tokenHost = this.findTokenHostFromTarget(event.target);\n\t\tif (!tokenHost) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tinput.focus();\n\n\t\tconst rect = tokenHost.getBoundingClientRect();\n\t\tif (event.clientX <= rect.left + rect.width / 2) {\n\t\t\tthis.placeCaretBeforeToken(tokenHost);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.placeCaretAfterToken(tokenHost);\n\t}\n\n\tprivate setCaretFromPointer(event: MouseEvent): void {\n\t\tconst input = this.component.getInputElement();\n\t\tif (document.activeElement !== input) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokenHost = this.findTokenHostFromTarget(event.target);\n\t\tif (tokenHost) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst range = this.getCaretRangeFromPoint(event.clientX, event.clientY);\n\t\tif (!range || !this.isRangeWithinInput(range, input)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst adjustedRange = this.adjustPointerRange(range);\n\t\tif (!adjustedRange) {\n\t\t\treturn;\n\t\t}\n\t\tconst selection = window.getSelection();\n\t\tif (!selection) {\n\t\t\treturn;\n\t\t}\n\n\t\tselection.removeAllRanges();\n\t\tselection.addRange(adjustedRange);\n\t\tthis.savedInsertRange = adjustedRange.cloneRange();\n\t}\n\n\tprivate getCaretRangeFromPoint(clientX: number, clientY: number): Range | null {\n\t\tconst doc = document as Document & {\n\t\t\tcaretRangeFromPoint?: (x: number, y: number) => Range | null;\n\t\t\tcaretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n\t\t};\n\n\t\tif (typeof doc.caretRangeFromPoint === \"function\") {\n\t\t\treturn doc.caretRangeFromPoint(clientX, clientY);\n\t\t}\n\n\t\tif (typeof doc.caretPositionFromPoint === \"function\") {\n\t\t\tconst position = doc.caretPositionFromPoint(clientX, clientY);\n\t\t\tif (!position) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.setStart(position.offsetNode, position.offset);\n\t\t\trange.collapse(true);\n\t\t\treturn range;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate findTokenHostFromTarget(target: EventTarget | null): HTMLElement | null {\n\t\tif (!(target instanceof Node)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.findAncestorTokenHost(target);\n\t}\n\n\tprivate adjustPointerRange(range: Range): Range {\n\t\tconst input = this.component.getInputElement();\n\t\tconst { startContainer, startOffset } = range;\n\n\t\tif (startContainer === input) {\n\t\t\treturn this.resolveInputChildRange(input, startOffset);\n\t\t}\n\n\t\tif (startContainer.nodeType === Node.ELEMENT_NODE) {\n\t\t\tconst tokenHost = this.findAncestorTokenHost(startContainer);\n\t\t\tif (tokenHost) {\n\t\t\t\treturn range;\n\t\t\t}\n\n\t\t\tconst child = startContainer.childNodes[startOffset] ?? startContainer.childNodes[startOffset - 1];\n\t\t\tif (child?.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst textNode = child as Text;\n\t\t\t\tconst adjusted = document.createRange();\n\t\t\t\tconst offset = child === startContainer.childNodes[startOffset]\n\t\t\t\t\t? 0\n\t\t\t\t\t: textNode.textContent?.length ?? 0;\n\t\t\t\tadjusted.setStart(textNode, offset);\n\t\t\t\tadjusted.collapse(true);\n\t\t\t\treturn this.adjustPointerRange(adjusted);\n\t\t\t}\n\t\t}\n\n\t\tif (startContainer.nodeType !== Node.TEXT_NODE) {\n\t\t\treturn range;\n\t\t}\n\n\t\tconst text = startContainer.textContent ?? \"\";\n\n\t\tif (text === COMPOSITE_CARET_ANCHOR) {\n\t\t\treturn this.resolveCaretAnchorRange(startContainer as Text);\n\t\t}\n\n\t\tif (text.startsWith(COMPOSITE_CARET_ANCHOR) && startOffset <= COMPOSITE_CARET_ANCHOR.length) {\n\t\t\tconst adjusted = document.createRange();\n\t\t\tconst nextOffset = text.length > COMPOSITE_CARET_ANCHOR.length\n\t\t\t\t? COMPOSITE_CARET_ANCHOR.length\n\t\t\t\t: text.length;\n\t\t\tadjusted.setStart(startContainer, nextOffset);\n\t\t\tadjusted.collapse(true);\n\t\t\treturn adjusted;\n\t\t}\n\n\t\tif (text.endsWith(COMPOSITE_CARET_ANCHOR) && startOffset >= text.length - COMPOSITE_CARET_ANCHOR.length) {\n\t\t\tconst adjusted = document.createRange();\n\t\t\tadjusted.setStart(startContainer, text.length - COMPOSITE_CARET_ANCHOR.length);\n\t\t\tadjusted.collapse(true);\n\t\t\treturn adjusted;\n\t\t}\n\n\t\treturn range;\n\t}\n\n\tprivate resolveInputChildRange(input: HTMLElement, offset: number): Range {\n\t\tconst child = input.childNodes[offset] ?? input.childNodes[offset - 1];\n\t\tconst range = document.createRange();\n\n\t\tif (!child) {\n\t\t\trange.selectNodeContents(input);\n\t\t\trange.collapse(input.childNodes.length === 0);\n\t\t\treturn range;\n\t\t}\n\n\t\tif (child.nodeType === Node.TEXT_NODE) {\n\t\t\tconst textNode = child as Text;\n\t\t\tconst textOffset = child === input.childNodes[offset] ? 0 : textNode.textContent?.length ?? 0;\n\t\t\trange.setStart(textNode, textOffset);\n\t\t\trange.collapse(true);\n\t\t\treturn this.adjustPointerRange(range);\n\t\t}\n\n\t\tif (child.nodeType === Node.ELEMENT_NODE && (child as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)) {\n\t\t\tconst caretRange = child === input.childNodes[offset]\n\t\t\t\t? this.placeCaretBeforeToken(child as HTMLElement)\n\t\t\t\t: this.placeCaretAfterToken(child as HTMLElement);\n\t\t\treturn caretRange ?? range;\n\t\t}\n\n\t\trange.setStart(input, offset);\n\t\trange.collapse(true);\n\t\treturn range;\n\t}\n\n\tprivate resolveCaretAnchorRange(anchorNode: Text): Range {\n\t\tconst previous = anchorNode.previousSibling;\n\t\tconst next = anchorNode.nextSibling;\n\t\tconst range = document.createRange();\n\n\t\tif (\n\t\t\tnext?.nodeType === Node.TEXT_NODE\n\t\t\t&& (next.textContent ?? \"\").length > COMPOSITE_CARET_ANCHOR.length\n\t\t) {\n\t\t\tconst nextText = next.textContent ?? \"\";\n\t\t\tconst offset = nextText.startsWith(COMPOSITE_CARET_ANCHOR)\n\t\t\t\t? COMPOSITE_CARET_ANCHOR.length\n\t\t\t\t: 0;\n\t\t\trange.setStart(next, offset);\n\t\t\trange.collapse(true);\n\t\t\treturn range;\n\t\t}\n\n\t\tif (previous?.nodeType === Node.TEXT_NODE) {\n\t\t\tconst previousText = previous.textContent ?? \"\";\n\t\t\trange.setStart(previous, previousText.length);\n\t\t\trange.collapse(true);\n\t\t\treturn range;\n\t\t}\n\n\t\tif (\n\t\t\tprevious?.nodeType === Node.ELEMENT_NODE\n\t\t\t&& (previous as HTMLElement).hasAttribute(COMPOSITE_TOKEN_ATTR)\n\t\t) {\n\t\t\trange.setStart(anchorNode, anchorNode.textContent?.length ?? 1);\n\t\t\trange.collapse(true);\n\t\t\treturn range;\n\t\t}\n\n\t\trange.setStart(anchorNode, 0);\n\t\trange.collapse(true);\n\t\treturn range;\n\t}\n}\n","export type NonAllowableCharactersConfig = string[] | RegExp | string;\n\nexport type NonAllowableCharacterMatcher = (char: string) => boolean;\n\nexport function createNonAllowableCharacterMatcher(\n\tconfig: NonAllowableCharactersConfig | undefined,\n): NonAllowableCharacterMatcher | null {\n\tif (config === undefined || config === null) {\n\t\treturn null;\n\t}\n\n\tif (config instanceof RegExp) {\n\t\tconst flags = config.flags.replace(/g/g, \"\");\n\t\tconst pattern = flags === config.flags ? config : new RegExp(config.source, flags);\n\t\treturn (char: string) => pattern.test(char);\n\t}\n\n\tif (Array.isArray(config)) {\n\t\tconst disallowed = new Set(config);\n\t\treturn (char: string) => disallowed.has(char);\n\t}\n\n\tif (typeof config === \"string\") {\n\t\tconst disallowed = new Set([...config]);\n\t\treturn (char: string) => disallowed.has(char);\n\t}\n\n\treturn null;\n}\n\nexport function containsNonAllowableCharacter(\n\ttext: string,\n\tmatcher: NonAllowableCharacterMatcher,\n): boolean {\n\treturn [...text].some((char) => matcher(char));\n}\n\nexport function removeNonAllowableCharacters(\n\ttext: string,\n\tmatcher: NonAllowableCharacterMatcher,\n): string {\n\treturn [...text].filter((char) => !matcher(char)).join(\"\");\n}\n","import { PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { CompositeInputController } from \"./composite-input-controller\";\n\nconst rootTemplate = (): HTMLElement => {\n\tconst root = document.createElement(\"div\");\n\troot.className = \"dg-composite-component__input-shell\";\n\n\tconst input = document.createElement(\"div\");\n\tinput.className = \"dg-composite-component__input dg-field__input\";\n\tinput.setAttribute(\"ref\", \"input\");\n\tinput.setAttribute(\"contenteditable\", \"true\");\n\tinput.setAttribute(\"role\", \"textbox\");\n\tinput.setAttribute(\"aria-multiline\", \"true\");\n\n\tconst placeholder = document.createElement(\"div\");\n\tplaceholder.className = \"dg-composite-component__placeholder\";\n\tplaceholder.setAttribute(\"ref\", \"placeholder\");\n\n\troot.appendChild(input);\n\troot.appendChild(placeholder);\n\treturn root;\n};\n\nexport interface CompositeInputComponentType {\n\tgetElement(): HTMLElement;\n\tgetInputElement(): HTMLElement;\n\tgetPlaceholderElement(): HTMLElement;\n}\n\nexport class CompositeInputComponent extends Component {\n\t@queryAssignedNodes(\"input\")\n\tprivate inputElement!: HTMLElement;\n\n\t@queryAssignedNodes(\"placeholder\")\n\tprivate placeholderElement!: HTMLElement;\n\n\tpublic controller!: CompositeInputController;\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tconst component: CompositeInputComponentType = {\n\t\t\tgetElement: () => this.getGui(),\n\t\t\tgetInputElement: () => this.inputElement,\n\t\t\tgetPlaceholderElement: () => this.placeholderElement,\n\t\t};\n\n\t\tthis.setTemplate(rootTemplate());\n\t\tthis.controller = this.createManagedBean(new CompositeInputController());\n\t\tthis.controller.setComponent(component);\n\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.controller.destroy();\n\t\t});\n\t}\n}\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { ICompositeComponentOptionHandler } from \"../model/composite-component-option-handler.types\";\nimport { CompositePickerComponentType } from \"./composite-picker-view\";\nimport { Select } from \"../../../../select/select\";\nimport { SelectOptionElementModel } from \"../../../../select/src/select-configuration-types/select_configuration\";\nimport { toCompositeSelectOption } from \"../../utils/composite-component-option-adapter\";\n\nexport class CompositePickerController extends EventEmitter {\n\tprivate anchorElement: HTMLElement | null = null;\n\tprivate selectInstance: Select | null = null;\n\tprivate isOpen = false;\n\tprivate openInitiator: \"UI\" | \"API\" = \"UI\";\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER)\n\tprivate optionHandler!: ICompositeComponentOptionHandler;\n\n\tsetComponent(_component: CompositePickerComponentType): void {\n\t\t// Select component is initialised in setAnchorElement once the anchor is known\n\t}\n\n\tdestroy(): void {\n\t\tthis.selectInstance?.api?.destroy();\n\t\tthis.selectInstance = null;\n\t}\n\n\tsetAnchorElement(element: HTMLElement): void {\n\t\tthis.anchorElement = element;\n\t\tthis.initSelect();\n\t}\n\n\topen(initiator: \"UI\" | \"API\" = \"UI\"): void {\n\t\tif (this.isOpen || !this.anchorElement) {\n\t\t\treturn;\n\t\t}\n\t\tthis.openInitiator = initiator;\n\t\tthis.selectInstance?.api?.openDropdown();\n\t}\n\n\tclose(initiator: \"UI\" | \"API\" = \"UI\"): void {\n\t\tif (!this.isOpen) {\n\t\t\treturn;\n\t\t}\n        this.openInitiator = initiator;\n\t\t// Pass false so Select does not try to move focus back to its own wrapper\n\t\tthis.selectInstance?.api?.closeDropdown(false);\n\t}\n\n\tisOpened(): boolean {\n\t\treturn this.isOpen;\n\t}\n\n\ttoggle(initiator: \"UI\" | \"API\" = \"UI\"): void {\n\t\tthis.isOpen ? this.close(initiator) : this.open(initiator);\n\t}\n\n\tprivate initSelect(): void {\n\t\tif (!this.anchorElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dropdownClassName = this.optionHandler.getDropdownClassName();\n\t\tconst classNameStr = Array.isArray(dropdownClassName)\n\t\t\t? dropdownClassName.join(\" \")\n\t\t\t: dropdownClassName || \"dg-composite-component__picker-popup\";\n\n\t\tthis.selectInstance = new Select({\n\t\t\tappendTo: this.anchorElement,\n\t\t\tdropdownAppendTo: this.optionHandler.getDropdownAppendTo(),\n\t\t\toptions: this.buildSelectOptions(),\n\t\t\tmultiple: false,\n\t\t\tsearchable: this.optionHandler.isSearchable(),\n\t\t\tsearchBoxPlaceholder: this.optionHandler.getSearchBoxPlaceholder(),\n\t\t\tdropdownPosition: this.optionHandler.getDropdownPosition() ?? Position.bottomRight,\n\t\t\thorizontalSpacing: this.optionHandler.getHorizontalSpacing(),\n\t\t\tverticalSpacing: this.optionHandler.getVerticalSpacing(),\n\t\t\tdropdownClassName: classNameStr,\n\t\t\tplaceholder: this.optionHandler.getPlaceholder(),\n\t\t\tenablePlusIcon: true,\n\t\t\tonBeforeDropdownOpen: () => {\n\t\t\t\tthis.optionHandler.onBeforeOpen();\n\t\t\t},\n\t\t\tonAfterDropdownOpen: () => {\n\t\t\t\tthis.isOpen = true;\n\t\t\t\tthis.optionHandler.onAfterOpen();\n\t\t\t\tthis.dispatchEvent({ type: \"pickerOpened\", initiator: this.openInitiator });\n\t\t\t},\n\t\t\tonBeforeDropdownClose: () => {\n\t\t\t\tthis.optionHandler.onBeforeClose();\n\t\t\t},\n\t\t\tonAfterDropdownClose: () => {\n\t\t\t\tthis.isOpen = false;\n\t\t\t\tthis.optionHandler.onAfterClose();\n\t\t\t\tthis.dispatchEvent({ type: \"pickerClosed\", initiator: this.openInitiator });\n\t\t\t},\n\t\t\tonAfterSelect: (params: any) => {\n\t\t\t\tconst option = params?.value as SelectOptionElementModel;\n\t\t\t\tconst compositeItem = this.optionHandler\n\t\t\t\t\t.getItems()\n\t\t\t\t\t.find((item) => item.id === option?.id);\n\t\t\t\tif (compositeItem) {\n\t\t\t\t\tthis.dispatchEvent({ type: \"optionSelected\", item: compositeItem, initiator: this.openInitiator });\n\t\t\t\t\t// Defer deselect so the same item can be picked again on the next open\n\t\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\t\tthis.selectInstance?.api?.deselect(option.id, \"API\");\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\t// Hide the Select selectbox UI so only the dropdown is functional;\n\t\t// the element stays in the DOM so popup positioning remains accurate.\n\t\tconst selectEl = this.selectInstance.api?.getElement();\n\t\tif (selectEl) {\n\t\t\tObject.assign(selectEl.style, {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\ttop: \"0\",\n\t\t\t\tleft: \"0\",\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: \"100%\",\n\t\t\t\topacity: \"0\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\toverflow: \"visible\",\n\t\t\t\tzIndex: \"-1\",\n\t\t\t});\n\t\t\tconst currentPosition = window.getComputedStyle(this.anchorElement).position;\n\t\t\tif (currentPosition === \"static\") {\n\t\t\t\tthis.anchorElement.style.position = \"relative\";\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildSelectOptions(): SelectOptionElementModel[] {\n\t\tconst configuration = this.optionHandler.getConfiguration();\n\t\tconst renderers = {\n\t\t\ticonRenderer: configuration.iconRenderer,\n\t\t\ticonRendererParams: configuration.iconRendererParams,\n\t\t\tdropdownOptionRenderer: configuration.dropdownOptionRenderer,\n\t\t\tdropdownOptionRendererParams: configuration.dropdownOptionRendererParams,\n\t\t};\n\n\t\treturn this.optionHandler\n\t\t\t.getItems()\n\t\t\t.filter((item) => !item.hidden)\n\t\t\t.map((item) => toCompositeSelectOption(item, renderers));\n\t}\n}\n","import { PostConstruct } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { CompositePickerController } from \"./composite-picker-controller\";\n\nexport interface CompositePickerComponentType {\n\tgetElement(): HTMLElement;\n}\n\nexport class CompositePickerComponent extends Component {\n\tpublic controller!: CompositePickerController;\n\n\t@PostConstruct()\n\tinit(): void {\n\t\tconst placeholder = document.createElement(\"div\");\n\t\tplaceholder.className = \"dg-composite-component__picker-host\";\n\n\t\tconst component: CompositePickerComponentType = {\n\t\t\tgetElement: () => placeholder,\n\t\t};\n\n\t\tthis.setTemplate(placeholder);\n\t\tthis.controller = this.createManagedBean(new CompositePickerController());\n\t\tthis.controller.setComponent(component);\n\n\t\tthis.addDestroyFunc(() => {\n\t\t\tthis.controller.destroy();\n\t\t});\n\t}\n}\n","import { Bean } from \"@dg/corecomponent\";\nimport { CompositeInputController } from \"../composite-input/composite-input-controller\";\nimport { CompositePickerController } from \"../composite-picker/composite-picker-controller\";\nimport { COMPOSITE_COMPONENT_BEAN_NAME } from \"../../constants/composite-component-bean-constants\";\n\ninterface ICompositeRootController {\n\trefresh(): void;\n\tdestroy(): void;\n\tgetElement(): HTMLElement;\n\tgetInputController(): CompositeInputController | null;\n\tgetPickerController(): CompositePickerController | null;\n}\n\n@Bean(COMPOSITE_COMPONENT_BEAN_NAME.CONTROLLER_HANDLER)\nexport class CompositeComponentControllerHandler {\n\tprivate rootController: ICompositeRootController | null = null;\n\tprivate inputController: CompositeInputController | null = null;\n\tprivate pickerController: CompositePickerController | null = null;\n\n\tregisterRootController(controller: ICompositeRootController): void {\n\t\tthis.rootController = controller;\n\t}\n\n\tgetRootController(): ICompositeRootController | null {\n\t\treturn this.rootController;\n\t}\n\n\tregisterInputController(controller: CompositeInputController | null): void {\n\t\tthis.inputController = controller;\n\t}\n\n\tgetInputController(): CompositeInputController | null {\n\t\treturn this.inputController ?? this.rootController?.getInputController() ?? null;\n\t}\n\n\tregisterPickerController(controller: CompositePickerController | null): void {\n\t\tthis.pickerController = controller;\n\t}\n\n\tgetPickerController(): CompositePickerController | null {\n\t\treturn this.pickerController ?? this.rootController?.getPickerController() ?? null;\n\t}\n}\n","import { AutoWired, Bean } from \"@dg/corecomponent\";\nimport { COMPOSITE_COMPONENT_BEAN_NAME } from \"../../constants/composite-component-bean-constants\";\nimport { CompositeComponentControllerHandler } from \"./composite-component-controller-handler\";\n\n@Bean(COMPOSITE_COMPONENT_BEAN_NAME.TOOLTIP_HANDLER)\nexport class CompositeComponentTooltipHandler {\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.CONTROLLER_HANDLER)\n\tprivate controllerHandler!: CompositeComponentControllerHandler;\n\n\tshowErrorMessage(message?: string): void {\n\t\tconst fieldWrapper = this.controllerHandler.getRootController()?.getElement().querySelector(\n\t\t\t\".dg-composite-component__field\",\n\t\t) as HTMLElement | null;\n\t\tif (!fieldWrapper || !message) {\n\t\t\treturn;\n\t\t}\n\n\t\tfieldWrapper.classList.add(\"dg-composite-component__field--error\");\n\t\tfieldWrapper.setAttribute(\"title\", message);\n\t}\n\n\thideErrorMessage(): void {\n\t\tconst fieldWrapper = this.controllerHandler.getRootController()?.getElement().querySelector(\n\t\t\t\".dg-composite-component__field\",\n\t\t) as HTMLElement | null;\n\t\tif (!fieldWrapper) {\n\t\t\treturn;\n\t\t}\n\n\t\tfieldWrapper.classList.remove(\"dg-composite-component__field--error\");\n\t\tfieldWrapper.removeAttribute(\"title\");\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport {ICompositeComponentResolvedItem,ICompositeComponentSegment,ICompositeComponentSelectionLimitParams,} from \"../../composite-component-configuration.types\";\nimport { COMPOSITE_COMPONENT_BEAN_NAME } from \"../../constants/composite-component-bean-constants\";\nimport { getTokenIdsFromSegments } from \"../../utils/composite-component-segment-utils\";\nimport { CompositeComponentControllerHandler } from \"./composite-component-controller-handler\";\nimport { ICompositeComponentOptionHandler } from \"./composite-component-option-handler.types\";\nimport { CompositeComponentTooltipHandler } from \"./composite-component-tooltip-handler\";\n\n@Bean(COMPOSITE_COMPONENT_BEAN_NAME.STATE_MANAGER)\nexport class CompositeComponentStateManager {\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER)\n\tprivate optionHandler!: ICompositeComponentOptionHandler;\n\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.TOOLTIP_HANDLER)\n\tprivate tooltipHandler!: CompositeComponentTooltipHandler;\n\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.CONTROLLER_HANDLER)\n\tprivate controllerHandler!: CompositeComponentControllerHandler;\n\n\tprivate internalErrorMessage: string | null = null;\n\n\tgetSegments(): ICompositeComponentSegment[] {\n\t\treturn this.controllerHandler.getInputController()?.getSegments() ?? [];\n\t}\n\n\tgetSelectedItems(): ICompositeComponentResolvedItem[] {\n\t\tconst tokenIds = new Set(getTokenIdsFromSegments(this.getSegments()));\n\t\treturn this.optionHandler.getItems().filter((item) => tokenIds.has(item.id));\n\t}\n\n\tgetSelectedIds(): string[] {\n\t\treturn getTokenIdsFromSegments(this.getSegments());\n\t}\n\n\tsyncSegmentsToConfiguration(segments: ICompositeComponentSegment[]): void {\n\t\tthis.optionHandler.updateConfiguration({\n\t\t\tsegments,\n\t\t\tselectedItems: getTokenIdsFromSegments(segments),\n\t\t});\n\t}\n\n\tisSelectionLimitReached(nextCount: number = this.getSelectedIds().length): boolean {\n\t\tconst limit = this.optionHandler.getSelectionLimit();\n\t\treturn typeof limit === \"number\" && limit > 0 ? nextCount > limit : false;\n\t}\n\n\tcanSelectItem(item: ICompositeComponentResolvedItem): boolean {\n\t\tconst currentIds = this.getSelectedIds();\n\t\tif (currentIds.includes(item.id)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn !this.isSelectionLimitReached(currentIds.length + 1);\n\t}\n\n\thandleSelectionLimitReached(item: ICompositeComponentResolvedItem): boolean {\n\t\tconst items = this.getSelectedItems();\n\t\tconst selectionLimit = this.optionHandler.getSelectionLimit();\n\t\tif (!selectionLimit) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst params: ICompositeComponentSelectionLimitParams = {\n\t\t\titem,\n\t\t\titems,\n\t\t\tselectionLimit,\n\t\t};\n\t\tconst message = this.optionHandler.getSelectionLimitMessage(params);\n\t\tthis.showInternalValidationError(message);\n\t\tthis.optionHandler.onSelectionLimitReached(params);\n\t\tthis.controllerHandler.getPickerController()?.close(\"UI\");\n\t\treturn false;\n\t}\n\n\tshowInternalValidationError(message: string): void {\n\t\tthis.internalErrorMessage = message;\n\t\tthis.optionHandler.updateValidationMessage(message);\n\t\tthis.optionHandler.updateStatus(\"error\");\n\t\tthis.tooltipHandler.showErrorMessage(message);\n\t}\n\n\tclearInternalValidationError(): void {\n\t\tif (!this.internalErrorMessage) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentMessage = this.optionHandler.getValidationMessage();\n\t\tif (currentMessage === this.internalErrorMessage) {\n\t\t\tthis.optionHandler.updateValidationMessage(\"\");\n\t\t\tthis.optionHandler.updateStatus(\"none\");\n\t\t\tthis.tooltipHandler.hideErrorMessage();\n\t\t}\n\n\t\tthis.internalErrorMessage = null;\n\t}\n\n\tshowExternalValidationError(message: string): void {\n\t\tthis.internalErrorMessage = null;\n\t\tthis.optionHandler.updateValidationMessage(message);\n\t\tthis.optionHandler.updateStatus(\"error\");\n\t\tthis.tooltipHandler.showErrorMessage(message);\n\t}\n\n\thideValidationError(): void {\n\t\tthis.internalErrorMessage = null;\n\t\tthis.optionHandler.updateValidationMessage(\"\");\n\t\tthis.optionHandler.updateStatus(\"none\");\n\t\tthis.tooltipHandler.hideErrorMessage();\n\t}\n\n\trestoreValidationState(): void {\n\t\tconst message = this.optionHandler.getValidationMessage();\n\t\tif (this.optionHandler.getStatus() === \"error\" && message.length > 0) {\n\t\t\tthis.tooltipHandler.showErrorMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.tooltipHandler.hideErrorMessage();\n\t}\n}\n","import { AutoWired, BEAN_NAME } from \"@dg/corecomponent\";\nimport { EventEmitter } from \"@dg/corecomponent/EventEmitter.js\";\nimport {ICompositeComponentChangeParams,ICompositeComponentResolvedItem,ICompositeComponentSegment,ICompositeComponentSelectionParams,} from \"../../composite-component-configuration.types\";\nimport { COMPOSITE_COMPONENT_BEAN_NAME } from \"../../constants/composite-component-bean-constants\";\nimport {getTokenIdsFromSegments,resolveInitialSegments,segmentsToPlainText} from \"../../utils/composite-component-segment-utils\";\nimport { CompositeInputComponent } from \"../composite-input/composite-input-view\";\nimport { CompositeInputController } from \"../composite-input/composite-input-controller\";\nimport { CompositePickerComponent } from \"../composite-picker/composite-picker-view\";\nimport { CompositePickerController } from \"../composite-picker/composite-picker-controller\";\nimport { CompositeComponentControllerHandler } from \"../model/composite-component-controller-handler\";\nimport { ICompositeComponentOptionHandler } from \"../model/composite-component-option-handler.types\";\nimport { CompositeComponentStateManager } from \"../model/composite-component-state-manager\";\n\nexport interface CompositeRootComponentType {\n\tgetElement(): HTMLElement;\n\tgetLabelElement(): HTMLElement;\n\tgetDescriptionElement(): HTMLElement;\n\tgetFieldWrapperElement(): HTMLElement;\n\tgetInputHostElement(): HTMLElement;\n\tgetPickerTriggerElement(): HTMLButtonElement;\n}\n\nexport class CompositeRootController extends EventEmitter {\n\tprivate component!: CompositeRootComponentType;\n\tprivate inputController: CompositeInputController | null = null;\n\tprivate pickerController: CompositePickerController | null = null;\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER)\n\tprivate optionHandler!: ICompositeComponentOptionHandler;\n\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.STATE_MANAGER)\n\tprivate stateManager!: CompositeComponentStateManager;\n\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.CONTROLLER_HANDLER)\n\tprivate controllerHandler!: CompositeComponentControllerHandler;\n\n\tsetComponent(component: CompositeRootComponentType): void {\n\t\tthis.component = component;\n\t\tthis.controllerHandler.registerRootController(this);\n\t\tthis.renderChrome();\n\t\tthis.renderInput();\n\t\tthis.renderPicker();\n\t\tthis.renderInitialValue();\n\t}\n\n\trefresh(): void {\n\t\tconst inputElement = this.inputController?.getInputElement();\n\t\tconst shouldRestoreFocus = !!inputElement && document.activeElement === inputElement;\n\n\t\tthis.inputController?.destroy();\n\t\tthis.pickerController?.destroy();\n\t\tthis.renderChrome();\n\t\tthis.renderInput();\n\t\tthis.renderPicker();\n\t\tthis.renderInitialValue();\n\n\t\tif (shouldRestoreFocus) {\n\t\t\tthis.inputController?.focus();\n\t\t}\n\t}\n\n\tgetElement(): HTMLElement {\n\t\treturn this.component.getElement();\n\t}\n\n\tgetInputController(): CompositeInputController | null {\n\t\treturn this.inputController;\n\t}\n\n\tgetPickerController(): CompositePickerController | null {\n\t\treturn this.pickerController;\n\t}\n\n\tdestroy(): void {\n\t\tthis.inputController?.destroy();\n\t\tthis.pickerController?.destroy();\n\t\tthis.component.getInputHostElement().replaceChildren();\n\t\tthis.component.getElement().remove();\n\t}\n\n\tgetParamsProperty() {\n\t\treturn {\n\t\t\tlabel: {\n\t\t\t\tgetLabelClasses: () => \"dg-composite-component__label\",\n\t\t\t\tgetLabelTitleClasses: () => \"dg-composite-component__label-title\",\n\t\t\t},\n\t\t\tdescription: {\n\t\t\t\tgetValidationMessageClasses: () => \"dg-composite-component__validation-message\",\n\t\t\t\tgetDescriptionClasses: () => \"dg-composite-component__description\",\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate renderChrome(): void {\n\t\tconst configuration = this.optionHandler.getConfiguration();\n\t\tconst root = this.component.getElement();\n\t\troot.classList.toggle(\"dg-composite-component--disabled\", this.optionHandler.isDisabled());\n\t\troot.classList.toggle(\"dg-composite-component--readonly\", this.optionHandler.isReadOnly());\n\t\tconfiguration.className && root.classList.add(configuration.className);\n\n\t\tthis.renderPickerTrigger();\n\t}\n\n\tprivate renderPickerTrigger(): void {\n\t\tconst trigger = this.component.getPickerTriggerElement();\n\t\ttrigger.replaceChildren();\n\t\ttrigger.disabled = this.optionHandler.isDisabled() || this.optionHandler.isReadOnly();\n\n\t\tconst RendererClass = this.optionHandler.getPlusIconRenderer();\n\t\tif (RendererClass) {\n\t\t\tconst renderer = new RendererClass();\n\t\t\trenderer.init(this.optionHandler.getPlusIconRendererParams() ?? {});\n\t\t\tconst iconElement = renderer.getElement?.() ?? (renderer as any).createElement?.();\n\t\t\ticonElement && trigger.appendChild(iconElement);\n\t\t\treturn;\n\t\t}\n\n\t\ttrigger.textContent = \"+\";\n\t}\n\n\tprivate renderInput(): void {\n\t\tconst inputHost = this.component.getInputHostElement();\n\t\tinputHost.replaceChildren();\n\n\t\tconst inputComponent = this.createManagedBean(new CompositeInputComponent());\n\t\tinputHost.appendChild(inputComponent.getGui());\n\t\tthis.inputController = inputComponent.controller;\n\t\tthis.controllerHandler.registerInputController(this.inputController);\n\n\t\tthis.addListener(this.inputController, \"segmentsChanged\", (event: any) => {\n\t\t\tthis.handleSegmentsChanged(event.segments, event.initiator);\n\t\t});\n\t}\n\n\tprivate renderPicker(): void {\n\t\tconst pickerComponent = this.createManagedBean(new CompositePickerComponent());\n\t\tthis.pickerController = pickerComponent.controller;\n\t\tthis.pickerController.setAnchorElement(this.component.getFieldWrapperElement());\n\t\tthis.controllerHandler.registerPickerController(this.pickerController);\n\n\t\tthis.addListener(this.component.getPickerTriggerElement(), \"mousedown\", () => {\n\t\t\tthis.inputController?.saveInsertPosition();\n\t\t});\n\t\tthis.addListener(this.component.getPickerTriggerElement(), \"click\", (event: MouseEvent) => {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tthis.inputController?.saveInsertPosition();\n\t\t\tthis.pickerController?.toggle();\n\t\t});\n\n\t\tthis.addListener(this.pickerController, \"optionSelected\", (event: any) => {\n\t\t\tthis.handlePickerSelection(event.item, event.initiator);\n\t\t});\n\t}\n\n\tprivate renderInitialValue(): void {\n\t\tconst items = this.optionHandler.getItems();\n\t\tconst configuration = this.optionHandler.getConfiguration();\n\t\tconst segments = resolveInitialSegments(items, configuration.segments, configuration.selectedItems);\n\t\tthis.inputController?.renderSegments(segments);\n\t\tthis.stateManager.syncSegmentsToConfiguration(segments);\n\t\tthis.stateManager.restoreValidationState();\n\t}\n\n\tprivate handlePickerSelection(item: ICompositeComponentResolvedItem, initiator: string): void {\n\t\tif (!this.stateManager.canSelectItem(item)) {\n\t\t\tthis.stateManager.handleSelectionLimitReached(item);\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectionParams = this.createSelectionParams(item, initiator);\n\t\tif (!this.optionHandler.onBeforeSelect(selectionParams)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.inputController?.insertToken(item);\n\t\tthis.pickerController?.close(\"UI\");\n\t\tthis.optionHandler.onAfterSelect(selectionParams);\n\t}\n\n\tprivate handleSegmentsChanged(segments: ICompositeComponentSegment[], initiator: string): void {\n\t\tthis.stateManager.syncSegmentsToConfiguration(segments);\n\t\tthis.stateManager.clearInternalValidationError();\n\n\t\tconst items = this.stateManager.getSelectedItems();\n\t\tconst changeParams: ICompositeComponentChangeParams = {\n\t\t\tsegments,\n\t\t\ttext: segmentsToPlainText(segments),\n\t\t\titems,\n\t\t\tids: getTokenIdsFromSegments(segments),\n\t\t\tinitiator: this.optionHandler.normalizeInitiator(initiator),\n\t\t};\n\t\tthis.optionHandler.onChange(changeParams);\n\t}\n\n\tprivate createSelectionParams(\n\t\titem: ICompositeComponentResolvedItem,\n\t\tinitiator?: string,\n\t): ICompositeComponentSelectionParams {\n\t\treturn {\n\t\t\titem,\n\t\t\titems: this.stateManager.getSelectedItems(),\n\t\t\tinitiator: this.optionHandler.normalizeInitiator(initiator),\n\t\t};\n\t}\n}\n","import { AutoWired, BEAN_NAME, PostConstruct, queryAssignedNodes } from \"@dg/corecomponent\";\nimport { Component } from \"@dg/corecomponent/Component.js\";\nimport { ICompositeComponentOptionHandler } from \"../model/composite-component-option-handler.types\";\nimport { CompositeRootComponentType, CompositeRootController } from \"./composite-root-controller\";\n\nconst rootTemplate = (props: { label: boolean; helper: boolean }, emptyDom: boolean): HTMLElement => {\n\tconst root = document.createElement(\"div\");\n\troot.className = \"dg-composite-component dg-field__root\";\n\n\tif (emptyDom || props.label) {\n\t\tconst label = document.createElement(\"composite-label\");\n\t\tlabel.setAttribute(\"ref\", \"label\");\n\t\troot.appendChild(label);\n\t}\n\n\tconst fieldWrapper = document.createElement(\"div\");\n\tfieldWrapper.className = \"dg-composite-component__field dg-field__container dg-field__input-wrapper\";\n\tfieldWrapper.setAttribute(\"ref\", \"field-wrapper\");\n\n\tconst inputHost = document.createElement(\"div\");\n\tinputHost.className = \"dg-composite-component__input-host\";\n\tinputHost.setAttribute(\"ref\", \"input-host\");\n\n\tconst pickerTrigger = document.createElement(\"button\");\n\tpickerTrigger.type = \"button\";\n\tpickerTrigger.className = \"dg-composite-component__picker-trigger\";\n\tpickerTrigger.setAttribute(\"ref\", \"picker-trigger\");\n\tpickerTrigger.setAttribute(\"aria-label\", \"Open field picker\");\n\n\tfieldWrapper.appendChild(inputHost);\n\tfieldWrapper.appendChild(pickerTrigger);\n\troot.appendChild(fieldWrapper);\n\n\tif (emptyDom || props.helper) {\n\t\tconst description = document.createElement(\"composite-description\");\n\t\tdescription.setAttribute(\"ref\", \"description\");\n\t\troot.appendChild(description);\n\t}\n\n\treturn root;\n};\n\nexport class CompositeRootComponent extends Component {\n\tprivate componentHolder: HTMLElement | null;\n\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER)\n\tprivate optionHandler!: ICompositeComponentOptionHandler;\n\n\t@queryAssignedNodes(\"label\")\n\tprivate labelElement!: HTMLElement;\n\n\t@queryAssignedNodes(\"description\")\n\tprivate descriptionElement!: HTMLElement;\n\n\t@queryAssignedNodes(\"field-wrapper\")\n\tprivate fieldWrapperElement!: HTMLElement;\n\n\t@queryAssignedNodes(\"input-host\")\n\tprivate inputHostElement!: HTMLElement;\n\n\t@queryAssignedNodes(\"picker-trigger\")\n\tprivate pickerTriggerElement!: HTMLButtonElement;\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: CompositeRootComponentType = {\n\t\t\tgetElement: () => this.getGui(),\n\t\t\tgetLabelElement: () => this.labelElement,\n\t\t\tgetDescriptionElement: () => this.descriptionElement,\n\t\t\tgetFieldWrapperElement: () => this.fieldWrapperElement,\n\t\t\tgetInputHostElement: () => this.inputHostElement,\n\t\t\tgetPickerTriggerElement: () => this.pickerTriggerElement,\n\t\t};\n\n\t\tconst rootController = new CompositeRootController();\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 = rootController.getParamsProperty();\n\t\tconst emptyDom = this.optionHandler.shouldGenerateEmptyDom();\n\t\tconst template = rootTemplate(props, emptyDom);\n\n\t\tthis.setTemplate(template, {\n\t\t\tlabel: properties.label,\n\t\t\tdescription: properties.description,\n\t\t});\n\t\tconst controller = this.createManagedBean(rootController);\n\t\tcontroller.setComponent(component);\n\t\tthis.appendElementIntoUserDom();\n\n\t\tthis.addDestroyFunc(() => {\n\t\t\tcontroller.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","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport {CompositeComponentItemReference,ICompositeComponentConfiguration,ICompositeComponentItem,ICompositeComponentResolvedItem,ICompositeComponentSegment,} from \"../../composite-component-configuration.types\";\nimport { COMPOSITE_COMPONENT_BEAN_NAME } from \"../../constants/composite-component-bean-constants\";\nimport {\n\tresolveInitialSegments,\n\tsegmentsToPlainText,\n} from \"../../utils/composite-component-segment-utils\";\nimport { ICompositeComponentAPI } from \"./composite-component-api.types\";\nimport { CompositeComponentControllerHandler } from \"./composite-component-controller-handler\";\nimport { ICompositeComponentOptionHandler } from \"./composite-component-option-handler.types\";\nimport { CompositeComponentStateManager } from \"./composite-component-state-manager\";\n\n@Bean(COMPOSITE_COMPONENT_BEAN_NAME.COMPOSITE_API)\nexport class CompositeComponentAPI implements ICompositeComponentAPI {\n\t@AutoWired(BEAN_NAME.OPTION_HANDLER)\n\tprivate optionHandler!: ICompositeComponentOptionHandler;\n\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.CONTROLLER_HANDLER)\n\tprivate controllerHandler!: CompositeComponentControllerHandler;\n\n\t@AutoWired(COMPOSITE_COMPONENT_BEAN_NAME.STATE_MANAGER)\n\tprivate stateManager!: CompositeComponentStateManager;\n\n\tgetItems(): ICompositeComponentResolvedItem[] {\n\t\treturn this.optionHandler.getItems();\n\t}\n\n\tgetSelectedItems(): ICompositeComponentResolvedItem[] {\n\t\treturn this.stateManager.getSelectedItems();\n\t}\n\n\tgetSelectedIds(): string[] {\n\t\treturn this.stateManager.getSelectedIds();\n\t}\n\n\tgetSelectedComponentDefinitions(): ICompositeComponentResolvedItem[] {\n\t\treturn this.getSelectedItems();\n\t}\n\n\tgetSegments(): ICompositeComponentSegment[] {\n\t\treturn this.stateManager.getSegments();\n\t}\n\n\tgetTextValue(): string {\n\t\treturn segmentsToPlainText(this.getSegments());\n\t}\n\n\tsetItems(items: ICompositeComponentItem[]): void {\n\t\tthis.optionHandler.updateConfiguration({ items });\n\t\tthis.controllerHandler.getRootController()?.refresh();\n\t}\n\n\taddItem(item: ICompositeComponentItem, selected: boolean = false): void {\n\t\tconst configuration = this.optionHandler.getConfiguration();\n\t\tconst nextItems = [...(configuration.items ?? []), item];\n\t\tconst nextSelectedItems = selected\n\t\t\t? [...(configuration.selectedItems ?? []), item.id]\n\t\t\t: configuration.selectedItems;\n\n\t\tthis.optionHandler.updateConfiguration({\n\t\t\titems: nextItems,\n\t\t\tselectedItems: nextSelectedItems,\n\t\t});\n\t\tthis.controllerHandler.getRootController()?.refresh();\n\t}\n\n\tremoveItem(id: string): void {\n\t\tconst configuration = this.optionHandler.getConfiguration();\n\t\tconst nextItems = (configuration.items ?? []).filter((item) => item.id !== id);\n\t\tconst nextSelectedItems = (configuration.selectedItems ?? []).filter((item) => {\n\t\t\tif (typeof item === \"string\") {\n\t\t\t\treturn item !== id;\n\t\t\t}\n\n\t\t\treturn item.id !== id;\n\t\t});\n\t\tconst nextSegments = (configuration.segments ?? []).filter(\n\t\t\t(segment) => segment.type !== \"token\" || segment.itemId !== id,\n\t\t);\n\n\t\tthis.optionHandler.updateConfiguration({\n\t\t\titems: nextItems,\n\t\t\tselectedItems: nextSelectedItems,\n\t\t\tsegments: nextSegments,\n\t\t});\n\t\tthis.controllerHandler.getRootController()?.refresh();\n\t}\n\n\tsetSelectedItems(items: CompositeComponentItemReference[]): void {\n\t\tconst resolvedSegments = resolveInitialSegments(this.optionHandler.getItems(), undefined, items);\n\t\tthis.setSegments(resolvedSegments);\n\t}\n\n\tsetSegments(segments: ICompositeComponentSegment[]): void {\n\t\tconst sanitized = this.optionHandler.sanitizeSegments(segments);\n\t\tthis.optionHandler.updateSegments(sanitized);\n\t\tthis.controllerHandler.getInputController()?.renderSegments(sanitized);\n\t\tthis.stateManager.syncSegmentsToConfiguration(sanitized);\n\t}\n\n\topenPicker(): void {\n\t\tthis.controllerHandler.getInputController()?.saveInsertPosition();\n\t\tthis.controllerHandler.getPickerController()?.open(\"API\");\n\t}\n\n\tclosePicker(): void {\n\t\tthis.controllerHandler.getPickerController()?.close(\"API\");\n\t}\n\n\tisPickerOpened(): boolean {\n\t\treturn this.controllerHandler.getPickerController()?.isOpened() ?? false;\n\t}\n\n\tclear(): void {\n\t\tthis.controllerHandler.getInputController()?.clear();\n\t\tthis.stateManager.syncSegmentsToConfiguration([]);\n\t\tthis.stateManager.clearInternalValidationError();\n\t}\n\n\tfocus(): void {\n\t\tthis.controllerHandler.getInputController()?.focus();\n\t}\n\n\tdestroy(): void {\n\t\tthis.controllerHandler.getRootController()?.destroy();\n\t}\n\n\tgetElement(): HTMLElement | undefined {\n\t\treturn this.controllerHandler.getRootController()?.getElement();\n\t}\n\n\tupdateProperties(options: Partial<ICompositeComponentConfiguration>): void {\n\t\tconst optionKeys = Object.keys(options);\n\t\tconst isSegmentValueUpdate =\n\t\t\toptionKeys.length > 0 &&\n\t\t\toptionKeys.every((key) => key === \"segments\" || key === \"selectedItems\") &&\n\t\t\t(optionKeys.includes(\"segments\") || optionKeys.includes(\"selectedItems\"));\n\t\tconst shouldResanitizeExisting =\n\t\t\toptions.nonAllowableCharacters !== undefined && !isSegmentValueUpdate;\n\t\tconst inputController = this.controllerHandler.getInputController();\n\t\tconst inputHadFocus = inputController?.getInputElement() === document.activeElement;\n\n\t\tthis.optionHandler.updateConfiguration(options);\n\n\t\tif (isSegmentValueUpdate) {\n\t\t\tconst configuration = this.optionHandler.getConfiguration();\n\t\t\tconst segments = resolveInitialSegments(\n\t\t\t\tthis.optionHandler.getItems(),\n\t\t\t\tconfiguration.segments,\n\t\t\t\tconfiguration.selectedItems,\n\t\t\t);\n\t\t\tthis.setSegments(segments);\n\t\t\treturn;\n\t\t}\n\n\t\tif (shouldResanitizeExisting) {\n\t\t\tthis.setSegments(this.getSegments());\n\t\t\treturn;\n\t\t}\n\n\t\tthis.controllerHandler.getRootController()?.refresh();\n\n\t\tif (inputHadFocus) {\n\t\t\tthis.controllerHandler.getInputController()?.focus();\n\t\t}\n\t}\n\n\tshowErrorMessage(message?: string): void {\n\t\tconst resolvedMessage = message ?? this.optionHandler.getValidationMessage();\n\t\tif (resolvedMessage.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stateManager.showExternalValidationError(resolvedMessage);\n\t}\n\n\thideErrorMessage(): void {\n\t\tthis.stateManager.hideValidationError();\n\t}\n}\n","import { AutoWired, Bean, BEAN_NAME } from \"@dg/corecomponent\";\nimport {CompositeComponentInitiator,CompositeComponentStatus,ICompositeComponentChangeParams,ICompositeComponentConfiguration,ICompositeComponentResolvedItem,ICompositeComponentSegment,ICompositeComponentSelectionLimitParams,ICompositeComponentSelectionParams,} from \"../../composite-component-configuration.types\";\nimport {\n\tcreateNonAllowableCharacterMatcher,\n\tNonAllowableCharacterMatcher,\n\tremoveNonAllowableCharacters,\n} from \"../../utils/composite-component-character-filter-utils\";\nimport {\n\tnormalizeCompositeItems,\n\tresolveCompositeSelectedIds,\n} from \"../../utils/composite-component-option-adapter\";\nimport { sanitizeTextSegments } from \"../../utils/composite-component-segment-utils\";\nimport { ICompositeComponentOptionHandler } from \"./composite-component-option-handler.types\";\nimport { Position } from \"../../../../utility/PopupHandler/CorePopupHandler\";\nimport { ICustomRenderer } from \"../../../../select/src/select-configuration-types/select_configuration\";\n\n@Bean(BEAN_NAME.OPTION_HANDLER)\nexport class CompositeComponentOptionHandler implements ICompositeComponentOptionHandler {\n\t@AutoWired(\"configuration\")\n\tprivate configuration!: ICompositeComponentConfiguration;\n\n\tgetConfiguration(): ICompositeComponentConfiguration {\n\t\treturn this.configuration;\n\t}\n\n\tgetAppendTo(): HTMLElement | undefined {\n\t\treturn this.configuration.appendTo;\n\t}\n\n\tgetDropdownAppendTo(): HTMLElement {\n\t\treturn this.configuration.dropdownAppendTo ?? document.body;\n\t}\n\n\tgetItems(): ICompositeComponentResolvedItem[] {\n\t\treturn normalizeCompositeItems(this.configuration.items ?? []);\n\t}\n\n\tgetSelectedIds(): string[] {\n\t\tconst selectedIds = resolveCompositeSelectedIds(this.getItems(), this.configuration.selectedItems ?? []);\n\t\tconst selectionLimit = this.getSelectionLimit();\n\t\treturn typeof selectionLimit === \"number\" && selectionLimit > 0\n\t\t\t? selectedIds.slice(0, selectionLimit)\n\t\t\t: selectedIds;\n\t}\n\n\tgetSelectedItems(): ICompositeComponentResolvedItem[] {\n\t\tconst selectedIds = new Set(this.getSelectedIds());\n\t\treturn this.getItems().filter((item) => selectedIds.has(item.id));\n\t}\n\n\tgetSelectionLimit(): number | undefined {\n\t\treturn this.configuration.selectionLimit;\n\t}\n\n\tgetSelectionLimitMessage(params: ICompositeComponentSelectionLimitParams): string {\n\t\tconst message = this.configuration.selectionLimitMessage;\n\t\tif (typeof message === \"function\") {\n\t\t\treturn message(params);\n\t\t}\n\n\t\tif (typeof message === \"string\" && message.length > 0) {\n\t\t\treturn message;\n\t\t}\n\n\t\treturn `You can add only up to ${params.selectionLimit} fields.`;\n\t}\n\n\tgetSearchBoxPlaceholder(): string {\n\t\treturn this.configuration.searchBoxPlaceholder ?? \"Search fields\";\n\t}\n\n\tisSearchable(): boolean {\n\t\treturn this.configuration.searchable ?? true;\n\t}\n\n\tgetDropdownPosition(): Position {\n\t\treturn this.configuration.dropdownPosition ?? Position.bottomLeft;\n\t}\n\n\tgetHorizontalSpacing(): number {\n\t\treturn this.configuration.horizontalSpacing ?? 0;\n\t}\n\n\tgetVerticalSpacing(): number {\n\t\treturn this.configuration.verticalSpacing ?? 0;\n\t}\n\n\tgetPlaceholder(): string {\n\t\treturn this.configuration.placeholder ?? \"\";\n\t}\n\n\tisDisabled(): boolean {\n\t\treturn this.configuration.disabled ?? false;\n\t}\n\n\tisReadOnly(): boolean {\n\t\treturn this.configuration.readonly ?? false;\n\t}\n\n\tisRequired(): boolean {\n\t\treturn this.configuration.required ?? false;\n\t}\n\n\tgetLabel(): string {\n\t\treturn this.configuration.label ?? \"\";\n\t}\n\n\tgetDescription(): string {\n\t\treturn this.configuration.description ?? this.configuration.helpertext ?? \"\";\n\t}\n\n\tgetLabelRenderer(): { new (): ICustomRenderer } | undefined {\n\t\treturn this.configuration.labelRenderer;\n\t}\n\n\tgetLabelRendererParams(): object {\n\t\treturn this.configuration.labelRendererParams ?? {};\n\t}\n\n\tgetDescriptionRenderer(): { new (): ICustomRenderer } | undefined {\n\t\treturn this.configuration.descriptionRenderer;\n\t}\n\n\tgetDescriptionRendererParams(): object {\n\t\treturn this.configuration.descriptionRendererParams ?? {};\n\t}\n\n\tgetAriaLabelledby(): string {\n\t\treturn this.configuration.ariaLabelledby ?? \"label\";\n\t}\n\n\tgetAriaDescribedby(): string {\n\t\treturn this.configuration.ariaDescribedby ?? \"CompositeComponentDescription\";\n\t}\n\n\tshouldGenerateEmptyDom(): boolean {\n\t\treturn this.configuration.ignoreEmptyDOM ?? false;\n\t}\n\n\tgetClassName(): string {\n\t\treturn this.configuration.className ?? \"\";\n\t}\n\n\tgetDropdownClassName(): string | string[] {\n\t\treturn this.configuration.dropdownClassName ?? \"\";\n\t}\n\n\tgetPlusIconRenderer(): { new (...args: any[]): ICustomRenderer } | undefined {\n\t\treturn this.configuration.plusIconRenderer;\n\t}\n\n\tgetPlusIconRendererParams(): object | undefined {\n\t\treturn this.configuration.plusIconRendererParams;\n\t}\n\n\tgetTooltipMessage(): string {\n\t\treturn this.configuration.tooltipMessage ?? \"\";\n\t}\n\n\tgetTooltipRegex(): RegExp | undefined {\n\t\treturn this.configuration.tooltipRegex;\n\t}\n\n\tgetTooltipPosition(): Position {\n\t\treturn this.configuration.tooltipPosition ?? Position.bottomRight;\n\t}\n\n\tgetTooltipAppendto(): HTMLElement | undefined {\n\t\treturn this.configuration.tooltipAppendto ?? document.body;\n\t}\n\n\tgetTooltipHideDelay(): number {\n\t\treturn this.configuration.tooltipHideDelay ?? 700;\n\t}\n\n\tshouldShowTooltip(): boolean {\n\t\treturn this.configuration.tooltip ?? false;\n\t}\n\n\tgetValidationMessage(): string {\n\t\treturn this.configuration.validationMessage ?? \"\";\n\t}\n\n\tgetStatus(): CompositeComponentStatus {\n\t\treturn this.configuration.status ?? \"none\";\n\t}\n\n\tgetNonAllowableCharacterMatcher(): NonAllowableCharacterMatcher | null {\n\t\treturn createNonAllowableCharacterMatcher(this.configuration.nonAllowableCharacters);\n\t}\n\n\tisCharacterAllowed(char: string): boolean {\n\t\tconst matcher = this.getNonAllowableCharacterMatcher();\n\t\treturn matcher ? !matcher(char) : true;\n\t}\n\n\tfilterAllowedText(text: string): string {\n\t\tconst matcher = this.getNonAllowableCharacterMatcher();\n\t\treturn matcher ? removeNonAllowableCharacters(text, matcher) : text;\n\t}\n\n\tsanitizeSegments(segments: ICompositeComponentSegment[]): ICompositeComponentSegment[] {\n\t\tif (!this.getNonAllowableCharacterMatcher()) {\n\t\t\treturn segments;\n\t\t}\n\n\t\treturn sanitizeTextSegments(segments, (text) => this.filterAllowedText(text));\n\t}\n\n\tupdateValidationMessage(message: string): void {\n\t\tthis.configuration.validationMessage = message;\n\t}\n\n\tupdateStatus(status: CompositeComponentStatus): void {\n\t\tthis.configuration.status = status;\n\t}\n\n\tupdateConfiguration(properties: Partial<ICompositeComponentConfiguration>): void {\n\t\tObject.assign(this.configuration, properties);\n\t}\n\n\tupdateSelectedItems(items: ICompositeComponentResolvedItem[]): void {\n\t\tthis.configuration.selectedItems = items.map((item) => item.id);\n\t}\n\n\tupdateSegments(segments: ICompositeComponentSegment[]): void {\n\t\tthis.configuration.segments = segments;\n\t\tthis.configuration.selectedItems = segments\n\t\t\t.filter((segment): segment is Extract<ICompositeComponentSegment, { type: \"token\" }> => segment.type === \"token\")\n\t\t\t.map((segment) => segment.itemId);\n\t}\n\n\tonBeforeOpen(): void {\n\t\tthis.configuration.onBeforeOpen?.();\n\t}\n\n\tonAfterOpen(): void {\n\t\tthis.configuration.onAfterOpen?.();\n\t}\n\n\tonBeforeClose(): void {\n\t\tthis.configuration.onBeforeClose?.();\n\t}\n\n\tonAfterClose(): void {\n\t\tthis.configuration.onAfterClose?.();\n\t}\n\n\tonBeforeSelect(params: ICompositeComponentSelectionParams): boolean {\n\t\treturn this.configuration.onBeforeSelect?.(params) ?? true;\n\t}\n\n\tonAfterSelect(params: ICompositeComponentSelectionParams): void {\n\t\tthis.configuration.onAfterSelect?.(params);\n\t}\n\n\tonBeforeRemove(params: ICompositeComponentSelectionParams): boolean {\n\t\treturn this.configuration.onBeforeRemove?.(params) ?? true;\n\t}\n\n\tonAfterRemove(params: ICompositeComponentSelectionParams): void {\n\t\tthis.configuration.onAfterRemove?.(params);\n\t}\n\n\tonChange(params: ICompositeComponentChangeParams): void {\n\t\tthis.configuration.onChange?.(params);\n\t}\n\n\tonSelectionLimitReached(params: ICompositeComponentSelectionLimitParams): void {\n\t\tthis.configuration.onSelectionLimitReached?.(params);\n\t}\n\n\tonFocus(event: FocusEvent): void {\n\t\tthis.configuration.onFocus?.(event);\n\t}\n\n\tonBlur(event: FocusEvent): void {\n\t\tthis.configuration.onBlur?.(event);\n\t}\n\n\tnormalizeInitiator(initiator?: string): CompositeComponentInitiator {\n\t\treturn initiator === \"UI\" ? \"UI\" : \"API\";\n\t}\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { BEAN_NAME } from \"@dg/corecomponent\";\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 { ICompositeComponentConfiguration } from \"./composite-component-configuration.types\";\nimport { CompositeComponentAPI } from \"./core/model/composite-component-api\";\nimport { CompositeComponentControllerHandler } from \"./core/model/composite-component-controller-handler\";\nimport { CompositeComponentOptionHandler } from \"./core/model/composite-component-option-handler\";\nimport { CompositeComponentStateManager } from \"./core/model/composite-component-state-manager\";\nimport { CompositeComponentTooltipHandler } from \"./core/model/composite-component-tooltip-handler\";\nimport { CompositeComponentUserComponentHandler } from \"./core/model/composite-component-user-component-handler\";\n\nexport interface CompositeComponentUserParams {\n\tglobalEventListener?: Function;\n\tframeworkOverrides?: IFrameworkOverrides;\n\tframeworkComponentWrapper?: any;\n}\n\nlet nextInstanceId = 1;\n\nexport class CompositeComponentCoreComponent {\n\tinitializeCompositeComponent(\n\t\tconfiguration: ICompositeComponentConfiguration,\n\t\tparams: CompositeComponentUserParams = {},\n\t\tcreateUI: CallableFunction,\n\t): void {\n\t\tconst instanceID = configuration.instanceID ?? String(nextInstanceId++);\n\t\tconfiguration.instanceID = instanceID;\n\t\tconst context = new Context();\n\t\tcontext.registerBeanClasses(this.createBeanClasses(), this.createUserConfiguration(configuration, params, instanceID));\n\t\tthis.registerCoreComponent(context);\n\t\tcreateUI(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\tCompositeComponentOptionHandler,\n\t\t\tCompositeComponentUserComponentHandler,\n\t\t\tCompositeComponentControllerHandler,\n\t\t\tCompositeComponentStateManager,\n\t\t\tCompositeComponentTooltipHandler,\n\t\t\tCompositeComponentAPI,\n\t\t]);\n\t}\n\n\tprivate createUserConfiguration(\n\t\tconfiguration: ICompositeComponentConfiguration,\n\t\tparams: CompositeComponentUserParams,\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\tregistry.setupComponents(createComponentList());\n\t}\n}\n\nfunction createComponentList(): ComponentMeta[] {\n\treturn [\n\t\t{\n\t\t\tcomponentName: \"composite-label\",\n\t\t\tcomponentClass: Label,\n\t\t},\n\t\t{\n\t\t\tcomponentName: \"composite-description\",\n\t\t\tcomponentClass: DescriptionComponent,\n\t\t},\n\t];\n}\n","import { Context } from \"@dg/corecomponent/Context.js\";\nimport {CompositeComponentItemReference,ICompositeComponentConfiguration,ICompositeComponentItem,ICompositeComponentResolvedItem,ICompositeComponentSegment,} from \"./composite-component-configuration.types\";\nimport { COMPOSITE_COMPONENT_BEAN_NAME } from \"./constants/composite-component-bean-constants\";\nimport { CompositeRootComponent } from \"./core/composite-root/composite-root-view\";\nimport { ICompositeComponentAPI } from \"./core/model/composite-component-api.types\";\nimport {CompositeComponentUserParams,CompositeComponentCoreComponent,} from \"./composite-component-core-component\";\nimport { CompositeComponentTokenFieldRenderer } from \"./core/renderers/composite-component-token-field-renderer\";\nimport { CompositeComponentTokenRenderer } from \"./core/renderers/composite-component-token-renderer\";\n\nexport type {\n\tCompositeComponentItemReference,\n\tCompositeComponentUserParams,\n\tICompositeComponentConfiguration,\n\tICompositeComponentItem,\n\tICompositeComponentResolvedItem,\n\tICompositeComponentSegment,\n};\n\nexport {\n\tCompositeComponentTokenFieldRenderer,\n\tCompositeComponentTokenRenderer,\n};\n\nexport class CompositeComponent {\n\tpublic api: ICompositeComponentAPI | undefined;\n\n\tconstructor(configuration: ICompositeComponentConfiguration, params?: CompositeComponentUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(COMPOSITE_COMPONENT_BEAN_NAME.COMPOSITE_API) as ICompositeComponentAPI;\n\t\t\tcontext.createBean(new CompositeRootComponent(configuration?.appendTo));\n\t\t};\n\n\t\tnew CompositeComponentCoreComponent().initializeCompositeComponent(configuration, params, createUI);\n\t}\n}\n\n(window as any).CompositeComponent = CompositeComponent;\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\";\nimport { SignatureComponent } from \"./signature/src/signature\";\nimport { CompositeComponent } from \"./composite-component/src/composite-component\";\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    SignatureComponent,\n    CompositeComponent\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, IDateRange } from \"./dg-date-range-picker.types\";\nimport { CorePopupHandler, PopupComponentPositionParams, Position } from \"../../utility/PopupHandler/CorePopupHandler\";\nimport { toTimestamp } from \"./core/utils/date-utils\";\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    getValue(): IDateRange {\n        if (this._isOpen && this.picker?.api) {\n            return this.toIDateRange(this.picker.api.getDateRange());\n        }\n        return {\n            from: this.config.fromValue ?? null,\n            to  : this.config.toValue ?? null,\n        };\n    }\n\n    setValue(value: IDateRange): void {\n        this.applyValueToConfig(value);\n\n        if (this._isOpen && this.picker?.api) {\n            this.picker.api.setDateRange(this.toDateRange(value));\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                this.applyValueToConfig(this.toIDateRange(range));\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    private applyValueToConfig(value: IDateRange): void {\n        this.config.fromValue = this.toConfigDate(value.from);\n        this.config.toValue   = this.toConfigDate(value.to);\n    }\n\n    private toConfigDate(value: Date | number | null): Date | null {\n        if (value === null) return null;\n        return value instanceof Date ? value : new Date(value);\n    }\n\n    private toDateRange(value: IDateRange): DateRange {\n        return {\n            from: toTimestamp(value.from),\n            to  : toTimestamp(value.to),\n        };\n    }\n\n    private toIDateRange(range: DateRange): IDateRange {\n        return {\n            from: range.from,\n            to  : range.to,\n        };\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 { IUploadConfiguration } from \"./upload-configuration.types\";\nimport { IUserParams, UploadCoreComponent } from \"./upload-core-component\";\n\n\n\n\n\n\nexport { \n    UploadError, type UploadErrorType \n} from \"./upload-error.types\";\nexport type { \n    UploadContentType, ISelectedDirectory, IUploadPanelRendererParams \n} from \"./upload-configuration.types\";\nexport {\n    UPLOAD_CONTENT_TYPE_DEFAULT,\n    getAcceptForUploadContentType,\n    isDirectoryUploadType,\n    resolveFileInputAccept,\n    resolveUploadContentType,\n} from \"./upload-content-type\";\nexport {\n    joinDirectoryPath,\n    extractDirectoryFromFileList,\n    resolveDirectoryPath,\n    getDirectoryDisplayPath,\n    type DirectoryPathBuilderArgs,\n} from \"./upload-directory-path\";\n\nexport class UploadComponent {\n\tpublic api: IUploadAPI | undefined;\n\n\tconstructor(configuration: IUploadConfiguration, 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","import { Context } from \"@dg/corecomponent/Context.js\";\nimport { SIGNATURE_BEAN_NAME } from \"./constants/signature-bean-constants\";\nimport { ISignatureAPI } from \"./core/model/signature-api.types\";\nimport { SignatureRootComponent } from \"./core/signature-root/signature-root-view\";\nimport { ISignatureConfiguration } from \"./signature-configuration.types\";\nimport { IUserParams, SignatureCoreComponent } from \"./signature-core-component\";\n\nexport class SignatureComponent {\n\tpublic api: ISignatureAPI | undefined;\n\n\tconstructor(configuration: ISignatureConfiguration, params?: IUserParams) {\n\t\tconst createUI = (context: Context) => {\n\t\t\tthis.api = context.getBean(SIGNATURE_BEAN_NAME.SIGNATURE_API) as ISignatureAPI;\n\t\t\tcontext.createBean(new SignatureRootComponent(configuration?.appendTo));\n\t\t};\n\t\tnew SignatureCoreComponent().initializeSignature(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","checkToDisableNavIfLimitExceedsMax","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","goToBackForwardYear","isBeforeMonth","goToFastForwardYear","isAfterMonth","refreshGridAfterYearChange","isYearPageInDangerZoneForFuture","isYearPageInDangerZoneForPast","getMonthYearButtons","isInYearGridView","shouldDisableNextMonthButton","shouldDisablePreviousMonthButton","DEFUALT_FORMAT_MAP","formatMap","Y","H","CalendarDataManager","dateSelected","initDate","viewDate","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","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","viewedYear","getSelectedYearIndex","monthdateObject","totalDays","startYear","getYearPageStart","years","weekNames","startOfWeek","getSelectedDay","getSelectedDate","getSelectedMonthIndex","isSameMonthInSameYear","isBeforeYear","isAfterYear","destinationMonth","getEffectiveMaxDate","getEffectiveMinDate","startOfDecade","max","lastYearOfCurrentPage","firstYearOfCurrentPage","precausionMonthForFuture","precausionMonthForPast","isBeforeTIme","tempDate","date1","date2","month1","month2","year1","year2","isSameDate","unit","CalendarCellViewController","refreshConstraintState","currentMonth","dateDetails","dropdownHanlder","destroyDropdown","updateModelDate","updateModelMonth","updateViewManager","updateModelYear","updatedDetails","details","CalendarCellView","CalendarApi","getCalendarCtrl","getValue","blur","currentSelectedDate","shouldUpdateDate","newDate","isConstraintOnlyUpdate","constraintKeys","every","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","getClipboard","clipboard","isClipboardOperationAllowed","operation","createClipboardGuard","registerClipboardGuards","guard","CheckboxRootController","initState","registerEvent","registerCtrl","customDomHandler","addErrorClassName","isInValid","stateManager","newState","stateHandler","getSelection","getContainer","userRenderClass","userClass","setSelection","state","addInputEventListener","addClassList","customRenderHandler","onMouseDown","listener","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","isInvalid","invalid","invalidText","validationMessageClasses","createHelperTextRendererWrapper","createHelperTextRendererParams","toggleAttribute","helperText","DescriptionComponent","addOrRemove","insertValueWithoutCellRenderer","getFormLabelUtilityClass","FormLabelController","titleClasses","labelClasses","labelTitleClasses","addClassName","createProps","asterisk","Label","removeClassName","componentDetails","updateLabelProperties","loadRequiredElement","loadLabelElement","labelElement","_classes","CheckBoxStateManager","getValidationUtilityClass","ErrorController","inValid","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","clearTimeouts","interactionHideDelay","getInteractionHideDelay","clearInteractiveTimeout","clearHideTimeout","getHideTooltip","tooltipHideTimeoutId","clearShowTimeout","getTooltipShowDelay","getTooltipValue","hideTooltipCallback","ToolTipHandler","setupTooltip","isBrowserTooltipEnabled","browserTooltips","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","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","previousWasEmpty","currentlyEmpty","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","pageNumber","changePageSize","setPageSize","changePageSizeOptions","pageSizes","changePageSizes","getPage","PropertyNames","PaginationUserComponentHandler","getPaginationUtilityClass","PaginationButtonController","PaginationButtonComponent","PaginationDataHandler","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","isInteractionLocked","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","resolveNavLabel","nodeType","TEXT_NODE","buildPrevNavigators","action","buildNextNavigators","resolvePageLabel","pageNum","createPageButton","isActivePage","navDisabled","locked","buttonConfig","elementArray","prevNavigators","nextNavigators","pages","pageArray","arraySetter","currentPage","prevAllowed","nextAllowed","nav","array","isEllipsis","pageButtons","numericPages","leftBoundary","rightBoundary","siblingArray","mergedArray","removeCommonElements","boundarySet","siblingFirst","siblingLast","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","selectInstance","pageSizeLabel","syncSizeChanger","setInitialSizeChanger","getSizeOptions","valueStr","getSelectedOption","currentSize","applyPageSizeFromSelect","selectConfiguration","currentIds","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","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","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","clipboardGuardHandler","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","registerClipboardHandlers","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","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","isOptionDisabled","setAriaChecked","inputWrapperComp","lastSelectedOption","lastSelectedController","radioRenderControllers","lastSelectedRadio","isShowAsBlock","getComp","RadioRenderControllers","updateRadios","createRadioControllers","radioControllers","controllerExist","radioItem","destroyAllControllers","RadioRootController","RadioHandler","registerRadioRootController","selectOptionByKeyboard","newSelectedController","newSelectedRadio","getNextOption","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","getDateRange","dataManager","setDateRange","fromDate","to","_properties","DateRangePickerHeaderController","headerTitle","DateRangePickerHeaderComponent","DateRangePickerHeaderTemplate","toTimestamp","toEndOfDayTimestamp","DateRangePickerFromController","createDatePicker","setMaximumDate","destroyPicker","fromTitle","getFromLabel","datePickerConfiguration","createDatePickerConfiguration","datepicker","dataManger","onDateRangeChange","syncMaxDateConstraint","minDateTs","maxDateTs","getToDate","getToValue","getFromDateAsDate","setFromDate","DateRangePickerFromComponent","DateRangePickerFromTemplate","DateRangePickerToController","setMinimumDate","toTitle","getToLabel","syncMinDateConstraint","getFromDate","getFromValue","getToDateAsDate","setToDate","validationParams","validateDateRange","immediateCommit","areBothDatesSelected","DateRangePickerToComponent","DateRangePickerToTemplate","DatePickerRangePickerDataManager","constraints","initialized","changeCallbacks","minDaysToSelect","getMinDaysToSelect","maxDaysToSelect","getMaxDaysToSelect","initialConstraints","minTs","maxTs","minRange","maxRange","setConstraints","_q","_p","_o","_t","_s","_r","fromTs","toTs","ts","previousRange","emitDateRangeChange","endOfDayTs","clearDateRange","errors","warnings","daysDiff","getDaysDifference","validateDate","isDateDisabled","isDateInRange","getConstraints","disabledDates","disabledDate","isSameDay","disabledDays","dayOfWeek","offDateRangeChange","isRangeComplete","formatDateRange","formatDate","getDateRangeAsString","ts1","ts2","d1","d2","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","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","UPLOAD_CONTENT_TYPE_DEFAULT","isDirectoryUploadType","DEFAULT_FILE_CONTENT_EXTENSIONS","DEFAULT_FILE_CONTENT_TYPES","ACCEPT_BY_CONTENT_TYPE","video","audio","resolveUploadContentType","resolveFileInputAccept","cfg","allowFolder","directory","explicit","accept","allowedFileTypes","entry","allowedFileTypesToAccept","EQUIVALENT_EXTENSIONS","EXTENSION_TO_MIME","jpg","jpeg","png","gif","webp","mp4","webm","mp3","wav","pdf","txt","html","htm","doc","docx","xls","xlsx","csv","json","xml","md","rtf","zip","fileMatchesAllowedFileTypes","fileMime","fileExtension","fileName","lastDot","getFileExtension","mime","extension","normalizeAllowedFileTypeEntry","group","extensionsAreEquivalent","expectedMime","extractDirectoryFromFileList","fileList","paths","webkitRelativePath","rootName","directoryPaths","commonParts","resolveDirectoryPath","files","directoryPathPrefix","segments","flatMap","joinDirectoryPath","buildDirectoryPath","handle","UploadError","cause","getUploadFileInputDomId","KB","UploadRenderer","loadingUids","itemLoaderInstances","itemRendererInstances","blobPreviewUrlByUid","previewOverlayEl","previewOverlayOnKeyDown","triggerHost","directoryNameEl","directoryChooseBtn","selectedDirectory","outerRoot","lastValidationMessage","suppressBlurValidationForFilePicker","awaitingFilePickerResult","defaultFileList","activeUploads","defaultDirectory","defaultDirectoryPath","onShellFocusIn","onShellFocusOut","syncValidationDisplayOnBlur","onWindowFocusAfterFilePicker","validateMinFileCountAfterPickerDismissed","isDirectoryMode","createFileInput","createTrigger","createListContainer","bindPasteHandler","bindFocusValidationHandlers","renderList","syncInteractionState","setOuterFieldRoot","getTooltipAnchor","fileInput","getFocusElement","currentMessage","syncValidationChrome","clearFieldValidation","activeUpload","XMLHttpRequest","abort","clearInterval","inputPanelRendererImpl","destroyItemRenderers","destroyAllItemLoaders","closePreviewOverlay","revokeBlobPreviewUrls","getFileList","setFileList","revokeBlobPreviewsNotInFileList","emitChange","addFileList","incoming","mergedList","clearFiles","showLoader","uid","normalizeLoaderUids","syncItemLoaders","removeLoader","removeAllLoader","showAllLoader","upload","uploadFile","applyUploadShellChrome","shouldUploadFolderContents","hasDirectorySelection","getSelectedDirectory","setSelectedDirectory","syncDirectoryDisplay","onDirectoryChange","revalidateFileCountAfterChange","applyDirectorySelection","isUserInputLocked","applyConfiguration","syncFolderInputAttributes","caption","getTriggerCaption","refreshPanelRenderer","pickFolder","shouldUseFolderInput","syncFileInputAccept","webkitdirectory","extracted","onFilesAdded","hasFieldLayout","inputPanelRenderer","usesPanelRenderer","ph","dragAndDrop","getDirectoryPlaceholder","createDirectoryFolderIcon","displayPath","createPanelRendererParams","uploadProps","openFilePicker","openDirectoryPicker","inputPanelRendererParams","onDirectoryHandleSelected","showDirectoryPicker","DOMException","prepareDirectoryFallbackInput","createDirectoryPickerTrigger","nameEl","chooseBtn","createDefaultUploadIcon","fieldLayout","panelMode","impl","Panel","panelParams","textSpan","dataTransfer","onDrop","listContainer","createItemOverlayParams","overLayRendererParams","destroyItemLoader","pruneLoadingUids","fileUids","findListItemByUid","detachItemLoader","attachItemLoader","existingOverlay","overlayHost","OverlayRenderer","overLayRenderer","spinner","stampListItemUid","pasteUpload","transfer","meetsMinimumSelection","minFiles","getEffectiveMinFileCount","applyValidationError","applyFieldValidationError","dispatchUploadError","notify","onUploadError","fileSizeToKb","bytes","createRejectedFile","rawFile","configured","errorMessage","getFileSizeValidationError","maxFileSizeKb","maxFileSize","minFileSizeKb","minFileSize","formatFileSize","isError","selectedFiles","hadValidationError","sizeError","createUploadFile","excess","autoUpload","contentType","fileMatchesUploadContentType","candidate","percentage","beforeUpload","onUploadStart","mockUpload","xhr","method","withCredentials","headers","setRequestHeader","onprogress","lengthComputable","total","onUploadProgress","response","onUploadSuccess","onerror","formData","FormData","send","taskId","setInterval","mock","removeFile","revokeBlobPreviewForUid","fileListForChange","URL","revokeObjectURL","nextFiles","keep","isImageFile","getThumbSrcForFile","thumbUrl","createObjectURL","appendCloseIcon","parent","iconClass","openImagePreviewOverlay","backdrop","closeBtn","img","alt","previewFile","previewRenderer","previewElement","onPreview","createUploadItemRendererParams","getThumbSrc","listItemRendererParams","renderCustomListItem","ItemRenderer","listItemRenderer","renderDefaultListItem","thumbWrap","thumbSrc","canThumbClick","showPreview","thumbEl","sizeEl","allowDownload","downloadLink","progress","err","allowRemove","shouldShowUploadList","showUploadList","usesCustomItemRenderer","UploadOptionHandler","_inputMeta","_oldValue","_newValue","_eventOrigin","_maxCount","toolTipRenderer","toolTipRendererParams","UploadAPI","UploadAPI_1","registerFieldRoot","fieldRoot","ensureRenderer","attachTooltipIfEnabled","anchor","uploadTooltipHandler","attachTooltip","hidePart","removeProperty","showPart","resolveSubPart","host","byPath","resetFileList","initial","UploadRootController","UploadRootComponent","uploadField","uploadRootTemplate","uploadApi","UploadUserComponentHandler","lookupRegistry","UploadStateManager","UploadFieldComponent","UploadTooltipHandler","tooltipConfiguration","UploadCoreComponent","initializeUpload","panelRenderer","SIGNATURE_BEAN_NAME","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_BG","SignatureCanvasEngine","padWrap","strokes","currentStroke","backgroundDataUrl","backgroundImage","undoStack","redoStack","activePointerId","drawing","drawingProgressNotified","rafId","pendingMove","lastMoveTs","canvas","onBegin","onEnd","onDrawingProgress","boundPointerDown","handlePointerDown","boundPointerMove","handlePointerMove","boundPointerUp","handlePointerUp","boundPointerCancel","boundLostPointerCapture","willReadFrequently","ctx","mount","applyCanvasStyles","bindEvents","setupResizeObserver","resize","unbindEvents","cancelAnimationFrame","isInteractionBlocked","pushUndoSnapshot","redraw","undo","isUndoRedoEnabled","captureSnapshot","prev","applySnapshot","redo","load","loadSvg","loadRaster","toDataURL","resolveMimeType","toSvgDataUrl","exportEmptyCanvas","toBlob","buildSvgMarkup","Blob","dataUrl","fetch","blob","shouldHidePlaceholder","computeStrokeLength","getTotalStrokeLength","stroke","getStrokeCount","touchAction","userSelect","responsive","cssWidth","resolveCssSize","cssHeight","dpr","devicePixelRatio","setTransform","scale","measured","raw","isPrimaryPointer","setPointerCapture","pointerId","point","toLocalPoint","points","penColor","penWidth","moveEv","performance","notifyDrawingProgressIfNeeded","hasPointerCapture","releasePointerCapture","finishStroke","trimUndoStack","isPrimary","enableUndoRedo","rect","pressure","save","clearRect","fillStyle","fillRect","drawImage","drawStroke","restore","lineCap","lineJoin","strokeStyle","beginPath","arc","PI","fill","moveTo","curr","lineWidth","midX","midY","quadraticCurveTo","loadImage","svgMarkup","rasterizeImageToDataUrl","Image","crossOrigin","off","offCtx","snapshot","maxUndoStack","shift","hypot","requested","exportType","encodeURIComponent","bg","getSignatureCanvasDomId","SignatureRenderer","onShowTooltip","toolbarEl","validateOnBlur","buildDom","customClass","querySelectorAll","btn","syncToolbar","emitValueChange","runValidation","placeholderEl","showToolbar","createToolbar","toolbar","buttons","createToolbarButton","hidePlaceholder","fromBlur","getMinStrokeLength","empty","strokeLength","SignatureOptionHandler","setReadOnly","cssClass","minStrokeLength","getMaxUndoStack","getExportType","SignatureAPI","SignatureAPI_1","showTooltipIfEnabled","signatureTooltipHandler","getOutput","downloadOutput","link","resolveDownloadFilename","previewOutput","openPreviewOverlay","signature","formatLabel","SignatureRootController","SignatureRootComponent","signatureField","signatureRootTemplate","signatureApi","SignatureUserComponentHandler","resolveSignatureRendererDetails","defaultName","SignatureFieldComponent","SignatureTooltipHandler","SignatureCoreComponent","initializeSignature","COMPOSITE_COMPONENT_BEAN_NAME","DEFAULT_ICON_TEXT_MAP","NumberComponent","RadioComponent","TextComponent","formatCompositeComponentLabel","resolveCompositeComponentClass","DG_Components","resolveCompositeSelectedIds","selectedItems","resolved","COMPOSITE_TOKEN_ATTR","COMPOSITE_CARET_ANCHOR","COMPOSITE_LEADING_CARET_ANCHOR_PATTERN","COMPOSITE_TRAILING_CARET_ANCHOR_PATTERN","COMPOSITE_CARET_ANCHOR_ONLY_PATTERN","createTextSegment","createTokenSegment","segmentsToPlainText","getTokenIdsFromSegments","resolveInitialSegments","validIds","normalizeSegments","mergeAdjacentTextSegments","merged","previous","parseSegmentsFromElement","child","nestedText","followsToken","precedesToken","stripWhitespaceAdjacentToTokens","CompositeComponentIconRenderer","compositeItem","alignItems","justifyContent","lineHeight","iconText","CompositeComponentTokenFieldRenderer","tokenInput","removeHandler","createTokenRemoveButton","CompositeComponentUserComponentHandler","getTokenRendererParams","tokenRendererParams","getDropdownOptionRenderer","getDropdownOptionRendererParams","NAVIGATION_KEYS","CompositeInputController","savedInsertRange","destroyAllTokenRenderers","renderSegments","sanitized","sanitizeSegments","caretOffset","getCaretOffset","getItemById","createCaretAnchorNode","createTokenElement","setCaretOffset","updatePlaceholderState","getSegments","saveInsertPosition","rangeCount","getRangeAt","isRangeWithinInput","cloneRange","insertToken","resolveInsertRange","removeAllRanges","addRange","deleteContents","insertNode","spacer","after","ensureCaretAnchorBefore","caretRange","setStart","collapse","syncFromDom","removeTokenElement","destroyTokenRenderer","removeToken","sanitizeInputText","ensureDomCaretAnchors","inputType","handleInsertTextAfterToken","matcher","getNonAllowableCharacterMatcher","containsNonAllowableCharacter","filteredText","filterAllowedText","insertTextAtSelection","shouldAllowKeydown","isCharacterAllowed","setCaretFromPointer","__compositeTokenRenderer","getItems","rawSegments","segmentsChanged","before","filterTextPreservingCaretAnchors","shouldRestoreCaret","startContainer","startOffset","nextRange","nextOffset","mapCaretOffsetAfterFilter","filteredPrefix","activeRange","fallbackRange","selectNodeContents","endContainer","commonAncestorContainer","textNode","setStartAfter","getPlaceholderElement","hasContent","previousSibling","ensureCaretAnchorAfter","nextSibling","tokenHost","isCollapsed","anchorOffset","resolveTextInsertionPoint","shouldHandleTokenAdjacentInsert","insertOffset","resolveInsertOffsetInAnchorText","nextText","insertedOffset","leadingAnchorLength","trailingAnchor","getOrCreateTrailingCaretAnchor","getNodeCaretLength","targetOffset","placeCaretAfterToken","findAncestorTokenHost","placeCaretBeforeToken","textBeforeAnchor","findTokenHostFromTarget","getCaretRangeFromPoint","adjustedRange","adjustPointerRange","caretRangeFromPoint","caretPositionFromPoint","offsetNode","resolveInputChildRange","adjusted","resolveCaretAnchorRange","endsWith","textOffset","anchorNode","previousText","CompositeInputComponent","placeholderElement","CompositePickerController","isOpen","openInitiator","setAnchorElement","initSelect","isOpened","classNameStr","buildSelectOptions","onAfterOpen","onAfterClose","selectEl","opacity","pointerEvents","renderers","toCompositeSelectOption","CompositePickerComponent","CompositeComponentControllerHandler","pickerController","registerRootController","getRootController","registerInputController","getInputController","registerPickerController","getPickerController","CompositeComponentTooltipHandler","fieldWrapper","CompositeComponentStateManager","internalErrorMessage","getSelectedItems","tokenIds","getSelectedIds","syncSegmentsToConfiguration","isSelectionLimitReached","nextCount","limit","canSelectItem","handleSelectionLimitReached","getSelectionLimitMessage","showInternalValidationError","onSelectionLimitReached","clearInternalValidationError","showExternalValidationError","hideValidationError","restoreValidationState","getStatus","CompositeRootController","renderChrome","renderInput","renderPicker","renderInitialValue","shouldRestoreFocus","getInputHostElement","renderPickerTrigger","getPickerTriggerElement","RendererClass","inputHost","inputComponent","handleSegmentsChanged","pickerComponent","getFieldWrapperElement","handlePickerSelection","selectionParams","createSelectionParams","changeParams","normalizeInitiator","CompositeRootComponent","fieldWrapperElement","inputHostElement","pickerTriggerElement","pickerTrigger","CompositeComponentAPI","getSelectedComponentDefinitions","getTextValue","setItems","addItem","nextItems","nextSelectedItems","removeItem","nextSegments","setSelectedItems","resolvedSegments","setSegments","updateSegments","isPickerOpened","optionKeys","isSegmentValueUpdate","shouldResanitizeExisting","nonAllowableCharacters","inputHadFocus","resolvedMessage","CompositeComponentOptionHandler","seen","fallbackLabel","keywords","iconAriaLabel","normalizeCompositeItems","selectionLimitMessage","flags","disallowed","createNonAllowableCharacterMatcher","removeNonAllowableCharacters","filterText","sanitizeTextSegments","updateSelectedItems","onBeforeRemove","onAfterRemove","CompositeComponentCoreComponent","initializeCompositeComponent","CompositeComponent","RenderingNumberComponent","formatNumber","formatPercentage","formatCurrency","Link","formatPhoneNumber","DateTime","PaginationComponent","RenderMultilineComponent","RatingComponent","RenderingTextComponent","DateTimeReadonlyComponent","pad","hours12","ampm","tokenMap","yyyy","yy","Token","Dialog","DateRangeField","DGDateRangePicker","picker","_isOpen","_destroying","_popupHandler","_popupDestroy","buildPickerConfig","mountViaPopupHandler","reposition","updateConfig","toIDateRange","applyValueToConfig","toDateRange","pickerElement","onInternalClose","onOk","toConfigDate","UploadComponent","SignatureComponent"],"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,153,154,155,156,157,158,159,160,161,162,163,164,165,166,173,178,232,374,375,420,421,422,423,424]}