novo-elements 13.6.0 → 13.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addons/ckeditor/CKEditor.scss +2 -2
- package/elements/chips/Chips.scss +16 -7
- package/elements/chips/index.d.ts +1 -0
- package/elements/date-picker/DatePickerInput.scss +1 -1
- package/elements/date-picker/MultiDateInput.scss +19 -0
- package/elements/form/Form.scss +53 -27
- package/elements/form/extras/address/Address.scss +4 -2
- package/elements/header/Header.scss +5 -6
- package/elements/modal/modal.component.scss +6 -1
- package/elements/modal/notification.component.scss +1 -1
- package/elements/multi-picker/index.d.ts +4 -1
- package/elements/picker/Picker.scss +6 -12
- package/elements/picker/index.d.ts +1 -1
- package/elements/quick-note/QuickNote.scss +8 -0
- package/elements/toolbar/toolbar.component.scss +1 -2
- package/fesm2022/novo-elements-addons-ckeditor.mjs +2 -2
- package/fesm2022/novo-elements-addons-ckeditor.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-chips.mjs +10 -6
- package/fesm2022/novo-elements-elements-chips.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-date-picker.mjs +6 -6
- package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-form.mjs +6 -6
- package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-header.mjs +2 -2
- package/fesm2022/novo-elements-elements-header.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-modal.mjs +4 -4
- package/fesm2022/novo-elements-elements-modal.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-multi-picker.mjs +20 -11
- package/fesm2022/novo-elements-elements-multi-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-picker.mjs +4 -4
- package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-quick-note.mjs +2 -2
- package/fesm2022/novo-elements-elements-quick-note.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-time-picker.mjs +2 -2
- package/fesm2022/novo-elements-elements-time-picker.mjs.map +1 -1
- package/fesm2022/novo-elements-elements-toolbar.mjs +2 -2
- package/fesm2022/novo-elements-elements-toolbar.mjs.map +1 -1
- package/novo-elements.scss +1 -1
- package/package.json +1 -1
- package/styles/cdk.scss +9 -2
- package/styles/content/misc.scss +1 -1
- package/styles/themes/bh2026.scss +5 -0
- package/styles/themes/light.scss +2 -0
|
@@ -689,11 +689,11 @@ class QuickNoteElement extends OutsideClick {
|
|
|
689
689
|
return this._placeholderElement;
|
|
690
690
|
}
|
|
691
691
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: QuickNoteElement, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.ComponentUtils }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
692
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: QuickNoteElement, isStandalone: false, selector: "novo-quick-note", inputs: { config: "config", startupFocus: "startupFocus", placeholder: "placeholder" }, outputs: { focus: "focus", blur: "blur", change: "change" }, providers: [QUICK_NOTE_VALUE_ACCESSOR], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, static: true }, { propertyName: "host", first: true, predicate: ["host"], descendants: true, static: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: ' <div class="quick-note-wrapper" #wrapper><textarea #host></textarea> <span #results></span></div> ', isInline: true, styles: [":host,.quick-note-wrapper{width:100%;height:200px;position:relative}:host ::ng-deep .cke_top,.quick-note-wrapper ::ng-deep .cke_top{padding:4px 3px 0}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_text{padding-left:7px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_open,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_open{margin-left:4px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text{width:27px}\n"] }); }
|
|
692
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: QuickNoteElement, isStandalone: false, selector: "novo-quick-note", inputs: { config: "config", startupFocus: "startupFocus", placeholder: "placeholder" }, outputs: { focus: "focus", blur: "blur", change: "change" }, providers: [QUICK_NOTE_VALUE_ACCESSOR], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, static: true }, { propertyName: "host", first: true, predicate: ["host"], descendants: true, static: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: ' <div class="quick-note-wrapper" #wrapper><textarea #host></textarea> <span #results></span></div> ', isInline: true, styles: [":host-context([data-theme=bh2026]) ::ng-deep .cke{border:var(--field-border-width-default) solid var(--field-color-border-default);border-radius:var(--field-border-radius-default, .4rem);overflow:hidden}:host,.quick-note-wrapper{width:100%;height:200px;position:relative}:host ::ng-deep .cke_top,.quick-note-wrapper ::ng-deep .cke_top{padding:4px 3px 0}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_text{padding-left:7px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_open,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_open{margin-left:4px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text{width:27px}\n"] }); }
|
|
693
693
|
}
|
|
694
694
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: QuickNoteElement, decorators: [{
|
|
695
695
|
type: Component,
|
|
696
|
-
args: [{ selector: 'novo-quick-note', providers: [QUICK_NOTE_VALUE_ACCESSOR], template: ' <div class="quick-note-wrapper" #wrapper><textarea #host></textarea> <span #results></span></div> ', standalone: false, styles: [":host,.quick-note-wrapper{width:100%;height:200px;position:relative}:host ::ng-deep .cke_top,.quick-note-wrapper ::ng-deep .cke_top{padding:4px 3px 0}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_text{padding-left:7px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_open,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_open{margin-left:4px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text{width:27px}\n"] }]
|
|
696
|
+
args: [{ selector: 'novo-quick-note', providers: [QUICK_NOTE_VALUE_ACCESSOR], template: ' <div class="quick-note-wrapper" #wrapper><textarea #host></textarea> <span #results></span></div> ', standalone: false, styles: [":host-context([data-theme=bh2026]) ::ng-deep .cke{border:var(--field-border-width-default) solid var(--field-color-border-default);border-radius:var(--field-border-radius-default, .4rem);overflow:hidden}:host,.quick-note-wrapper{width:100%;height:200px;position:relative}:host ::ng-deep .cke_top,.quick-note-wrapper ::ng-deep .cke_top{padding:4px 3px 0}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_text{padding-left:7px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo_open,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo_open{margin-left:4px}:host ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text,.quick-note-wrapper ::ng-deep .cke_top .cke_toolbar .cke_combo__fontsize .cke_combo_text{width:27px}\n"] }]
|
|
697
697
|
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.ComponentUtils }], propDecorators: { wrapper: [{
|
|
698
698
|
type: ViewChild,
|
|
699
699
|
args: ['wrapper', { static: true }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"novo-elements-elements-quick-note.mjs","sources":["../../../projects/novo-elements/src/elements/quick-note/extras/quick-note-results/QuickNoteResults.ts","../../../projects/novo-elements/src/elements/quick-note/QuickNote.ts","../../../projects/novo-elements/src/elements/quick-note/QuickNote.module.ts","../../../projects/novo-elements/src/elements/quick-note/novo-elements-elements-quick-note.ts"],"sourcesContent":["// NG2\nimport { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\n// Vendor\nimport { from, Observable } from 'rxjs';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { PickerResults } from 'novo-elements/elements/picker';\n\n@Component({\n selector: 'quick-note-results',\n host: {\n class: 'active',\n },\n template: `\n <novo-loading theme=\"line\" *ngIf=\"isLoading && !matches.length\"></novo-loading>\n <novo-list *ngIf=\"matches.length > 0\">\n <novo-list-item\n *ngFor=\"let match of matches\"\n (click)=\"selectMatch($event)\"\n [class.active]=\"match === activeMatch\"\n (mouseenter)=\"selectActive(match)\"\n >\n <item-content>\n <p [innerHtml]=\"match.label | highlight:term\"></p>\n </item-content>\n </novo-list-item>\n </novo-list>\n <p class=\"picker-error\" *ngIf=\"hasError\">{{ labels.quickNoteError }}</p>\n <p class=\"picker-null\" *ngIf=\"!isLoading && !matches.length && !hasError\">{{ labels.quickNoteEmpty }}</p>\n `,\n styleUrls: ['./QuickNoteResults.scss'],\n standalone: false,\n})\nexport class QuickNoteResults extends PickerResults {\n // Mode that the quick note is in for tagging\n taggingMode: string = '';\n\n constructor(element: ElementRef, public labels: NovoLabelService, ref: ChangeDetectorRef) {\n super(element, labels, ref);\n }\n\n get term() {\n return this._term;\n }\n\n set term(value: any) {\n this._term = value.searchTerm;\n this.taggingMode = value.taggingMode;\n this.hasError = false;\n this.isLoading = true;\n this.search(value, this.taggingMode).subscribe(\n (results) => {\n this.matches = this.isStatic ? this.filterData(results) : results;\n this.isLoading = false;\n },\n () => {\n this.hasError = true;\n this.isLoading = false;\n },\n );\n }\n\n search(term: string, taggingMode): Observable<any> {\n const searchCall = this.config.options[taggingMode];\n return from(\n new Promise((resolve, reject) => {\n // Check if there is match data\n if (searchCall) {\n // Resolve the data\n if (Array.isArray(searchCall)) {\n this.isStatic = true;\n // Arrays are returned immediately\n resolve(this.structureArray(searchCall));\n } else if (\n (searchCall.hasOwnProperty('reject') && searchCall.hasOwnProperty('resolve')) ||\n Object.getPrototypeOf(searchCall).hasOwnProperty('then')\n ) {\n this.isStatic = false;\n // Promises (ES6 or Deferred) are resolved whenever they resolve\n searchCall.then(this.structureArray.bind(this)).then(resolve, reject);\n } else if (typeof searchCall === 'function') {\n this.isStatic = false;\n // Promises (ES6 or Deferred) are resolved whenever they resolve\n searchCall(term).then(this.structureArray.bind(this)).then(resolve, reject);\n } else {\n // All other kinds of data are rejected\n reject('The data provided is not an array or a promise');\n throw new Error('The data provided is not an array or a promise');\n }\n } else {\n // No data gets rejected\n reject('error');\n }\n }),\n );\n }\n\n /**\n * @name structureArray\n * @param collection - the data once getData resolves it\n *\n * @description This function structures an array of nodes into an array of objects with a\n * 'name' field by default.\n */\n structureArray(collection: Array<any>) {\n if (collection && (typeof collection[0] === 'string' || typeof collection[0] === 'number')) {\n return collection.map((item) => {\n return {\n value: item,\n label: item,\n };\n });\n }\n return collection.map((data) => {\n const value = this.config.field ? data[this.config.field[this.taggingMode]] : data.value || data;\n const label = this.config.format ? Helpers.interpolate(this.config.format[this.taggingMode], data) : data.label || String(value);\n return { value, label, data };\n });\n }\n\n /**\n * @name selectMatch\n * @param event\n *\n * @description\n */\n selectMatch(event: KeyboardEvent) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n const selected = this.activeMatch;\n if (selected) {\n this.parent.onSelected(this.taggingMode, selected);\n this.parent.hideResults();\n }\n return false;\n }\n}\n","// NG2\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ComponentUtils } from 'novo-elements/services';\nimport { Key, OutsideClick, fixCkEditorInputEvent } from 'novo-elements/utils';\n// APP\nimport { QuickNoteResults } from './extras/quick-note-results/QuickNoteResults';\n\n// Value accessor for the component (supports ngModel)\nconst QUICK_NOTE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => QuickNoteElement),\n multi: true,\n};\n\ndeclare const CKEDITOR: any;\n\n@Component({\n selector: 'novo-quick-note',\n providers: [QUICK_NOTE_VALUE_ACCESSOR],\n template: ' <div class=\"quick-note-wrapper\" #wrapper><textarea #host></textarea> <span #results></span></div> ',\n styleUrls: ['./QuickNote.scss'],\n standalone: false,\n})\nexport class QuickNoteElement extends OutsideClick implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('wrapper', { static: true })\n public wrapper: ElementRef;\n @ViewChild('host', { static: true })\n public host: ElementRef;\n @ViewChild('results', { read: ViewContainerRef, static: true })\n results: ViewContainerRef;\n\n @Input()\n config: any;\n @Input()\n startupFocus: boolean = false;\n @Input()\n placeholder: string;\n\n // Emitter for selects\n @Output()\n focus: EventEmitter<any> = new EventEmitter();\n @Output()\n blur: EventEmitter<any> = new EventEmitter();\n @Output()\n change: EventEmitter<any> = new EventEmitter();\n\n // The characters that the user enters in order to search for a person/thing to tag\n private resultsComponent: any;\n private quickNoteResults: any;\n private isTagging: boolean;\n private taggingMode: string;\n private model: any;\n private ckeInstance: any;\n private debounceTimeout: any;\n private placeholderVisible: boolean = false;\n private _placeholderElement: any = null;\n private _ckEditorFixRemoveListener?: () => void;\n\n private static TOOLBAR_HEIGHT = 40; // in pixels - configured by stylesheet\n\n private onModelChange: Function = () => {};\n private onModelTouched: Function = () => {};\n\n constructor(private zone: NgZone, element: ElementRef, private componentUtils: ComponentUtils) {\n super(element);\n // Bind to the active change event from the OutsideClick\n this.onActiveChange.subscribe((active) => {\n if (!active) {\n setTimeout(() => {\n this.hideResults();\n });\n }\n });\n }\n\n public ngOnInit(): void {\n // Make sure we have a proper config\n if (!this.config) {\n throw new Error('No config set for QuickNote!');\n }\n // Make sure that we have triggers\n if (!this.config.triggers) {\n throw new Error('QuickNote config must supply triggers!');\n }\n // Make sure that we have options\n if (!this.config.options) {\n throw new Error('QuickNote config must supply options!');\n }\n // Allow for callers to use a custom results template class in the config\n this.resultsComponent = this.config.resultsTemplate || QuickNoteResults;\n }\n\n public ngOnDestroy(): void {\n // Tear down the CKEditor instance\n if (this.ckeInstance) {\n this._ckEditorFixRemoveListener?.();\n this.ckeInstance.focusManager.blur(true); // Remove focus from editor\n setTimeout(() => {\n this.ckeInstance.removeAllListeners();\n CKEDITOR.instances[this.ckeInstance.name].destroy();\n this.ckeInstance.destroy();\n this.ckeInstance = null;\n });\n }\n }\n\n /**\n * Connect to key/mouse events from CKEditor after the editor has been initialized\n */\n public ngAfterViewInit(): void {\n if (!CKEDITOR) {\n console.error('Make sure to include CKEditor sources in your dependencies!');\n return;\n }\n\n // Replace the textarea with an instance of CKEditor\n this.ckeInstance = CKEDITOR.replace(this.host.nativeElement, this.getCKEditorConfig());\n fixCkEditorInputEvent(this.ckeInstance);\n\n // Set initial value of the note in the editor\n this.writeValue(this.model);\n\n // Connect to the key event in CKEditor for showing results dropdown\n this.ckeInstance.on('key', (event: any) => {\n if (!this.onKey(event.data.domEvent.$)) {\n event.cancel();\n }\n });\n\n // Connect to the change event in CKEditor for debouncing user modifications\n this.ckeInstance.on('change', () => {\n // Debounce update\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n // Run within the context of this angular element since we don't need to cancel event\n this.zone.run(() => {\n this.onValueChange();\n });\n this.debounceTimeout = null;\n }, 250);\n });\n\n // Propagate blur events from CKEditor to the Element's listeners\n this.ckeInstance.on('blur', (event: any) => {\n this.showPlaceholder();\n this.blur.emit(event);\n });\n\n // Propagate blur events from CKEditor to the Element's listeners\n this.ckeInstance.on('focus', (event: any) => {\n this.hidePlaceholder();\n this.focus.emit(event);\n });\n\n // Show placeholder if the note is empty, after the editor is instantiated\n this.ckeInstance.on('instanceReady', (event: any) => {\n this.showPlaceholder();\n // Set editor to readOnly\n if (this.config.readOnly) {\n this.ckeInstance.setReadOnly(this.config.readOnly);\n }\n });\n }\n\n // Set touched on blur\n public onTouched(event?: any) {\n this.onModelTouched();\n }\n\n /**\n * Handles setting the model and the view from the outside caller or the user's typing\n *\n * @param model A model that has a note (html content) and references (array of objects)\n */\n public writeValue(model: any): void {\n // Set value of the model\n if (model && (model.references || model.note)) {\n this.model = {\n note: model.note || '',\n references: model.references || {},\n };\n } else {\n this.model = {\n note: model,\n references: {},\n };\n }\n\n // Set the note html value in the editor\n if (this.ckeInstance) {\n this.ckeInstance.setData(this.model.note);\n }\n }\n\n public registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n public registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n /**\n * If a renderer is not provided, the QuickNote will default to using this one, an anchor tag with no href\n */\n private static defaultRenderer(symbol: string, item: any): string {\n return `<a>${symbol}${item.label}</a>`;\n }\n\n /**\n * Returns the renderer for a given tagging mode if it exists in the config, otherwise the default.\n */\n private getRenderer(taggingMode: string): any {\n return this.config.renderer ? this.config.renderer[taggingMode] : QuickNoteElement.defaultRenderer;\n }\n\n /**\n * Called every time a keystroke is made in the editor. Listens for particular keys (e.g. UP arrow, ESC, etc.)\n * to handle certain behaviors of the picker.\n *\n * Runs within the context of the CKEditor, so actions that affect the view have to be run back inside of the\n * Angular zone of this class.\n *\n * @param event The key press event\n * @return true to allow the event to occur, false to cancel the event\n */\n private onKey(event: KeyboardEvent): boolean {\n if (event.key) {\n if (this.quickNoteResults) {\n // Hide results on escape key\n if (event.key === Key.Escape) {\n this.zone.run(() => {\n this.hideResults();\n });\n return false;\n }\n\n // Navigation inside the results\n if (event.key === Key.ArrowUp) {\n this.zone.run(() => {\n this.quickNoteResults.instance.prevActiveMatch();\n });\n return false;\n }\n\n if (event.key === Key.ArrowDown) {\n this.zone.run(() => {\n this.quickNoteResults.instance.nextActiveMatch();\n });\n return false;\n }\n\n if (event.key === Key.Enter) {\n this.zone.run(() => {\n this.quickNoteResults.instance.selectActiveMatch();\n });\n return false;\n }\n } else {\n // Loop through all triggers and turn on tagging mode if the user just pressed a trigger character\n const triggers = this.config.triggers || {};\n Object.keys(triggers).forEach((key) => {\n const trigger = triggers[key] || {};\n if (event.key === trigger) {\n this.isTagging = true;\n this.taggingMode = key;\n }\n });\n }\n }\n return true;\n }\n\n /**\n * Debounced method that is run in the proper Angular context when the user has modified the CKEditor.\n * After the value has been updated in CKEditor, this will propagate that change to the model and listeners.\n */\n private onValueChange(): void {\n // Get the html text in CKEditor\n let value = this.ckeInstance.getData();\n\n // Remove empty 'ZERO WIDTH SPACE' characters that can get added erroneously by the editor\n const regex = new RegExp(String.fromCharCode(8203), 'g');\n value = value.replace(regex, '');\n\n // Make sure that any references in the model are still valid\n this.validateReferences();\n\n // Possibly show results if the user has entered a search term\n this.showResults();\n\n // Propagate change to ngModel for form validation, and send null if the note is empty\n let newModel = null;\n if (value) {\n newModel = {\n note: value,\n references: this.model.references,\n };\n }\n\n // Inform listeners to the ngModel change event that something has changed\n this.onModelChange(newModel);\n\n // Inform listeners of the `@Output() change` event that the model has been updated\n this.change.emit(newModel);\n\n // Inform listeners to the ngModel touched event that something has changed\n this.onTouched();\n }\n\n /**\n * Creates an instance of the results (called popup) and adds all the bindings to that instance.\n */\n private showResults(): void {\n if (this.isTagging) {\n const searchTerm = this.getSearchTerm();\n if (searchTerm.length) {\n // Update Matches\n if (this.quickNoteResults) {\n // Update existing list\n this.quickNoteResults.instance.term = {\n searchTerm,\n taggingMode: this.taggingMode,\n };\n } else {\n // Create the results DOM element\n this.quickNoteResults = this.componentUtils.append(this.resultsComponent, this.results);\n this.quickNoteResults.instance.parent = this;\n this.quickNoteResults.instance.config = this.config;\n this.quickNoteResults.instance.term = {\n searchTerm,\n taggingMode: this.taggingMode,\n };\n this.positionResultsDropdown();\n }\n } else if (this.quickNoteResults) {\n this.quickNoteResults.destroy();\n this.quickNoteResults = null;\n }\n\n // Tell the OutsideClick base class to start listening for an outside clicks\n this.toggleActive(null, true);\n }\n }\n\n /**\n * Deletes the picker results from the DOM.\n */\n private hideResults(): void {\n this.isTagging = false;\n if (this.quickNoteResults) {\n this.quickNoteResults.destroy();\n this.quickNoteResults = null;\n }\n }\n\n /**\n * Handles the selection from the QuickNoteResults Component. Called by the QuickNoteResults component on it's\n * parent (this element).\n *\n * @param taggingMode - type of tags we are looking for\n * @param selected - selected object from the picker that has a label and value\n */\n private onSelected(taggingMode: string, selected: any): void {\n // Turn off tagging\n this.isTagging = false;\n\n // Replace searchTerm with link\n const symbol = this.config.triggers[taggingMode];\n const renderer = this.getRenderer(taggingMode);\n const renderedText = renderer(symbol, selected);\n\n this.replaceWordAtCursor(renderedText);\n\n // Add the new reference, if it doesn't already exist\n this.model.references = this.model.references || {};\n this.model.references[taggingMode] = this.model.references[taggingMode] || [];\n const matchingItems = this.model.references[taggingMode].filter((item) => JSON.stringify(item) === JSON.stringify(selected));\n if (matchingItems.length === 0) {\n this.model.references[taggingMode].push(selected);\n }\n\n // Update the quick note with the changes due to the user's selection of an item in the dropdown\n this.onValueChange();\n }\n\n /**\n * Convenience method that gets the current word that the cursor is on, minus the tag.\n * Also, trims any whitespace before/after the term to aid in searching.\n */\n private getSearchTerm(): string {\n let word = this.getWordAtCursor().trim();\n if (this.isTagging) {\n const symbol = this.config.triggers[this.taggingMode];\n if (!word.includes(symbol)) {\n this.hideResults();\n return '';\n }\n word = word.slice(word.indexOf(symbol) + symbol.length);\n }\n return word;\n }\n\n /**\n * Gets the current word that the cursor is on CKEditor. Current word starts at the beginning of the line or a\n * tag character if we are in tagging mode. Current word ends at the end of the line or an empty space.\n *\n * @returns plain text string (removes all html formatting)\n */\n private getWordAtCursor(): string {\n const range = this.ckeInstance.getSelection().getRanges()[0];\n const start = range.startContainer;\n\n if (start.type === CKEDITOR.NODE_TEXT && range.startOffset) {\n const text = start.getText();\n const symbol = this.config.triggers[this.taggingMode];\n let wordStart = text.lastIndexOf(symbol, range.startOffset - 1);\n\n if (wordStart > 0) {\n const beforeSymbol: string = text.charAt(wordStart - 1);\n // We don't want to trigger the lookup call unless the symbol was preceded by whitespace\n if (beforeSymbol !== '\\u200B' && /\\S/.test(beforeSymbol)) {\n return '';\n }\n } else if (start.hasPrevious() && /\\S$/.test(start.getPrevious().getText())) {\n // When wordStart is <= 0, we need to check the previous node's text to see if it ended with whitespace or not\n return '';\n }\n\n let wordEnd = text.indexOf(' ', range.startOffset + 1);\n if (wordStart === -1) {\n wordStart = 0;\n }\n if (wordEnd === -1) {\n wordEnd = text.length;\n }\n\n return text.substring(wordStart, wordEnd);\n }\n\n // Selection starts at the 0 index of the text node or there's no previous text node in contents\n return '';\n }\n\n /**\n * Replaces the word that the user is on with the given html.\n *\n * CKEditor gives us access to the current line of html in the editor, so we replace the content of\n * the line, replacing only the current word.\n */\n private replaceWordAtCursor(newWord: string): void {\n const originalWord = this.getWordAtCursor().trim();\n const range = this.ckeInstance.getSelection().getRanges()[0];\n const start = range.startContainer;\n const parentNode = start.getParent();\n\n if (start.type === CKEDITOR.NODE_TEXT && parentNode) {\n const line = parentNode.getHtml();\n const index = line.lastIndexOf(originalWord);\n\n if (index >= 0) {\n // Add a space after the replaced word so that multiple references can be added back to back\n const newLine = line.substring(0, index) + newWord + ' ' + line.substring(index + originalWord.length);\n parentNode.setHtml(newLine);\n\n // Place selection at the end of the line\n range.moveToPosition(parentNode, CKEDITOR.POSITION_BEFORE_END);\n this.ckeInstance.getSelection().selectRanges([range]);\n }\n }\n }\n\n /**\n * Returns current references, minus any from the model that have been removed from the editor.\n */\n private validateReferences(): void {\n let html = this.ckeInstance.document.getBody().getHtml();\n\n // CKEditor stopped supporting the config.forceSimpleAmpersand setting, so we have to convert '&' to '&'\n // when we pull html from the editor - see: https://dev.ckeditor.com/ticket/13723\n const ampRegex = new RegExp('&', 'g');\n html = html.replace(ampRegex, '&');\n\n Object.keys(this.model.references).forEach((taggingMode) => {\n const array = this.model.references[taggingMode] || [];\n const symbol = this.config.triggers[taggingMode];\n const renderer = this.getRenderer(taggingMode);\n\n this.model.references[taggingMode] = array.filter((item) => {\n const renderedText = renderer(symbol, item);\n return html.includes(renderedText);\n });\n\n // If no references, then delete the key\n if (this.model.references[taggingMode].length === 0) {\n delete this.model.references[taggingMode];\n }\n });\n }\n\n /**\n * Configures the CKEditor for QuickNote functionality.\n *\n * Sets the height of the CKEditor dynamically to the height of the wrapper upon initialization.\n * Removes the toolbar on the bottom and configures a slimmed down version of the toolbar.\n * Removes plugins and turns off setting to allow browser based spell checking.\n */\n private getCKEditorConfig(): any {\n // Use the height of the wrapper element to set the initial height of the editor, then\n // set it to 100% to allow the editor to resize using the grippy.\n const editorHeight = this.wrapper.nativeElement.clientHeight - QuickNoteElement.TOOLBAR_HEIGHT;\n this.wrapper.nativeElement.style.setProperty('height', '100%');\n\n return {\n enterMode: CKEDITOR.ENTER_BR,\n shiftEnterMode: CKEDITOR.ENTER_P,\n disableNativeSpellChecker: false,\n height: editorHeight,\n startupFocus: this.startupFocus,\n removePlugins: 'liststyle,tabletools,contextmenu,tableselection', // allows browser based spell checking\n toolbar: [\n {\n name: 'basicstyles',\n items: [\n 'Styles',\n 'FontSize',\n 'Bold',\n 'Italic',\n 'Underline',\n 'TextColor',\n '-',\n 'NumberedList',\n 'BulletedList',\n 'Outdent',\n 'Indent',\n 'Link',\n ],\n },\n ],\n };\n }\n\n /**\n * Returns the current screen position of the cursor in CKEditor, accounting for any scrolling in the editor.\n */\n private getCursorPosition(): any {\n const range = this.ckeInstance.getSelection().getRanges()[0];\n const parentElement = range.startContainer.$.parentElement;\n const editorElement = this.ckeInstance.editable().$;\n\n // Since the editor is a text node in the DOM that does not know about it's position, a temporary element has to\n // be inserted in order to locate the cursor position.\n const cursorElement = document.createElement('img');\n cursorElement.setAttribute('src', 'null');\n cursorElement.setAttribute('width', '0');\n cursorElement.setAttribute('height', '0');\n\n parentElement.appendChild(cursorElement);\n const cursorPosition = {\n top: cursorElement.offsetTop - editorElement.scrollTop,\n left: cursorElement.offsetLeft - editorElement.scrollLeft,\n };\n cursorElement.remove();\n\n return cursorPosition;\n }\n\n /**\n * Positions the results dropdown based on the location of the cursor in the text field\n */\n private positionResultsDropdown(): void {\n const MIN_MARGIN_TOP: number = QuickNoteElement.TOOLBAR_HEIGHT * 2;\n const MAX_MARGIN_TOP: number = this.getContentHeight() + QuickNoteElement.TOOLBAR_HEIGHT;\n\n const cursorPosition = this.getCursorPosition();\n let marginTop: number = cursorPosition.top + QuickNoteElement.TOOLBAR_HEIGHT;\n\n // Check that the margin is within the visible bounds\n marginTop = Math.max(marginTop, MIN_MARGIN_TOP);\n marginTop = Math.min(marginTop, MAX_MARGIN_TOP);\n\n // Set the margin-top of the dropdown\n this.quickNoteResults.instance.element.nativeElement.style.setProperty('margin-top', marginTop + 'px');\n }\n\n /**\n * Returns the height in pixels of the content area - the text that the user has entered.\n */\n private getContentHeight(): number {\n let contentHeight: number = 0;\n if (\n this.ckeInstance.ui &&\n this.ckeInstance.ui.contentsElement &&\n this.ckeInstance.ui.contentsElement.$ &&\n this.ckeInstance.ui.contentsElement.$.style\n ) {\n const cssText: string = this.ckeInstance.ui.contentsElement.$.style.cssText;\n if (cssText.indexOf('height: ') !== -1) {\n let height: string = cssText.split('height: ')[1];\n height = height.split('px')[0];\n contentHeight = parseInt(height, 10);\n }\n }\n return contentHeight;\n }\n\n /**\n * Show the placeholder text if the editor is empty\n */\n private showPlaceholder(): void {\n if (!this.ckeInstance.getData() && !this.startupFocus) {\n this.ckeInstance.editable().getParent().$.appendChild(this.placeholderElement);\n this.placeholderVisible = true;\n }\n }\n\n /**\n * Hide the placeholder text by removing the placeholder element from the DOM\n */\n private hidePlaceholder(): void {\n if (this.placeholderVisible) {\n this.ckeInstance.editable().getParent().$.removeChild(this.placeholderElement);\n this.placeholderVisible = false;\n }\n }\n\n /**\n * Get or create the single placeholder object that is constructed only when needed.\n */\n private get placeholderElement(): any {\n if (!this._placeholderElement) {\n this._placeholderElement = document.createElement('div');\n this._placeholderElement.className = 'placeholder';\n this._placeholderElement.style.cssText =\n 'margin: 20px; color: #AAAAAA; font-family: sans-serif; font-size: 13px; line-height: 20px; position: absolute; top: 0; pointer-events: none';\n this._placeholderElement.textContent = this.placeholder;\n }\n return this._placeholderElement;\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoPipesModule } from 'novo-elements/pipes';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { QuickNoteResults } from './extras/quick-note-results/QuickNoteResults';\nimport { QuickNoteElement } from './QuickNote';\n\n@NgModule({\n imports: [CommonModule, FormsModule, NovoLoadingModule, NovoListModule, NovoPipesModule],\n declarations: [QuickNoteElement, QuickNoteResults],\n exports: [QuickNoteElement, QuickNoteResults],\n})\nexport class NovoQuickNoteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"novo-elements-elements-quick-note.mjs","sources":["../../../projects/novo-elements/src/elements/quick-note/extras/quick-note-results/QuickNoteResults.ts","../../../projects/novo-elements/src/elements/quick-note/QuickNote.ts","../../../projects/novo-elements/src/elements/quick-note/QuickNote.module.ts","../../../projects/novo-elements/src/elements/quick-note/novo-elements-elements-quick-note.ts"],"sourcesContent":["// NG2\nimport { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\n// Vendor\nimport { from, Observable } from 'rxjs';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { PickerResults } from 'novo-elements/elements/picker';\n\n@Component({\n selector: 'quick-note-results',\n host: {\n class: 'active',\n },\n template: `\n <novo-loading theme=\"line\" *ngIf=\"isLoading && !matches.length\"></novo-loading>\n <novo-list *ngIf=\"matches.length > 0\">\n <novo-list-item\n *ngFor=\"let match of matches\"\n (click)=\"selectMatch($event)\"\n [class.active]=\"match === activeMatch\"\n (mouseenter)=\"selectActive(match)\"\n >\n <item-content>\n <p [innerHtml]=\"match.label | highlight:term\"></p>\n </item-content>\n </novo-list-item>\n </novo-list>\n <p class=\"picker-error\" *ngIf=\"hasError\">{{ labels.quickNoteError }}</p>\n <p class=\"picker-null\" *ngIf=\"!isLoading && !matches.length && !hasError\">{{ labels.quickNoteEmpty }}</p>\n `,\n styleUrls: ['./QuickNoteResults.scss'],\n standalone: false,\n})\nexport class QuickNoteResults extends PickerResults {\n // Mode that the quick note is in for tagging\n taggingMode: string = '';\n\n constructor(element: ElementRef, public labels: NovoLabelService, ref: ChangeDetectorRef) {\n super(element, labels, ref);\n }\n\n get term() {\n return this._term;\n }\n\n set term(value: any) {\n this._term = value.searchTerm;\n this.taggingMode = value.taggingMode;\n this.hasError = false;\n this.isLoading = true;\n this.search(value, this.taggingMode).subscribe(\n (results) => {\n this.matches = this.isStatic ? this.filterData(results) : results;\n this.isLoading = false;\n },\n () => {\n this.hasError = true;\n this.isLoading = false;\n },\n );\n }\n\n search(term: string, taggingMode): Observable<any> {\n const searchCall = this.config.options[taggingMode];\n return from(\n new Promise((resolve, reject) => {\n // Check if there is match data\n if (searchCall) {\n // Resolve the data\n if (Array.isArray(searchCall)) {\n this.isStatic = true;\n // Arrays are returned immediately\n resolve(this.structureArray(searchCall));\n } else if (\n (searchCall.hasOwnProperty('reject') && searchCall.hasOwnProperty('resolve')) ||\n Object.getPrototypeOf(searchCall).hasOwnProperty('then')\n ) {\n this.isStatic = false;\n // Promises (ES6 or Deferred) are resolved whenever they resolve\n searchCall.then(this.structureArray.bind(this)).then(resolve, reject);\n } else if (typeof searchCall === 'function') {\n this.isStatic = false;\n // Promises (ES6 or Deferred) are resolved whenever they resolve\n searchCall(term).then(this.structureArray.bind(this)).then(resolve, reject);\n } else {\n // All other kinds of data are rejected\n reject('The data provided is not an array or a promise');\n throw new Error('The data provided is not an array or a promise');\n }\n } else {\n // No data gets rejected\n reject('error');\n }\n }),\n );\n }\n\n /**\n * @name structureArray\n * @param collection - the data once getData resolves it\n *\n * @description This function structures an array of nodes into an array of objects with a\n * 'name' field by default.\n */\n structureArray(collection: Array<any>) {\n if (collection && (typeof collection[0] === 'string' || typeof collection[0] === 'number')) {\n return collection.map((item) => {\n return {\n value: item,\n label: item,\n };\n });\n }\n return collection.map((data) => {\n const value = this.config.field ? data[this.config.field[this.taggingMode]] : data.value || data;\n const label = this.config.format ? Helpers.interpolate(this.config.format[this.taggingMode], data) : data.label || String(value);\n return { value, label, data };\n });\n }\n\n /**\n * @name selectMatch\n * @param event\n *\n * @description\n */\n selectMatch(event: KeyboardEvent) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n const selected = this.activeMatch;\n if (selected) {\n this.parent.onSelected(this.taggingMode, selected);\n this.parent.hideResults();\n }\n return false;\n }\n}\n","// NG2\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ComponentUtils } from 'novo-elements/services';\nimport { Key, OutsideClick, fixCkEditorInputEvent } from 'novo-elements/utils';\n// APP\nimport { QuickNoteResults } from './extras/quick-note-results/QuickNoteResults';\n\n// Value accessor for the component (supports ngModel)\nconst QUICK_NOTE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => QuickNoteElement),\n multi: true,\n};\n\ndeclare const CKEDITOR: any;\n\n@Component({\n selector: 'novo-quick-note',\n providers: [QUICK_NOTE_VALUE_ACCESSOR],\n template: ' <div class=\"quick-note-wrapper\" #wrapper><textarea #host></textarea> <span #results></span></div> ',\n styleUrls: ['./QuickNote.scss'],\n standalone: false,\n})\nexport class QuickNoteElement extends OutsideClick implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('wrapper', { static: true })\n public wrapper: ElementRef;\n @ViewChild('host', { static: true })\n public host: ElementRef;\n @ViewChild('results', { read: ViewContainerRef, static: true })\n results: ViewContainerRef;\n\n @Input()\n config: any;\n @Input()\n startupFocus: boolean = false;\n @Input()\n placeholder: string;\n\n // Emitter for selects\n @Output()\n focus: EventEmitter<any> = new EventEmitter();\n @Output()\n blur: EventEmitter<any> = new EventEmitter();\n @Output()\n change: EventEmitter<any> = new EventEmitter();\n\n // The characters that the user enters in order to search for a person/thing to tag\n private resultsComponent: any;\n private quickNoteResults: any;\n private isTagging: boolean;\n private taggingMode: string;\n private model: any;\n private ckeInstance: any;\n private debounceTimeout: any;\n private placeholderVisible: boolean = false;\n private _placeholderElement: any = null;\n private _ckEditorFixRemoveListener?: () => void;\n\n private static TOOLBAR_HEIGHT = 40; // in pixels - configured by stylesheet\n\n private onModelChange: Function = () => {};\n private onModelTouched: Function = () => {};\n\n constructor(private zone: NgZone, element: ElementRef, private componentUtils: ComponentUtils) {\n super(element);\n // Bind to the active change event from the OutsideClick\n this.onActiveChange.subscribe((active) => {\n if (!active) {\n setTimeout(() => {\n this.hideResults();\n });\n }\n });\n }\n\n public ngOnInit(): void {\n // Make sure we have a proper config\n if (!this.config) {\n throw new Error('No config set for QuickNote!');\n }\n // Make sure that we have triggers\n if (!this.config.triggers) {\n throw new Error('QuickNote config must supply triggers!');\n }\n // Make sure that we have options\n if (!this.config.options) {\n throw new Error('QuickNote config must supply options!');\n }\n // Allow for callers to use a custom results template class in the config\n this.resultsComponent = this.config.resultsTemplate || QuickNoteResults;\n }\n\n public ngOnDestroy(): void {\n // Tear down the CKEditor instance\n if (this.ckeInstance) {\n this._ckEditorFixRemoveListener?.();\n this.ckeInstance.focusManager.blur(true); // Remove focus from editor\n setTimeout(() => {\n this.ckeInstance.removeAllListeners();\n CKEDITOR.instances[this.ckeInstance.name].destroy();\n this.ckeInstance.destroy();\n this.ckeInstance = null;\n });\n }\n }\n\n /**\n * Connect to key/mouse events from CKEditor after the editor has been initialized\n */\n public ngAfterViewInit(): void {\n if (!CKEDITOR) {\n console.error('Make sure to include CKEditor sources in your dependencies!');\n return;\n }\n\n // Replace the textarea with an instance of CKEditor\n this.ckeInstance = CKEDITOR.replace(this.host.nativeElement, this.getCKEditorConfig());\n fixCkEditorInputEvent(this.ckeInstance);\n\n // Set initial value of the note in the editor\n this.writeValue(this.model);\n\n // Connect to the key event in CKEditor for showing results dropdown\n this.ckeInstance.on('key', (event: any) => {\n if (!this.onKey(event.data.domEvent.$)) {\n event.cancel();\n }\n });\n\n // Connect to the change event in CKEditor for debouncing user modifications\n this.ckeInstance.on('change', () => {\n // Debounce update\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n // Run within the context of this angular element since we don't need to cancel event\n this.zone.run(() => {\n this.onValueChange();\n });\n this.debounceTimeout = null;\n }, 250);\n });\n\n // Propagate blur events from CKEditor to the Element's listeners\n this.ckeInstance.on('blur', (event: any) => {\n this.showPlaceholder();\n this.blur.emit(event);\n });\n\n // Propagate blur events from CKEditor to the Element's listeners\n this.ckeInstance.on('focus', (event: any) => {\n this.hidePlaceholder();\n this.focus.emit(event);\n });\n\n // Show placeholder if the note is empty, after the editor is instantiated\n this.ckeInstance.on('instanceReady', (event: any) => {\n this.showPlaceholder();\n // Set editor to readOnly\n if (this.config.readOnly) {\n this.ckeInstance.setReadOnly(this.config.readOnly);\n }\n });\n }\n\n // Set touched on blur\n public onTouched(event?: any) {\n this.onModelTouched();\n }\n\n /**\n * Handles setting the model and the view from the outside caller or the user's typing\n *\n * @param model A model that has a note (html content) and references (array of objects)\n */\n public writeValue(model: any): void {\n // Set value of the model\n if (model && (model.references || model.note)) {\n this.model = {\n note: model.note || '',\n references: model.references || {},\n };\n } else {\n this.model = {\n note: model,\n references: {},\n };\n }\n\n // Set the note html value in the editor\n if (this.ckeInstance) {\n this.ckeInstance.setData(this.model.note);\n }\n }\n\n public registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n public registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n /**\n * If a renderer is not provided, the QuickNote will default to using this one, an anchor tag with no href\n */\n private static defaultRenderer(symbol: string, item: any): string {\n return `<a>${symbol}${item.label}</a>`;\n }\n\n /**\n * Returns the renderer for a given tagging mode if it exists in the config, otherwise the default.\n */\n private getRenderer(taggingMode: string): any {\n return this.config.renderer ? this.config.renderer[taggingMode] : QuickNoteElement.defaultRenderer;\n }\n\n /**\n * Called every time a keystroke is made in the editor. Listens for particular keys (e.g. UP arrow, ESC, etc.)\n * to handle certain behaviors of the picker.\n *\n * Runs within the context of the CKEditor, so actions that affect the view have to be run back inside of the\n * Angular zone of this class.\n *\n * @param event The key press event\n * @return true to allow the event to occur, false to cancel the event\n */\n private onKey(event: KeyboardEvent): boolean {\n if (event.key) {\n if (this.quickNoteResults) {\n // Hide results on escape key\n if (event.key === Key.Escape) {\n this.zone.run(() => {\n this.hideResults();\n });\n return false;\n }\n\n // Navigation inside the results\n if (event.key === Key.ArrowUp) {\n this.zone.run(() => {\n this.quickNoteResults.instance.prevActiveMatch();\n });\n return false;\n }\n\n if (event.key === Key.ArrowDown) {\n this.zone.run(() => {\n this.quickNoteResults.instance.nextActiveMatch();\n });\n return false;\n }\n\n if (event.key === Key.Enter) {\n this.zone.run(() => {\n this.quickNoteResults.instance.selectActiveMatch();\n });\n return false;\n }\n } else {\n // Loop through all triggers and turn on tagging mode if the user just pressed a trigger character\n const triggers = this.config.triggers || {};\n Object.keys(triggers).forEach((key) => {\n const trigger = triggers[key] || {};\n if (event.key === trigger) {\n this.isTagging = true;\n this.taggingMode = key;\n }\n });\n }\n }\n return true;\n }\n\n /**\n * Debounced method that is run in the proper Angular context when the user has modified the CKEditor.\n * After the value has been updated in CKEditor, this will propagate that change to the model and listeners.\n */\n private onValueChange(): void {\n // Get the html text in CKEditor\n let value = this.ckeInstance.getData();\n\n // Remove empty 'ZERO WIDTH SPACE' characters that can get added erroneously by the editor\n const regex = new RegExp(String.fromCharCode(8203), 'g');\n value = value.replace(regex, '');\n\n // Make sure that any references in the model are still valid\n this.validateReferences();\n\n // Possibly show results if the user has entered a search term\n this.showResults();\n\n // Propagate change to ngModel for form validation, and send null if the note is empty\n let newModel = null;\n if (value) {\n newModel = {\n note: value,\n references: this.model.references,\n };\n }\n\n // Inform listeners to the ngModel change event that something has changed\n this.onModelChange(newModel);\n\n // Inform listeners of the `@Output() change` event that the model has been updated\n this.change.emit(newModel);\n\n // Inform listeners to the ngModel touched event that something has changed\n this.onTouched();\n }\n\n /**\n * Creates an instance of the results (called popup) and adds all the bindings to that instance.\n */\n private showResults(): void {\n if (this.isTagging) {\n const searchTerm = this.getSearchTerm();\n if (searchTerm.length) {\n // Update Matches\n if (this.quickNoteResults) {\n // Update existing list\n this.quickNoteResults.instance.term = {\n searchTerm,\n taggingMode: this.taggingMode,\n };\n } else {\n // Create the results DOM element\n this.quickNoteResults = this.componentUtils.append(this.resultsComponent, this.results);\n this.quickNoteResults.instance.parent = this;\n this.quickNoteResults.instance.config = this.config;\n this.quickNoteResults.instance.term = {\n searchTerm,\n taggingMode: this.taggingMode,\n };\n this.positionResultsDropdown();\n }\n } else if (this.quickNoteResults) {\n this.quickNoteResults.destroy();\n this.quickNoteResults = null;\n }\n\n // Tell the OutsideClick base class to start listening for an outside clicks\n this.toggleActive(null, true);\n }\n }\n\n /**\n * Deletes the picker results from the DOM.\n */\n private hideResults(): void {\n this.isTagging = false;\n if (this.quickNoteResults) {\n this.quickNoteResults.destroy();\n this.quickNoteResults = null;\n }\n }\n\n /**\n * Handles the selection from the QuickNoteResults Component. Called by the QuickNoteResults component on it's\n * parent (this element).\n *\n * @param taggingMode - type of tags we are looking for\n * @param selected - selected object from the picker that has a label and value\n */\n private onSelected(taggingMode: string, selected: any): void {\n // Turn off tagging\n this.isTagging = false;\n\n // Replace searchTerm with link\n const symbol = this.config.triggers[taggingMode];\n const renderer = this.getRenderer(taggingMode);\n const renderedText = renderer(symbol, selected);\n\n this.replaceWordAtCursor(renderedText);\n\n // Add the new reference, if it doesn't already exist\n this.model.references = this.model.references || {};\n this.model.references[taggingMode] = this.model.references[taggingMode] || [];\n const matchingItems = this.model.references[taggingMode].filter((item) => JSON.stringify(item) === JSON.stringify(selected));\n if (matchingItems.length === 0) {\n this.model.references[taggingMode].push(selected);\n }\n\n // Update the quick note with the changes due to the user's selection of an item in the dropdown\n this.onValueChange();\n }\n\n /**\n * Convenience method that gets the current word that the cursor is on, minus the tag.\n * Also, trims any whitespace before/after the term to aid in searching.\n */\n private getSearchTerm(): string {\n let word = this.getWordAtCursor().trim();\n if (this.isTagging) {\n const symbol = this.config.triggers[this.taggingMode];\n if (!word.includes(symbol)) {\n this.hideResults();\n return '';\n }\n word = word.slice(word.indexOf(symbol) + symbol.length);\n }\n return word;\n }\n\n /**\n * Gets the current word that the cursor is on CKEditor. Current word starts at the beginning of the line or a\n * tag character if we are in tagging mode. Current word ends at the end of the line or an empty space.\n *\n * @returns plain text string (removes all html formatting)\n */\n private getWordAtCursor(): string {\n const range = this.ckeInstance.getSelection().getRanges()[0];\n const start = range.startContainer;\n\n if (start.type === CKEDITOR.NODE_TEXT && range.startOffset) {\n const text = start.getText();\n const symbol = this.config.triggers[this.taggingMode];\n let wordStart = text.lastIndexOf(symbol, range.startOffset - 1);\n\n if (wordStart > 0) {\n const beforeSymbol: string = text.charAt(wordStart - 1);\n // We don't want to trigger the lookup call unless the symbol was preceded by whitespace\n if (beforeSymbol !== '\\u200B' && /\\S/.test(beforeSymbol)) {\n return '';\n }\n } else if (start.hasPrevious() && /\\S$/.test(start.getPrevious().getText())) {\n // When wordStart is <= 0, we need to check the previous node's text to see if it ended with whitespace or not\n return '';\n }\n\n let wordEnd = text.indexOf(' ', range.startOffset + 1);\n if (wordStart === -1) {\n wordStart = 0;\n }\n if (wordEnd === -1) {\n wordEnd = text.length;\n }\n\n return text.substring(wordStart, wordEnd);\n }\n\n // Selection starts at the 0 index of the text node or there's no previous text node in contents\n return '';\n }\n\n /**\n * Replaces the word that the user is on with the given html.\n *\n * CKEditor gives us access to the current line of html in the editor, so we replace the content of\n * the line, replacing only the current word.\n */\n private replaceWordAtCursor(newWord: string): void {\n const originalWord = this.getWordAtCursor().trim();\n const range = this.ckeInstance.getSelection().getRanges()[0];\n const start = range.startContainer;\n const parentNode = start.getParent();\n\n if (start.type === CKEDITOR.NODE_TEXT && parentNode) {\n const line = parentNode.getHtml();\n const index = line.lastIndexOf(originalWord);\n\n if (index >= 0) {\n // Add a space after the replaced word so that multiple references can be added back to back\n const newLine = line.substring(0, index) + newWord + ' ' + line.substring(index + originalWord.length);\n parentNode.setHtml(newLine);\n\n // Place selection at the end of the line\n range.moveToPosition(parentNode, CKEDITOR.POSITION_BEFORE_END);\n this.ckeInstance.getSelection().selectRanges([range]);\n }\n }\n }\n\n /**\n * Returns current references, minus any from the model that have been removed from the editor.\n */\n private validateReferences(): void {\n let html = this.ckeInstance.document.getBody().getHtml();\n\n // CKEditor stopped supporting the config.forceSimpleAmpersand setting, so we have to convert '&' to '&'\n // when we pull html from the editor - see: https://dev.ckeditor.com/ticket/13723\n const ampRegex = new RegExp('&', 'g');\n html = html.replace(ampRegex, '&');\n\n Object.keys(this.model.references).forEach((taggingMode) => {\n const array = this.model.references[taggingMode] || [];\n const symbol = this.config.triggers[taggingMode];\n const renderer = this.getRenderer(taggingMode);\n\n this.model.references[taggingMode] = array.filter((item) => {\n const renderedText = renderer(symbol, item);\n return html.includes(renderedText);\n });\n\n // If no references, then delete the key\n if (this.model.references[taggingMode].length === 0) {\n delete this.model.references[taggingMode];\n }\n });\n }\n\n /**\n * Configures the CKEditor for QuickNote functionality.\n *\n * Sets the height of the CKEditor dynamically to the height of the wrapper upon initialization.\n * Removes the toolbar on the bottom and configures a slimmed down version of the toolbar.\n * Removes plugins and turns off setting to allow browser based spell checking.\n */\n private getCKEditorConfig(): any {\n // Use the height of the wrapper element to set the initial height of the editor, then\n // set it to 100% to allow the editor to resize using the grippy.\n const editorHeight = this.wrapper.nativeElement.clientHeight - QuickNoteElement.TOOLBAR_HEIGHT;\n this.wrapper.nativeElement.style.setProperty('height', '100%');\n\n return {\n enterMode: CKEDITOR.ENTER_BR,\n shiftEnterMode: CKEDITOR.ENTER_P,\n disableNativeSpellChecker: false,\n height: editorHeight,\n startupFocus: this.startupFocus,\n removePlugins: 'liststyle,tabletools,contextmenu,tableselection', // allows browser based spell checking\n toolbar: [\n {\n name: 'basicstyles',\n items: [\n 'Styles',\n 'FontSize',\n 'Bold',\n 'Italic',\n 'Underline',\n 'TextColor',\n '-',\n 'NumberedList',\n 'BulletedList',\n 'Outdent',\n 'Indent',\n 'Link',\n ],\n },\n ],\n };\n }\n\n /**\n * Returns the current screen position of the cursor in CKEditor, accounting for any scrolling in the editor.\n */\n private getCursorPosition(): any {\n const range = this.ckeInstance.getSelection().getRanges()[0];\n const parentElement = range.startContainer.$.parentElement;\n const editorElement = this.ckeInstance.editable().$;\n\n // Since the editor is a text node in the DOM that does not know about it's position, a temporary element has to\n // be inserted in order to locate the cursor position.\n const cursorElement = document.createElement('img');\n cursorElement.setAttribute('src', 'null');\n cursorElement.setAttribute('width', '0');\n cursorElement.setAttribute('height', '0');\n\n parentElement.appendChild(cursorElement);\n const cursorPosition = {\n top: cursorElement.offsetTop - editorElement.scrollTop,\n left: cursorElement.offsetLeft - editorElement.scrollLeft,\n };\n cursorElement.remove();\n\n return cursorPosition;\n }\n\n /**\n * Positions the results dropdown based on the location of the cursor in the text field\n */\n private positionResultsDropdown(): void {\n const MIN_MARGIN_TOP: number = QuickNoteElement.TOOLBAR_HEIGHT * 2;\n const MAX_MARGIN_TOP: number = this.getContentHeight() + QuickNoteElement.TOOLBAR_HEIGHT;\n\n const cursorPosition = this.getCursorPosition();\n let marginTop: number = cursorPosition.top + QuickNoteElement.TOOLBAR_HEIGHT;\n\n // Check that the margin is within the visible bounds\n marginTop = Math.max(marginTop, MIN_MARGIN_TOP);\n marginTop = Math.min(marginTop, MAX_MARGIN_TOP);\n\n // Set the margin-top of the dropdown\n this.quickNoteResults.instance.element.nativeElement.style.setProperty('margin-top', marginTop + 'px');\n }\n\n /**\n * Returns the height in pixels of the content area - the text that the user has entered.\n */\n private getContentHeight(): number {\n let contentHeight: number = 0;\n if (\n this.ckeInstance.ui &&\n this.ckeInstance.ui.contentsElement &&\n this.ckeInstance.ui.contentsElement.$ &&\n this.ckeInstance.ui.contentsElement.$.style\n ) {\n const cssText: string = this.ckeInstance.ui.contentsElement.$.style.cssText;\n if (cssText.indexOf('height: ') !== -1) {\n let height: string = cssText.split('height: ')[1];\n height = height.split('px')[0];\n contentHeight = parseInt(height, 10);\n }\n }\n return contentHeight;\n }\n\n /**\n * Show the placeholder text if the editor is empty\n */\n private showPlaceholder(): void {\n if (!this.ckeInstance.getData() && !this.startupFocus) {\n this.ckeInstance.editable().getParent().$.appendChild(this.placeholderElement);\n this.placeholderVisible = true;\n }\n }\n\n /**\n * Hide the placeholder text by removing the placeholder element from the DOM\n */\n private hidePlaceholder(): void {\n if (this.placeholderVisible) {\n this.ckeInstance.editable().getParent().$.removeChild(this.placeholderElement);\n this.placeholderVisible = false;\n }\n }\n\n /**\n * Get or create the single placeholder object that is constructed only when needed.\n */\n private get placeholderElement(): any {\n if (!this._placeholderElement) {\n this._placeholderElement = document.createElement('div');\n this._placeholderElement.className = 'placeholder';\n this._placeholderElement.style.cssText =\n 'margin: 20px; color: #AAAAAA; font-family: sans-serif; font-size: 13px; line-height: 20px; position: absolute; top: 0; pointer-events: none';\n this._placeholderElement.textContent = this.placeholder;\n }\n return this._placeholderElement;\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoPipesModule } from 'novo-elements/pipes';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { QuickNoteResults } from './extras/quick-note-results/QuickNoteResults';\nimport { QuickNoteElement } from './QuickNote';\n\n@NgModule({\n imports: [CommonModule, FormsModule, NovoLoadingModule, NovoListModule, NovoPipesModule],\n declarations: [QuickNoteElement, QuickNoteResults],\n exports: [QuickNoteElement, QuickNoteResults],\n})\nexport class NovoQuickNoteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;AAkCM,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AAIjD,IAAA,WAAA,CAAY,OAAmB,EAAS,MAAwB,EAAE,GAAsB,EAAA;AACtF,QAAA,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;QADW,IAAA,CAAA,MAAM,GAAN,MAAM;;QAF9C,IAAA,CAAA,WAAW,GAAW,EAAE;IAIxB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,IAAI,IAAI,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,CAC5C,CAAC,OAAO,KAAI;AACV,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO;AACjE,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB,CAAC,EACD,MAAK;AACH,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CACF;IACH;IAEA,MAAM,CAAC,IAAY,EAAE,WAAW,EAAA;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QACnD,OAAO,IAAI,CACT,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;YAE9B,IAAI,UAAU,EAAE;;AAEd,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC7B,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;;oBAEpB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC1C;AAAO,qBAAA,IACL,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC;oBAC5E,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,EACxD;AACA,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAErB,oBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;gBACvE;AAAO,qBAAA,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AAC3C,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;oBAErB,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;gBAC7E;qBAAO;;oBAEL,MAAM,CAAC,gDAAgD,CAAC;AACxD,oBAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;gBACnE;YACF;iBAAO;;gBAEL,MAAM,CAAC,OAAO,CAAC;YACjB;QACF,CAAC,CAAC,CACH;IACH;AAEA;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,UAAsB,EAAA;QACnC,IAAI,UAAU,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE;AAC1F,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBAC7B,OAAO;AACL,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,KAAK,EAAE,IAAI;iBACZ;AACH,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI;AAChG,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;AAChI,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC9B,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;QACxB;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;QACjC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;AAClD,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QAC3B;AACA,QAAA,OAAO,KAAK;IACd;+GAzGW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBf;;;;;;;;;;;;;;;;AAgBX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2SAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAzB5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,IAAA,EACxB;AACF,wBAAA,KAAK,EAAE,QAAQ;qBAClB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;AAgBX,EAAA,CAAA,EAAA,UAAA,EAEa,KAAK,EAAA,MAAA,EAAA,CAAA,2SAAA,CAAA,EAAA;;;AChCrB;AAqBA;AACA,MAAM,yBAAyB,GAAG;AAChC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;AAC/C,IAAA,KAAK,EAAE,IAAI;CACZ;AAWK,MAAO,gBAAiB,SAAQ,YAAY,CAAA;AAmCjC,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG,EAAE,CAAC;AAKnC,IAAA,WAAA,CAAoB,IAAY,EAAE,OAAmB,EAAU,cAA8B,EAAA;QAC3F,KAAK,CAAC,OAAO,CAAC;QADI,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAuC,IAAA,CAAA,cAAc,GAAd,cAAc;QA7B7E,IAAA,CAAA,YAAY,GAAY,KAAK;;AAM7B,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAE;AAE7C,QAAA,IAAA,CAAA,IAAI,GAAsB,IAAI,YAAY,EAAE;AAE5C,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;QAUtC,IAAA,CAAA,kBAAkB,GAAY,KAAK;QACnC,IAAA,CAAA,mBAAmB,GAAQ,IAAI;AAK/B,QAAA,IAAA,CAAA,aAAa,GAAa,MAAK,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,cAAc,GAAa,MAAK,EAAE,CAAC;;QAKzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACvC,IAAI,CAAC,MAAM,EAAE;gBACX,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;IAEO,QAAQ,GAAA;;AAEb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACxB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC1D;;QAEA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,gBAAgB;IACzE;IAEO,WAAW,GAAA;;AAEhB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,0BAA0B,IAAI;YACnC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;AACrC,gBAAA,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AACnD,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACzB,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC;YAC5E;QACF;;AAGA,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACtF,QAAA,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGvC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;QAG3B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAU,KAAI;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBACtC,KAAK,CAAC,MAAM,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;;AAEjC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;YACpC;AACA,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;;AAErC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;oBACjB,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B,CAAC,EAAE,GAAG,CAAC;AACT,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,KAAI;YACzC,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,KAAI;YAC1C,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAU,KAAI;YAClD,IAAI,CAAC,eAAe,EAAE;;AAEtB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACxB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpD;AACF,QAAA,CAAC,CAAC;IACJ;;AAGO,IAAA,SAAS,CAAC,KAAW,EAAA;QAC1B,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA;;;;AAIG;AACI,IAAA,UAAU,CAAC,KAAU,EAAA;;AAE1B,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAI,CAAC,KAAK,GAAG;AACX,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;AACtB,gBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;aACnC;QACH;aAAO;YACL,IAAI,CAAC,KAAK,GAAG;AACX,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,UAAU,EAAE,EAAE;aACf;QACH;;AAGA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3C;IACF;AAEO,IAAA,gBAAgB,CAAC,EAAY,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IACzB;AAEO,IAAA,iBAAiB,CAAC,EAAY,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC1B;AAEA;;AAEG;AACK,IAAA,OAAO,eAAe,CAAC,MAAc,EAAE,IAAS,EAAA;AACtD,QAAA,OAAO,MAAM,MAAM,CAAA,EAAG,IAAI,CAAC,KAAK,MAAM;IACxC;AAEA;;AAEG;AACK,IAAA,WAAW,CAAC,WAAmB,EAAA;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAC,eAAe;IACpG;AAEA;;;;;;;;;AASG;AACK,IAAA,KAAK,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,KAAK,CAAC,GAAG,EAAE;AACb,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;;AAEzB,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAA,QAAA,mBAAiB;AAC5B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;wBACjB,IAAI,CAAC,WAAW,EAAE;AACpB,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,KAAK;gBACd;;AAGA,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAA,SAAA,oBAAkB;AAC7B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE;AAClD,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAA,WAAA,sBAAoB;AAC/B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE;AAClD,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,KAAK;gBACd;AAEA,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAA,OAAA,kBAAgB;AAC3B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACpD,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,KAAK;gBACd;YACF;iBAAO;;gBAEL,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;gBAC3C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;AACnC,oBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACzB,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,wBAAA,IAAI,CAAC,WAAW,GAAG,GAAG;oBACxB;AACF,gBAAA,CAAC,CAAC;YACJ;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;IACK,aAAa,GAAA;;QAEnB,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;;AAGtC,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QACxD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;QAGhC,IAAI,CAAC,kBAAkB,EAAE;;QAGzB,IAAI,CAAC,WAAW,EAAE;;QAGlB,IAAI,QAAQ,GAAG,IAAI;QACnB,IAAI,KAAK,EAAE;AACT,YAAA,QAAQ,GAAG;AACT,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;aAClC;QACH;;AAGA,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;;AAG5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;;QAG1B,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,UAAU,CAAC,MAAM,EAAE;;AAErB,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;;AAEzB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,GAAG;wBACpC,UAAU;wBACV,WAAW,EAAE,IAAI,CAAC,WAAW;qBAC9B;gBACH;qBAAO;;AAEL,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC;oBACvF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI;oBAC5C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACnD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,GAAG;wBACpC,UAAU;wBACV,WAAW,EAAE,IAAI,CAAC,WAAW;qBAC9B;oBACD,IAAI,CAAC,uBAAuB,EAAE;gBAChC;YACF;AAAO,iBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAChC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC9B;;AAGA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;QAC/B;IACF;AAEA;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAC9B;IACF;AAEA;;;;;;AAMG;IACK,UAAU,CAAC,WAAmB,EAAE,QAAa,EAAA;;AAEnD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;QAGtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;AAE/C,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;;AAGtC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;AAC7E,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC5H,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnD;;QAGA,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA;;;AAGG;IACK,aAAa,GAAA;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC1B,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACzD;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;IACK,eAAe,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5D,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc;AAElC,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE;AAC1D,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AACrD,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AAE/D,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE;gBACjB,MAAM,YAAY,GAAW,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;;gBAEvD,IAAI,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AACxD,oBAAA,OAAO,EAAE;gBACX;YACF;AAAO,iBAAA,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE;;AAE3E,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACtD,YAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;gBACpB,SAAS,GAAG,CAAC;YACf;AACA,YAAA,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;AAClB,gBAAA,OAAO,GAAG,IAAI,CAAC,MAAM;YACvB;YAEA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;QAC3C;;AAGA,QAAA,OAAO,EAAE;IACX;AAEA;;;;;AAKG;AACK,IAAA,mBAAmB,CAAC,OAAe,EAAA;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5D,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc;AAClC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE;QAEpC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,IAAI,UAAU,EAAE;AACnD,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AAE5C,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;;gBAEd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;AACtG,gBAAA,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;;gBAG3B,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,mBAAmB,CAAC;AAC9D,gBAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;YACvD;QACF;IACF;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;;;QAIxD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;QACzC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;AAElC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACzD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AAE9C,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBACzD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3C,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACpC,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;IACK,iBAAiB,GAAA;;;AAGvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,GAAG,gBAAgB,CAAC,cAAc;AAC9F,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;QAE9D,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,QAAQ;YAC5B,cAAc,EAAE,QAAQ,CAAC,OAAO;AAChC,YAAA,yBAAyB,EAAE,KAAK;AAChC,YAAA,MAAM,EAAE,YAAY;YACpB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,iDAAiD;AAChE,YAAA,OAAO,EAAE;AACP,gBAAA;AACE,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,KAAK,EAAE;wBACL,QAAQ;wBACR,UAAU;wBACV,MAAM;wBACN,QAAQ;wBACR,WAAW;wBACX,WAAW;wBACX,GAAG;wBACH,cAAc;wBACd,cAAc;wBACd,SAAS;wBACT,QAAQ;wBACR,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;IACH;AAEA;;AAEG;IACK,iBAAiB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;;;QAInD,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,QAAA,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AACzC,QAAA,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;AACxC,QAAA,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;AAEzC,QAAA,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC;AACxC,QAAA,MAAM,cAAc,GAAG;AACrB,YAAA,GAAG,EAAE,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS;AACtD,YAAA,IAAI,EAAE,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU;SAC1D;QACD,aAAa,CAAC,MAAM,EAAE;AAEtB,QAAA,OAAO,cAAc;IACvB;AAEA;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,MAAM,cAAc,GAAW,gBAAgB,CAAC,cAAc,GAAG,CAAC;QAClE,MAAM,cAAc,GAAW,IAAI,CAAC,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,cAAc;AAExF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C,IAAI,SAAS,GAAW,cAAc,CAAC,GAAG,GAAG,gBAAgB,CAAC,cAAc;;QAG5E,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC;QAC/C,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC;;AAG/C,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IACxG;AAEA;;AAEG;IACK,gBAAgB,GAAA;QACtB,IAAI,aAAa,GAAW,CAAC;AAC7B,QAAA,IACE,IAAI,CAAC,WAAW,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAC3C;AACA,YAAA,MAAM,OAAO,GAAW,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;YAC3E,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;gBACtC,IAAI,MAAM,GAAW,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC;QACF;AACA,QAAA,OAAO,aAAa;IACtB;AAEA;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACrD,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC9E,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAChC;IACF;AAEA;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC9E,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;QACjC;IACF;AAEA;;AAEG;AACH,IAAA,IAAY,kBAAkB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACxD,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,aAAa;AAClD,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO;AACpC,gBAAA,6IAA6I;YAC/I,IAAI,CAAC,mBAAmB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QACzD;QACA,OAAO,IAAI,CAAC,mBAAmB;IACjC;+GAzmBW,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,oNALd,CAAC,yBAAyB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAUV,gBAAgB,kEATlC,qGAAqG,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yyBAAA,CAAA,EAAA,CAAA,CAAA;;4FAItG,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,aAChB,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAC5B,qGAAqG,cAEnG,KAAK,EAAA,MAAA,EAAA,CAAA,yyBAAA,CAAA,EAAA;;sBAGlB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAErC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAElC,SAAS;uBAAC,SAAS,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAG7D;;sBAEA;;sBAEA;;sBAIA;;sBAEA;;sBAEA;;;ACzDH;MAgBa,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,iBAHf,gBAAgB,EAAE,gBAAgB,CAAA,EAAA,OAAA,EAAA,CADvC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAA,EAAA,OAAA,EAAA,CAE7E,gBAAgB,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;gHAEjC,mBAAmB,EAAA,OAAA,EAAA,CAJpB,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAI5E,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,CAAC;AACxF,oBAAA,YAAY,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAClD,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AAC9C,iBAAA;;;ACfD;;AAEG;;;;"}
|
|
@@ -617,7 +617,7 @@ class NovoTimePickerInputElement {
|
|
|
617
617
|
data-automation-id="time-input"
|
|
618
618
|
[disabled]="disabled"
|
|
619
619
|
/>
|
|
620
|
-
<i *ngIf="!hasValue" (click)="openPanel()" class="bhi-clock"></i> <i *ngIf="hasValue" (click)="clearValue()" class="bhi-times"></i>
|
|
620
|
+
<i *ngIf="!hasValue" (click)="openPanel(); input.focus()" class="bhi-clock"></i> <i *ngIf="hasValue" (click)="clearValue()" class="bhi-times"></i>
|
|
621
621
|
<novo-overlay-template [parent]="overlayElement" position="above-below">
|
|
622
622
|
<novo-time-picker
|
|
623
623
|
[ngClass]="{ 'hasButtons': hasButtons }"
|
|
@@ -653,7 +653,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
|
|
|
653
653
|
data-automation-id="time-input"
|
|
654
654
|
[disabled]="disabled"
|
|
655
655
|
/>
|
|
656
|
-
<i *ngIf="!hasValue" (click)="openPanel()" class="bhi-clock"></i> <i *ngIf="hasValue" (click)="clearValue()" class="bhi-times"></i>
|
|
656
|
+
<i *ngIf="!hasValue" (click)="openPanel(); input.focus()" class="bhi-clock"></i> <i *ngIf="hasValue" (click)="clearValue()" class="bhi-times"></i>
|
|
657
657
|
<novo-overlay-template [parent]="overlayElement" position="above-below">
|
|
658
658
|
<novo-time-picker
|
|
659
659
|
[ngClass]="{ 'hasButtons': hasButtons }"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"novo-elements-elements-time-picker.mjs","sources":["../../../projects/novo-elements/src/elements/time-picker/TimePicker.ts","../../../projects/novo-elements/src/elements/time-picker/TimePickerInput.ts","../../../projects/novo-elements/src/elements/time-picker/TimePicker.module.ts","../../../projects/novo-elements/src/elements/time-picker/novo-elements-elements-time-picker.ts"],"sourcesContent":["// NG2\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isValid } from 'date-fns';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { DateUtil, Helpers } from 'novo-elements/utils';\n\n// Value accessor for the component (supports ngModel)\nconst TIME_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoTimePickerElement),\n multi: true,\n};\n\nexport enum TIME_VALUE_FORMATS {\n iso8601 = 'iso8601',\n Date = 'Date',\n}\n\n@Component({\n selector: 'novo-time-picker',\n providers: [TIME_PICKER_VALUE_ACCESSOR],\n template: `\n <div class=\"increments\" *ngIf=\"!analog\">\n <novo-list class=\"increments--hours\" direction=\"vertical\" data-automation-id=\"novo-time-picker-hours\">\n <novo-list-item\n class=\"increments--hour\"\n *ngFor=\"let increment of HOURS\"\n (click)=\"setHours($event, increment, true)\"\n [class.active]=\"increment == activeHour\"\n [attr.data-automation-id]=\"increment\"\n >\n <item-content>{{ increment }}</item-content>\n </novo-list-item>\n </novo-list>\n <novo-list class=\"increments--minutes\" direction=\"vertical\" data-automation-id=\"novo-time-picker-minutes\">\n <novo-list-item\n class=\"increments--minute\"\n *ngFor=\"let increment of MINUTES\"\n (click)=\"setMinutes($event, increment, true)\"\n [class.active]=\"increment == activeMinute\"\n [attr.data-automation-id]=\"increment\"\n >\n <item-content>{{ increment }}</item-content>\n </novo-list-item>\n </novo-list>\n <novo-list class=\"increments--meridians\" direction=\"vertical\" *ngIf=\"!military\" data-automation-id=\"novo-time-picker-meridians\">\n <novo-list-item\n class=\"increments--meridian\"\n *ngFor=\"let period of MERIDIANS\"\n (click)=\"setPeriod($event, period, true)\"\n [class.active]=\"meridian == period\"\n [attr.data-automation-id]=\"period\"\n >\n <item-content>{{ period }}</item-content>\n </novo-list-item>\n </novo-list>\n </div>\n <div class=\"analog\" *ngIf=\"analog\">\n <div class=\"analog--inner\">\n <div class=\"analog--face\">\n <span class=\"analog--center\"></span>\n <span class=\"analog--hand--hours\" [ngClass]=\"hoursClass\">\n <span class=\"analog--ball\"></span>\n </span>\n <span class=\"analog--hand--minutes\" [ngClass]=\"minutesClass\">\n <span class=\"analog--ball\" [ngClass]=\"{ between: inBetween }\"></span>\n </span>\n </div>\n <div class=\"analog--hours\">\n <span\n *ngFor=\"let hour of HOURS\"\n class=\"analog--hour\"\n [ngClass]=\"{ active: activeHour == hour }\"\n (click)=\"setHours($event, hour, true)\"\n [attr.data-automation-id]=\"hour\"\n >{{ hour }}</span\n >\n </div>\n <div class=\"analog--minutes\">\n <span\n *ngFor=\"let minute of MINUTES\"\n class=\"analog--minute\"\n [ngClass]=\"{ active: activeMinute == minute }\"\n (click)=\"setMinutes($event, minute, true)\"\n [attr.data-automation-id]=\"minute\"\n >{{ minute }}</span\n >\n </div>\n </div>\n </div>\n <div class=\"save-cancel-buttons\" *ngIf=\"hasButtons\">\n <novo-button\n class=\"cancel-button\"\n theme=\"dialogue\"\n size=\"small\"\n (click)=\"cancel()\">{{ labels.cancel }}</novo-button>\n <novo-button\n class=\"save-button\"\n theme=\"primary\"\n color=\"primary\"\n size=\"small\"\n [disabled]=\"saveDisabled\"\n (click)=\"save()\">{{ labels.save }}</novo-button>\n </div>\n `,\n styleUrls: ['./TimePicker.scss'],\n host: {\n class: 'novo-time-picker',\n '[class.military]': 'military',\n },\n standalone: false,\n})\nexport class NovoTimePickerElement implements ControlValueAccessor, OnInit, OnChanges {\n @Input()\n military: boolean = false;\n @Input()\n analog: boolean = false;\n @Input()\n inline: boolean = false;\n @Input()\n step: number = 1;\n @Input()\n hasButtons: boolean = false;\n @Input()\n saveDisabled: boolean = false;\n\n @Output()\n onSelect: EventEmitter<any> = new EventEmitter();\n @Output()\n onSave: EventEmitter<any> = new EventEmitter();\n @Output()\n onCancel: EventEmitter<any> = new EventEmitter();\n\n hours: number = 12;\n minutes: number = 0;\n value: any = null;\n meridian: string;\n inBetween: boolean;\n hoursClass: string;\n activeHour;\n minutesClass: string;\n activeMinute;\n increments: string[] = [];\n selected: string;\n MERIDIANS: Array<string> = ['am', 'pm'];\n MINUTES: Array<string> = ['05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55', '00'];\n HOURS: Array<string> = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\n model: any;\n _onChange: Function = () => {};\n _onTouched: Function = () => {};\n\n flatten(arr) {\n return Array.prototype.concat(...arr);\n }\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n protected cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n if (this.military) {\n this.HOURS = ['0', ...this.HOURS, '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];\n }\n if (!this.analog) {\n const mins = Array.from(Array(60 / this.step).keys()).map((i) => i * this.step);\n this.MINUTES = mins.map((m) => `${m}`.padStart(2, '0'));\n }\n this.ngOnChanges();\n }\n\n ngOnChanges(changes?: SimpleChanges) {\n if (this.model) {\n this.init(this.model, false);\n } else {\n this.selected = null;\n this.init(new Date(), false);\n }\n }\n\n init(value, dispatch) {\n const _value = new Date(value);\n let hours: string | number = _value.getHours();\n let minutes: string | number = _value.getMinutes();\n\n if (!this.military) {\n this.meridian = hours >= 12 ? 'pm' : 'am';\n hours = hours % 12;\n hours = hours || 12;\n }\n minutes = minutes < 10 ? `0${minutes}` : minutes;\n\n this.setHours(null, hours, dispatch);\n this.setMinutes(null, minutes, dispatch);\n this.checkBetween(minutes);\n }\n\n checkBetween(value) {\n this.inBetween = this.MINUTES.indexOf(String(value)) < 0;\n }\n\n setValue(event, value) {\n Helpers.swallowEvent(event);\n this.selected = value;\n const [time, meridian] = value.split(' ');\n const [hours, minutes] = time.split(':');\n this.hours = hours;\n this.minutes = minutes;\n this.meridian = meridian;\n\n this.dispatchChange();\n }\n\n setHours(event, hours, dispatch) {\n Helpers.swallowEvent(event);\n this.hours = hours;\n this.hoursClass = `hour-${hours}`;\n this.activeHour = hours;\n\n if (dispatch) {\n this.dispatchChange();\n }\n }\n\n setMinutes(event, minutes, dispatch) {\n Helpers.swallowEvent(event);\n this.minutes = minutes;\n this.minutesClass = `min-${minutes}`;\n this.activeMinute = minutes;\n this.checkBetween(minutes);\n\n if (dispatch) {\n this.dispatchChange();\n }\n }\n\n setPeriod(event, period, dispatch) {\n Helpers.swallowEvent(event);\n this.meridian = period;\n\n if (dispatch) {\n this.dispatchChange();\n }\n }\n\n dispatchChange() {\n let hours = Number(this.hours);\n\n if (!this.military) {\n hours = this.meridian.toLowerCase() === 'pm' ? hours + 12 : hours;\n\n // Special case for 12\n if (this.meridian.toLowerCase() === 'pm' && hours === 24) {\n hours = 12;\n } else if (this.meridian.toLowerCase() === 'am' && hours === 12) {\n hours = 0;\n }\n }\n\n const value = new Date();\n value.setHours(hours);\n value.setMinutes(this.minutes);\n value.setSeconds(0);\n this.value = `${this.hours}:${this.minutes} ${this.meridian}`;\n this.onSelect.next({\n hours,\n minutes: this.minutes,\n meridian: this.meridian,\n date: value,\n text: this.value,\n });\n this._onChange(value);\n }\n\n // ValueAccessor Functions\n writeValue(model: any): void {\n this.model = model;\n if (Helpers.isDate(model)) {\n this.init(model, false);\n }\n if (Helpers.isString(model)) {\n const time = this.military ? model : this.convertTime12to24(model);\n const date = DateUtil.parse(`${DateUtil.format(Date.now(), 'YYYY-MM-DD')}T${time}`);\n if (isValid(date)) {\n this.init(date, false);\n }\n }\n }\n\n registerOnChange(fn: Function): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this._onTouched = fn;\n }\n\n convertTime12to24(time12h: string) {\n const pmFormat = this.labels.timeFormatPM.toUpperCase();\n\n const [time, modifier] = time12h.split(' ');\n // eslint-disable-next-line prefer-const\n let [hours, minutes] = time.split(':');\n if (hours === '12') {\n hours = '00';\n }\n if (['PM', pmFormat].includes(modifier)) {\n hours = `${parseInt(hours, 10) + 12}`.padStart(2, '0');\n }\n return `${hours}:${minutes}`;\n }\n\n save(): void {\n this.onSave.emit();\n }\n\n cancel(): void {\n this.onCancel.emit();\n }\n}\n","// NG\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n// App\nimport { NovoOverlayTemplateComponent } from 'novo-elements/elements/common';\nimport { DateFormatService, NovoLabelService } from 'novo-elements/services';\nimport { Helpers, Key } from 'novo-elements/utils';\n\n// Value accessor for the component (supports ngModel)\nconst DATE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoTimePickerInputElement),\n multi: true,\n};\n\n@Component({\n selector: 'novo-time-picker-input',\n providers: [DATE_VALUE_ACCESSOR],\n template: `\n <input\n type=\"text\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [imask]=\"maskOptions\"\n [unmask]=\"'typed'\"\n [placeholder]=\"placeholder\"\n (change)=\"_handleChange($event)\"\n (focus)=\"_handleFocus($event)\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur($event)\"\n #input\n data-automation-id=\"time-input\"\n [disabled]=\"disabled\"\n />\n <i *ngIf=\"!hasValue\" (click)=\"openPanel()\" class=\"bhi-clock\"></i> <i *ngIf=\"hasValue\" (click)=\"clearValue()\" class=\"bhi-times\"></i>\n <novo-overlay-template [parent]=\"overlayElement\" position=\"above-below\">\n <novo-time-picker\n [ngClass]=\"{ 'hasButtons': hasButtons }\"\n [hasButtons]=\"hasButtons\"\n inline=\"true\"\n [analog]=\"analog\"\n (onSelect)=\"setValue($event)\"\n [ngModel]=\"value\"\n [military]=\"military\"\n [saveDisabled]=\"saveDisabled\"\n (onCancel)=\"cancel()\"\n (onSave)=\"save()\"\n ></novo-time-picker>\n </novo-overlay-template>\n `,\n styleUrls: ['./TimePickerInput.scss'],\n standalone: false,\n})\nexport class NovoTimePickerInputElement implements OnInit, OnChanges, ControlValueAccessor {\n public value: any;\n\n /** View -> model callback called when value changes */\n _onChange: (value: any) => void = () => {};\n /** View -> model callback called when autocomplete has been touched */\n _onTouched = () => {};\n\n @Input()\n name: string;\n @Input()\n placeholder: string;\n @Input()\n military: boolean = false;\n @Input()\n maskOptions: any;\n @HostBinding('class.disabled')\n @Input()\n disabled: boolean = false;\n @Input()\n hasButtons: boolean = false;\n @Input()\n saveDisabled: boolean = false;\n @Input()\n overlayOnElement: ElementRef;\n\n /**\n * @deprecated don't use\n */\n @Input()\n analog: boolean = false;\n\n @Output()\n blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output()\n focusEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output()\n changeEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output()\n onSave: EventEmitter<any> = new EventEmitter();\n @Output()\n onCancel: EventEmitter<any> = new EventEmitter();\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n @ViewChild('input')\n input: HTMLInputElement;\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n public dateFormatService: DateFormatService,\n protected _changeDetectorRef: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.initFormatOptions();\n }\n\n ngOnChanges(changes?: SimpleChanges) {\n // set icon and styling\n if (Object.keys(changes).some((key) => ['military', 'maskOptions'].includes(key))) {\n this.initFormatOptions();\n }\n }\n\n initFormatOptions() {\n this.placeholder = this.military ? this.labels.timeFormatPlaceholder24Hour : this.labels.timeFormatPlaceholderAM;\n this.maskOptions = this.dateFormatService.getTimeMask(this.military);\n }\n\n /** BEGIN: Convenient Panel Methods. */\n openPanel(): void {\n if (!this.overlay.panelOpen) {\n this.overlay.openPanel();\n const hour = new Date().getHours();\n Promise.resolve(null).then(() => this.scrollToIndex(hour * 4));\n }\n }\n\n closePanel(): void {\n this.overlay.closePanel();\n }\n\n get panelOpen(): boolean {\n return this.overlay && this.overlay.panelOpen;\n }\n\n get overlayElement(): ElementRef {\n return this.overlayOnElement || this.element;\n }\n\n /** END: Convenient Panel Methods. */\n\n _handleKeydown(event: KeyboardEvent): void {\n const input = event.target as HTMLInputElement;\n const hour: string = input.value.slice(0, 2);\n if ((event.key === Key.Escape || event.key === Key.Enter) && this.panelOpen) {\n this.closePanel();\n event.stopPropagation();\n event.stopImmediatePropagation();\n if (this.hourOneFormatRequired(hour)) {\n input.value = `01:${input.value.slice(3, input.value.length)}`;\n }\n } else if (event.key === Key.Tab && input.selectionStart <= 2 && this.hourOneFormatRequired(hour)) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n input.value = `01:${input.value.slice(3, input.value.length)}`;\n input.setSelectionRange(3, 3);\n } else if (event.key === Key.Backspace && input.selectionStart === input.value.length) {\n input.value = `${input.value.slice(0, 5)} xx`;\n } else if (event.key === Key.Tab && this.panelOpen) {\n this.closePanel();\n event.stopPropagation();\n event.stopImmediatePropagation();\n } else if (event.key === Key.ArrowRight && input.selectionStart >= 2 && this.hourOneFormatRequired(hour)) {\n input.value = `01:${input.value.slice(3, input.value.length)}`;\n input.setSelectionRange(2, 2);\n }\n }\n\n _handleInput(event: KeyboardEvent): void {\n if (document.activeElement === event.target) {\n const text = (event.target as HTMLInputElement).value;\n const hour = text.slice(0, 2);\n this.openPanel();\n if ((this.military && Number(text[0]) > 2) || (!this.military && Number(text[0]) > 1)) {\n event.preventDefault();\n (event.target as HTMLInputElement).value = `0${text}`;\n }\n if (!this.military) {\n const test = text.substr(5, 4).replace(/x/g, '').trim().slice(0, 2);\n const timePeriod = this.maskOptions.blocks.aa.enum.find((it) => it[0] === test[0]);\n if (timePeriod) {\n (event.target as HTMLInputElement).value = `${(event.target as HTMLInputElement).value.slice(0, 5)} ${timePeriod}`;\n }\n if ((event.target as HTMLInputElement).selectionStart >= 3 && this.hourOneFormatRequired(hour)) {\n (event.target as HTMLInputElement).value = `01:${(event.target as HTMLInputElement).value.slice(\n 3,\n (event.target as HTMLInputElement).value.length,\n )}`;\n }\n }\n }\n }\n\n _handleChange(event: Event): void {\n const text = (event?.target as HTMLInputElement)?.value;\n this.formatTime(text);\n this.changeEvent.emit();\n }\n\n _handleBlur(event: FocusEvent): void {\n const text = (event.target as HTMLInputElement).value;\n const hour: string = text.slice(0, 2);\n if (!this.military) {\n const test = text.substr(5, 4).replace(/x/g, '').trim().slice(0, 2);\n const timePeriod = this.maskOptions.blocks.aa.enum.find((it) => it[0] === test[0]);\n if (this.hourOneFormatRequired(hour)) {\n (event.target as HTMLInputElement).value = `01:${text.slice(3, text.length)}`;\n }\n if (!timePeriod) {\n (event.target as HTMLInputElement).value = `${(event.target as HTMLInputElement).value.slice(0, 5)} xx`;\n }\n }\n }\n\n _handleFocus(event: FocusEvent): void {\n this.openPanel();\n this.focusEvent.emit(event);\n }\n\n writeValue(value: any): void {\n Promise.resolve(null).then(() => this._setTriggerValue(value));\n }\n\n registerOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public dispatchOnChange(newValue?: any, skip: boolean = false) {\n if (newValue !== this.value) {\n this._onChange(newValue);\n this.changeEvent.emit(newValue);\n !skip && this.writeValue(newValue);\n }\n }\n\n private _setTriggerValue(value: any): void {\n if (value instanceof Date && this.value instanceof Date) {\n value = new Date(value.setFullYear(this.value.getFullYear(), this.value.getMonth(), this.value.getDate()));\n }\n this.value = value;\n this._changeDetectorRef.markForCheck();\n }\n\n public setValueAndClose(event: any | null): void {\n this.setValue(event);\n this.closePanel();\n }\n\n public setValue(event: any | null): void {\n if (event && event.date) {\n this.dispatchOnChange(event.date);\n }\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n public clearValue() {\n this.dispatchOnChange(null);\n }\n\n public get hasValue() {\n return !Helpers.isEmpty(this.value);\n }\n\n public scrollToIndex(index: number) {\n const element = this.overlay.overlayRef.overlayElement;\n const list = element.querySelector('.increments');\n const items = list.querySelectorAll('novo-list-item');\n const item = items[index];\n if (item) {\n list.scrollTop = (item as HTMLElement).offsetTop;\n }\n }\n\n hourOneFormatRequired(hourInput: string): boolean {\n return hourInput === 'h1' || hourInput === '1h';\n }\n\n protected formatTime(value: string) {\n try {\n const [dateTimeValue, formatted] = this.dateFormatService.parseString(value, this.military, 'time');\n if (!isNaN(dateTimeValue.getUTCDate())) {\n const dt = new Date(dateTimeValue);\n this.dispatchOnChange(dt);\n } else {\n this.dispatchOnChange(null);\n }\n } catch (err) {}\n }\n\n save(): void {\n this.onSave.emit();\n }\n\n cancel(): void {\n this.onCancel.emit();\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// Vendor\nimport { IMaskModule } from 'angular-imask';\n// APP\nimport { NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoTimePickerElement } from './TimePicker';\nimport { NovoTimePickerInputElement } from './TimePickerInput';\n\n@NgModule({\n imports: [CommonModule, FormsModule, IMaskModule, NovoOverlayModule, NovoListModule, NovoButtonModule],\n declarations: [NovoTimePickerElement, NovoTimePickerInputElement],\n exports: [NovoTimePickerElement, NovoTimePickerInputElement],\n})\nexport class NovoTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4","i6.NovoTimePickerElement"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAmBA;AACA,MAAM,0BAA0B,GAAG;AACjC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,IAAA,KAAK,EAAE,IAAI;CACZ;IAEW;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;MAmGjB,qBAAqB,CAAA;AAuChC,IAAA,OAAO,CAAC,GAAG,EAAA;QACT,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACvC;AAEA,IAAA,WAAA,CACS,OAAmB,EACnB,MAAwB,EACrB,GAAsB,EAAA;QAFzB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;QACH,IAAA,CAAA,GAAG,GAAH,GAAG;QA5Cf,IAAA,CAAA,QAAQ,GAAY,KAAK;QAEzB,IAAA,CAAA,MAAM,GAAY,KAAK;QAEvB,IAAA,CAAA,MAAM,GAAY,KAAK;QAEvB,IAAA,CAAA,IAAI,GAAW,CAAC;QAEhB,IAAA,CAAA,UAAU,GAAY,KAAK;QAE3B,IAAA,CAAA,YAAY,GAAY,KAAK;AAG7B,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAE;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;AAE9C,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAE;QAEhD,IAAA,CAAA,KAAK,GAAW,EAAE;QAClB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,KAAK,GAAQ,IAAI;QAOjB,IAAA,CAAA,UAAU,GAAa,EAAE;AAEzB,QAAA,IAAA,CAAA,SAAS,GAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;QACvC,IAAA,CAAA,OAAO,GAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACjG,IAAA,CAAA,KAAK,GAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAEtF,QAAA,IAAA,CAAA,SAAS,GAAa,MAAK,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,UAAU,GAAa,MAAK,EAAE,CAAC;IAU5B;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrG;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA,IAAA,WAAW,CAAC,OAAuB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;QAC9B;IACF;IAEA,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,KAAK,GAAoB,MAAM,CAAC,QAAQ,EAAE;AAC9C,QAAA,IAAI,OAAO,GAAoB,MAAM,CAAC,UAAU,EAAE;AAElD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;AACzC,YAAA,KAAK,GAAG,KAAK,GAAG,EAAE;AAClB,YAAA,KAAK,GAAG,KAAK,IAAI,EAAE;QACrB;AACA,QAAA,OAAO,GAAG,OAAO,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,GAAG,OAAO;QAEhD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC5B;AAEA,IAAA,YAAY,CAAC,KAAK,EAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;IAC1D;IAEA,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAA;AACnB,QAAA,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,QAAA,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAExB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAA;AAC7B,QAAA,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAA,KAAA,EAAQ,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QAEvB,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAEA,IAAA,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAA;AACjC,QAAA,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAA,IAAA,EAAO,OAAO,EAAE;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;QAE1B,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAEA,IAAA,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAA;AAC/B,QAAA,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;QAEtB,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEA,cAAc,GAAA;QACZ,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK;;AAGjE,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;gBACxD,KAAK,GAAG,EAAE;YACZ;AAAO,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;gBAC/D,KAAK,GAAG,CAAC;YACX;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AACrB,QAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,EAAE;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,IAAI,CAAC,KAAK;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACvB;;AAGA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QACzB;AACA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AACnF,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;YACxB;QACF;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,iBAAiB,CAAC,OAAe,EAAA;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;AAEvD,QAAA,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;AAE3C,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,KAAK,GAAG,IAAI;QACd;QACA,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACvC,YAAA,KAAK,GAAG,CAAA,EAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACxD;AACA,QAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,EAAE;IAC9B;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;+GA/MW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EA5FnB,CAAC,0BAA0B,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2kfAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAQU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA9FjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,SAAA,EACjB,CAAC,0BAA0B,CAAC,EAAA,QAAA,EAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFX,EAAA,IAAA,EAEO;AACF,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,kBAAkB,EAAE,UAAU;AACjC,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,MAAA,EAAA,CAAA,2kfAAA,CAAA,EAAA;;sBAGlB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAGA;;sBAEA;;sBAEA;;;AC/IH;AAqBA;AACA,MAAM,mBAAmB,GAAG;AAC1B,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC;AACzD,IAAA,KAAK,EAAE,IAAI;CACZ;MAyCY,0BAA0B,CAAA;AAiDrC,IAAA,WAAA,CACS,OAAmB,EACnB,MAAwB,EACxB,iBAAoC,EACjC,kBAAqC,EAAA;QAHxC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACd,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;;AAjD9B,QAAA,IAAA,CAAA,SAAS,GAAyB,MAAK,EAAE,CAAC;;AAE1C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAK,EAAE,CAAC;QAOrB,IAAA,CAAA,QAAQ,GAAY,KAAK;QAKzB,IAAA,CAAA,QAAQ,GAAY,KAAK;QAEzB,IAAA,CAAA,UAAU,GAAY,KAAK;QAE3B,IAAA,CAAA,YAAY,GAAY,KAAK;AAI7B;;AAEG;QAEH,IAAA,CAAA,MAAM,GAAY,KAAK;AAGvB,QAAA,IAAA,CAAA,SAAS,GAA6B,IAAI,YAAY,EAAc;AAEpE,QAAA,IAAA,CAAA,UAAU,GAA6B,IAAI,YAAY,EAAc;AAErE,QAAA,IAAA,CAAA,WAAW,GAA6B,IAAI,YAAY,EAAc;AAEtE,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;AAE9C,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAE;IAa7C;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA,IAAA,WAAW,CAAC,OAAuB,EAAA;;QAEjC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;YACjF,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB;AAChH,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IACtE;;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAChE;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;IAC3B;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;IAC/C;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO;IAC9C;;AAIA,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,IAAI,GAAW,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,KAAA,QAAA,qBAAmB,KAAK,CAAC,GAAG,KAAA,OAAA,qBAAmB,IAAI,CAAC,SAAS,EAAE;YAC3E,IAAI,CAAC,UAAU,EAAE;YACjB,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,wBAAwB,EAAE;AAChC,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;AACpC,gBAAA,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAChE;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,4BAAgB,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;YACjG,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,wBAAwB,EAAE;AAChC,YAAA,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC9D,YAAA,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAA,WAAA,wBAAsB,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;AACrF,YAAA,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;QAC/C;aAAO,IAAI,KAAK,CAAC,GAAG,KAAA,KAAA,kBAAgB,IAAI,CAAC,SAAS,EAAE;YAClD,IAAI,CAAC,UAAU,EAAE;YACjB,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,wBAAwB,EAAE;QAClC;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,0CAAuB,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;AACxG,YAAA,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC9D,YAAA,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B;IACF;AAEA,IAAA,YAAY,CAAC,KAAoB,EAAA;QAC/B,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE;AAC3C,YAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBACrF,KAAK,CAAC,cAAc,EAAE;gBACrB,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,CAAA,CAAA,EAAI,IAAI,EAAE;YACvD;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnE,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClF,IAAI,UAAU,EAAE;oBACb,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,CAAA,EAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;gBACpH;AACA,gBAAA,IAAK,KAAK,CAAC,MAA2B,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;oBAC7F,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,MAAO,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,KAAK,CAC7F,CAAC,EACA,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,MAAM,CAChD,CAAA,CAAE;gBACL;YACF;QACF;IACF;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;AACxB,QAAA,MAAM,IAAI,GAAI,KAAK,EAAE,MAA2B,EAAE,KAAK;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;QACrD,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAClF,YAAA,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;AACnC,gBAAA,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAC/E;YACA,IAAI,CAAC,UAAU,EAAE;AACd,gBAAA,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,CAAA,EAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;YACzG;QACF;IACF;AAEA,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC5B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAChE;AAEA,IAAA,gBAAgB,CAAC,EAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEO,IAAA,gBAAgB,CAAC,QAAc,EAAE,IAAA,GAAgB,KAAK,EAAA;AAC3D,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACpC;IACF;AAEQ,IAAA,gBAAgB,CAAC,KAAU,EAAA;QACjC,IAAI,KAAK,YAAY,IAAI,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI,EAAE;AACvD,YAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5G;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IACxC;AAEO,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEO,IAAA,QAAQ,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QACnC;IACF;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;AAEO,IAAA,aAAa,CAAC,KAAa,EAAA;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,SAAS,GAAI,IAAoB,CAAC,SAAS;QAClD;IACF;AAEA,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AACrC,QAAA,OAAO,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;IACjD;AAEU,IAAA,UAAU,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI;YACF,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,EAAE;AACtC,gBAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3B;iBAAO;AACL,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC7B;QACF;AAAE,QAAA,OAAO,GAAG,EAAE,EAAC;IACjB;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;+GApQW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,ofArCxB,CAAC,mBAAmB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiFvB,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhF3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,szBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,eAAA,EAAA,aAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAvCtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,SAAA,EACvB,CAAC,mBAAmB,CAAC,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCX,EAAA,CAAA,EAAA,UAAA,EAEa,KAAK,EAAA,MAAA,EAAA,CAAA,szBAAA,CAAA,EAAA;;sBAUlB;;sBAEA;;sBAEA;;sBAEA;;sBAEA,WAAW;uBAAC,gBAAgB;;sBAC5B;;sBAEA;;sBAEA;;sBAEA;;sBAMA;;sBAGA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAIA,SAAS;uBAAC,4BAA4B;;sBAEtC,SAAS;uBAAC,OAAO;;;ACjHpB;MAkBa,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAHhB,qBAAqB,EAAE,0BAA0B,CAAA,EAAA,OAAA,EAAA,CADtD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAE3F,qBAAqB,EAAE,0BAA0B,CAAA,EAAA,CAAA,CAAA;gHAEhD,oBAAoB,EAAA,OAAA,EAAA,CAJrB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAI1F,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,CAAC;AACtG,oBAAA,YAAY,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;AACjE,oBAAA,OAAO,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;AAC7D,iBAAA;;;ACjBD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"novo-elements-elements-time-picker.mjs","sources":["../../../projects/novo-elements/src/elements/time-picker/TimePicker.ts","../../../projects/novo-elements/src/elements/time-picker/TimePickerInput.ts","../../../projects/novo-elements/src/elements/time-picker/TimePicker.module.ts","../../../projects/novo-elements/src/elements/time-picker/novo-elements-elements-time-picker.ts"],"sourcesContent":["// NG2\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isValid } from 'date-fns';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { DateUtil, Helpers } from 'novo-elements/utils';\n\n// Value accessor for the component (supports ngModel)\nconst TIME_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoTimePickerElement),\n multi: true,\n};\n\nexport enum TIME_VALUE_FORMATS {\n iso8601 = 'iso8601',\n Date = 'Date',\n}\n\n@Component({\n selector: 'novo-time-picker',\n providers: [TIME_PICKER_VALUE_ACCESSOR],\n template: `\n <div class=\"increments\" *ngIf=\"!analog\">\n <novo-list class=\"increments--hours\" direction=\"vertical\" data-automation-id=\"novo-time-picker-hours\">\n <novo-list-item\n class=\"increments--hour\"\n *ngFor=\"let increment of HOURS\"\n (click)=\"setHours($event, increment, true)\"\n [class.active]=\"increment == activeHour\"\n [attr.data-automation-id]=\"increment\"\n >\n <item-content>{{ increment }}</item-content>\n </novo-list-item>\n </novo-list>\n <novo-list class=\"increments--minutes\" direction=\"vertical\" data-automation-id=\"novo-time-picker-minutes\">\n <novo-list-item\n class=\"increments--minute\"\n *ngFor=\"let increment of MINUTES\"\n (click)=\"setMinutes($event, increment, true)\"\n [class.active]=\"increment == activeMinute\"\n [attr.data-automation-id]=\"increment\"\n >\n <item-content>{{ increment }}</item-content>\n </novo-list-item>\n </novo-list>\n <novo-list class=\"increments--meridians\" direction=\"vertical\" *ngIf=\"!military\" data-automation-id=\"novo-time-picker-meridians\">\n <novo-list-item\n class=\"increments--meridian\"\n *ngFor=\"let period of MERIDIANS\"\n (click)=\"setPeriod($event, period, true)\"\n [class.active]=\"meridian == period\"\n [attr.data-automation-id]=\"period\"\n >\n <item-content>{{ period }}</item-content>\n </novo-list-item>\n </novo-list>\n </div>\n <div class=\"analog\" *ngIf=\"analog\">\n <div class=\"analog--inner\">\n <div class=\"analog--face\">\n <span class=\"analog--center\"></span>\n <span class=\"analog--hand--hours\" [ngClass]=\"hoursClass\">\n <span class=\"analog--ball\"></span>\n </span>\n <span class=\"analog--hand--minutes\" [ngClass]=\"minutesClass\">\n <span class=\"analog--ball\" [ngClass]=\"{ between: inBetween }\"></span>\n </span>\n </div>\n <div class=\"analog--hours\">\n <span\n *ngFor=\"let hour of HOURS\"\n class=\"analog--hour\"\n [ngClass]=\"{ active: activeHour == hour }\"\n (click)=\"setHours($event, hour, true)\"\n [attr.data-automation-id]=\"hour\"\n >{{ hour }}</span\n >\n </div>\n <div class=\"analog--minutes\">\n <span\n *ngFor=\"let minute of MINUTES\"\n class=\"analog--minute\"\n [ngClass]=\"{ active: activeMinute == minute }\"\n (click)=\"setMinutes($event, minute, true)\"\n [attr.data-automation-id]=\"minute\"\n >{{ minute }}</span\n >\n </div>\n </div>\n </div>\n <div class=\"save-cancel-buttons\" *ngIf=\"hasButtons\">\n <novo-button\n class=\"cancel-button\"\n theme=\"dialogue\"\n size=\"small\"\n (click)=\"cancel()\">{{ labels.cancel }}</novo-button>\n <novo-button\n class=\"save-button\"\n theme=\"primary\"\n color=\"primary\"\n size=\"small\"\n [disabled]=\"saveDisabled\"\n (click)=\"save()\">{{ labels.save }}</novo-button>\n </div>\n `,\n styleUrls: ['./TimePicker.scss'],\n host: {\n class: 'novo-time-picker',\n '[class.military]': 'military',\n },\n standalone: false,\n})\nexport class NovoTimePickerElement implements ControlValueAccessor, OnInit, OnChanges {\n @Input()\n military: boolean = false;\n @Input()\n analog: boolean = false;\n @Input()\n inline: boolean = false;\n @Input()\n step: number = 1;\n @Input()\n hasButtons: boolean = false;\n @Input()\n saveDisabled: boolean = false;\n\n @Output()\n onSelect: EventEmitter<any> = new EventEmitter();\n @Output()\n onSave: EventEmitter<any> = new EventEmitter();\n @Output()\n onCancel: EventEmitter<any> = new EventEmitter();\n\n hours: number = 12;\n minutes: number = 0;\n value: any = null;\n meridian: string;\n inBetween: boolean;\n hoursClass: string;\n activeHour;\n minutesClass: string;\n activeMinute;\n increments: string[] = [];\n selected: string;\n MERIDIANS: Array<string> = ['am', 'pm'];\n MINUTES: Array<string> = ['05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55', '00'];\n HOURS: Array<string> = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\n model: any;\n _onChange: Function = () => {};\n _onTouched: Function = () => {};\n\n flatten(arr) {\n return Array.prototype.concat(...arr);\n }\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n protected cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n if (this.military) {\n this.HOURS = ['0', ...this.HOURS, '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];\n }\n if (!this.analog) {\n const mins = Array.from(Array(60 / this.step).keys()).map((i) => i * this.step);\n this.MINUTES = mins.map((m) => `${m}`.padStart(2, '0'));\n }\n this.ngOnChanges();\n }\n\n ngOnChanges(changes?: SimpleChanges) {\n if (this.model) {\n this.init(this.model, false);\n } else {\n this.selected = null;\n this.init(new Date(), false);\n }\n }\n\n init(value, dispatch) {\n const _value = new Date(value);\n let hours: string | number = _value.getHours();\n let minutes: string | number = _value.getMinutes();\n\n if (!this.military) {\n this.meridian = hours >= 12 ? 'pm' : 'am';\n hours = hours % 12;\n hours = hours || 12;\n }\n minutes = minutes < 10 ? `0${minutes}` : minutes;\n\n this.setHours(null, hours, dispatch);\n this.setMinutes(null, minutes, dispatch);\n this.checkBetween(minutes);\n }\n\n checkBetween(value) {\n this.inBetween = this.MINUTES.indexOf(String(value)) < 0;\n }\n\n setValue(event, value) {\n Helpers.swallowEvent(event);\n this.selected = value;\n const [time, meridian] = value.split(' ');\n const [hours, minutes] = time.split(':');\n this.hours = hours;\n this.minutes = minutes;\n this.meridian = meridian;\n\n this.dispatchChange();\n }\n\n setHours(event, hours, dispatch) {\n Helpers.swallowEvent(event);\n this.hours = hours;\n this.hoursClass = `hour-${hours}`;\n this.activeHour = hours;\n\n if (dispatch) {\n this.dispatchChange();\n }\n }\n\n setMinutes(event, minutes, dispatch) {\n Helpers.swallowEvent(event);\n this.minutes = minutes;\n this.minutesClass = `min-${minutes}`;\n this.activeMinute = minutes;\n this.checkBetween(minutes);\n\n if (dispatch) {\n this.dispatchChange();\n }\n }\n\n setPeriod(event, period, dispatch) {\n Helpers.swallowEvent(event);\n this.meridian = period;\n\n if (dispatch) {\n this.dispatchChange();\n }\n }\n\n dispatchChange() {\n let hours = Number(this.hours);\n\n if (!this.military) {\n hours = this.meridian.toLowerCase() === 'pm' ? hours + 12 : hours;\n\n // Special case for 12\n if (this.meridian.toLowerCase() === 'pm' && hours === 24) {\n hours = 12;\n } else if (this.meridian.toLowerCase() === 'am' && hours === 12) {\n hours = 0;\n }\n }\n\n const value = new Date();\n value.setHours(hours);\n value.setMinutes(this.minutes);\n value.setSeconds(0);\n this.value = `${this.hours}:${this.minutes} ${this.meridian}`;\n this.onSelect.next({\n hours,\n minutes: this.minutes,\n meridian: this.meridian,\n date: value,\n text: this.value,\n });\n this._onChange(value);\n }\n\n // ValueAccessor Functions\n writeValue(model: any): void {\n this.model = model;\n if (Helpers.isDate(model)) {\n this.init(model, false);\n }\n if (Helpers.isString(model)) {\n const time = this.military ? model : this.convertTime12to24(model);\n const date = DateUtil.parse(`${DateUtil.format(Date.now(), 'YYYY-MM-DD')}T${time}`);\n if (isValid(date)) {\n this.init(date, false);\n }\n }\n }\n\n registerOnChange(fn: Function): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this._onTouched = fn;\n }\n\n convertTime12to24(time12h: string) {\n const pmFormat = this.labels.timeFormatPM.toUpperCase();\n\n const [time, modifier] = time12h.split(' ');\n // eslint-disable-next-line prefer-const\n let [hours, minutes] = time.split(':');\n if (hours === '12') {\n hours = '00';\n }\n if (['PM', pmFormat].includes(modifier)) {\n hours = `${parseInt(hours, 10) + 12}`.padStart(2, '0');\n }\n return `${hours}:${minutes}`;\n }\n\n save(): void {\n this.onSave.emit();\n }\n\n cancel(): void {\n this.onCancel.emit();\n }\n}\n","// NG\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n// App\nimport { NovoOverlayTemplateComponent } from 'novo-elements/elements/common';\nimport { DateFormatService, NovoLabelService } from 'novo-elements/services';\nimport { Helpers, Key } from 'novo-elements/utils';\n\n// Value accessor for the component (supports ngModel)\nconst DATE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoTimePickerInputElement),\n multi: true,\n};\n\n@Component({\n selector: 'novo-time-picker-input',\n providers: [DATE_VALUE_ACCESSOR],\n template: `\n <input\n type=\"text\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [imask]=\"maskOptions\"\n [unmask]=\"'typed'\"\n [placeholder]=\"placeholder\"\n (change)=\"_handleChange($event)\"\n (focus)=\"_handleFocus($event)\"\n (keydown)=\"_handleKeydown($event)\"\n (input)=\"_handleInput($event)\"\n (blur)=\"_handleBlur($event)\"\n #input\n data-automation-id=\"time-input\"\n [disabled]=\"disabled\"\n />\n <i *ngIf=\"!hasValue\" (click)=\"openPanel(); input.focus()\" class=\"bhi-clock\"></i> <i *ngIf=\"hasValue\" (click)=\"clearValue()\" class=\"bhi-times\"></i>\n <novo-overlay-template [parent]=\"overlayElement\" position=\"above-below\">\n <novo-time-picker\n [ngClass]=\"{ 'hasButtons': hasButtons }\"\n [hasButtons]=\"hasButtons\"\n inline=\"true\"\n [analog]=\"analog\"\n (onSelect)=\"setValue($event)\"\n [ngModel]=\"value\"\n [military]=\"military\"\n [saveDisabled]=\"saveDisabled\"\n (onCancel)=\"cancel()\"\n (onSave)=\"save()\"\n ></novo-time-picker>\n </novo-overlay-template>\n `,\n styleUrls: ['./TimePickerInput.scss'],\n standalone: false,\n})\nexport class NovoTimePickerInputElement implements OnInit, OnChanges, ControlValueAccessor {\n public value: any;\n\n /** View -> model callback called when value changes */\n _onChange: (value: any) => void = () => {};\n /** View -> model callback called when autocomplete has been touched */\n _onTouched = () => {};\n\n @Input()\n name: string;\n @Input()\n placeholder: string;\n @Input()\n military: boolean = false;\n @Input()\n maskOptions: any;\n @HostBinding('class.disabled')\n @Input()\n disabled: boolean = false;\n @Input()\n hasButtons: boolean = false;\n @Input()\n saveDisabled: boolean = false;\n @Input()\n overlayOnElement: ElementRef;\n\n /**\n * @deprecated don't use\n */\n @Input()\n analog: boolean = false;\n\n @Output()\n blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output()\n focusEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output()\n changeEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output()\n onSave: EventEmitter<any> = new EventEmitter();\n @Output()\n onCancel: EventEmitter<any> = new EventEmitter();\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n @ViewChild('input')\n input: HTMLInputElement;\n\n constructor(\n public element: ElementRef,\n public labels: NovoLabelService,\n public dateFormatService: DateFormatService,\n protected _changeDetectorRef: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.initFormatOptions();\n }\n\n ngOnChanges(changes?: SimpleChanges) {\n // set icon and styling\n if (Object.keys(changes).some((key) => ['military', 'maskOptions'].includes(key))) {\n this.initFormatOptions();\n }\n }\n\n initFormatOptions() {\n this.placeholder = this.military ? this.labels.timeFormatPlaceholder24Hour : this.labels.timeFormatPlaceholderAM;\n this.maskOptions = this.dateFormatService.getTimeMask(this.military);\n }\n\n /** BEGIN: Convenient Panel Methods. */\n openPanel(): void {\n if (!this.overlay.panelOpen) {\n this.overlay.openPanel();\n const hour = new Date().getHours();\n Promise.resolve(null).then(() => this.scrollToIndex(hour * 4));\n }\n }\n\n closePanel(): void {\n this.overlay.closePanel();\n }\n\n get panelOpen(): boolean {\n return this.overlay && this.overlay.panelOpen;\n }\n\n get overlayElement(): ElementRef {\n return this.overlayOnElement || this.element;\n }\n\n /** END: Convenient Panel Methods. */\n\n _handleKeydown(event: KeyboardEvent): void {\n const input = event.target as HTMLInputElement;\n const hour: string = input.value.slice(0, 2);\n if ((event.key === Key.Escape || event.key === Key.Enter) && this.panelOpen) {\n this.closePanel();\n event.stopPropagation();\n event.stopImmediatePropagation();\n if (this.hourOneFormatRequired(hour)) {\n input.value = `01:${input.value.slice(3, input.value.length)}`;\n }\n } else if (event.key === Key.Tab && input.selectionStart <= 2 && this.hourOneFormatRequired(hour)) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n input.value = `01:${input.value.slice(3, input.value.length)}`;\n input.setSelectionRange(3, 3);\n } else if (event.key === Key.Backspace && input.selectionStart === input.value.length) {\n input.value = `${input.value.slice(0, 5)} xx`;\n } else if (event.key === Key.Tab && this.panelOpen) {\n this.closePanel();\n event.stopPropagation();\n event.stopImmediatePropagation();\n } else if (event.key === Key.ArrowRight && input.selectionStart >= 2 && this.hourOneFormatRequired(hour)) {\n input.value = `01:${input.value.slice(3, input.value.length)}`;\n input.setSelectionRange(2, 2);\n }\n }\n\n _handleInput(event: KeyboardEvent): void {\n if (document.activeElement === event.target) {\n const text = (event.target as HTMLInputElement).value;\n const hour = text.slice(0, 2);\n this.openPanel();\n if ((this.military && Number(text[0]) > 2) || (!this.military && Number(text[0]) > 1)) {\n event.preventDefault();\n (event.target as HTMLInputElement).value = `0${text}`;\n }\n if (!this.military) {\n const test = text.substr(5, 4).replace(/x/g, '').trim().slice(0, 2);\n const timePeriod = this.maskOptions.blocks.aa.enum.find((it) => it[0] === test[0]);\n if (timePeriod) {\n (event.target as HTMLInputElement).value = `${(event.target as HTMLInputElement).value.slice(0, 5)} ${timePeriod}`;\n }\n if ((event.target as HTMLInputElement).selectionStart >= 3 && this.hourOneFormatRequired(hour)) {\n (event.target as HTMLInputElement).value = `01:${(event.target as HTMLInputElement).value.slice(\n 3,\n (event.target as HTMLInputElement).value.length,\n )}`;\n }\n }\n }\n }\n\n _handleChange(event: Event): void {\n const text = (event?.target as HTMLInputElement)?.value;\n this.formatTime(text);\n this.changeEvent.emit();\n }\n\n _handleBlur(event: FocusEvent): void {\n const text = (event.target as HTMLInputElement).value;\n const hour: string = text.slice(0, 2);\n if (!this.military) {\n const test = text.substr(5, 4).replace(/x/g, '').trim().slice(0, 2);\n const timePeriod = this.maskOptions.blocks.aa.enum.find((it) => it[0] === test[0]);\n if (this.hourOneFormatRequired(hour)) {\n (event.target as HTMLInputElement).value = `01:${text.slice(3, text.length)}`;\n }\n if (!timePeriod) {\n (event.target as HTMLInputElement).value = `${(event.target as HTMLInputElement).value.slice(0, 5)} xx`;\n }\n }\n }\n\n _handleFocus(event: FocusEvent): void {\n this.openPanel();\n this.focusEvent.emit(event);\n }\n\n writeValue(value: any): void {\n Promise.resolve(null).then(() => this._setTriggerValue(value));\n }\n\n registerOnChange(fn: (value: any) => {}): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => {}) {\n this._onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public dispatchOnChange(newValue?: any, skip: boolean = false) {\n if (newValue !== this.value) {\n this._onChange(newValue);\n this.changeEvent.emit(newValue);\n !skip && this.writeValue(newValue);\n }\n }\n\n private _setTriggerValue(value: any): void {\n if (value instanceof Date && this.value instanceof Date) {\n value = new Date(value.setFullYear(this.value.getFullYear(), this.value.getMonth(), this.value.getDate()));\n }\n this.value = value;\n this._changeDetectorRef.markForCheck();\n }\n\n public setValueAndClose(event: any | null): void {\n this.setValue(event);\n this.closePanel();\n }\n\n public setValue(event: any | null): void {\n if (event && event.date) {\n this.dispatchOnChange(event.date);\n }\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n public clearValue() {\n this.dispatchOnChange(null);\n }\n\n public get hasValue() {\n return !Helpers.isEmpty(this.value);\n }\n\n public scrollToIndex(index: number) {\n const element = this.overlay.overlayRef.overlayElement;\n const list = element.querySelector('.increments');\n const items = list.querySelectorAll('novo-list-item');\n const item = items[index];\n if (item) {\n list.scrollTop = (item as HTMLElement).offsetTop;\n }\n }\n\n hourOneFormatRequired(hourInput: string): boolean {\n return hourInput === 'h1' || hourInput === '1h';\n }\n\n protected formatTime(value: string) {\n try {\n const [dateTimeValue, formatted] = this.dateFormatService.parseString(value, this.military, 'time');\n if (!isNaN(dateTimeValue.getUTCDate())) {\n const dt = new Date(dateTimeValue);\n this.dispatchOnChange(dt);\n } else {\n this.dispatchOnChange(null);\n }\n } catch (err) {}\n }\n\n save(): void {\n this.onSave.emit();\n }\n\n cancel(): void {\n this.onCancel.emit();\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// Vendor\nimport { IMaskModule } from 'angular-imask';\n// APP\nimport { NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoTimePickerElement } from './TimePicker';\nimport { NovoTimePickerInputElement } from './TimePickerInput';\n\n@NgModule({\n imports: [CommonModule, FormsModule, IMaskModule, NovoOverlayModule, NovoListModule, NovoButtonModule],\n declarations: [NovoTimePickerElement, NovoTimePickerInputElement],\n exports: [NovoTimePickerElement, NovoTimePickerInputElement],\n})\nexport class NovoTimePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4","i6.NovoTimePickerElement"],"mappings":"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"}
|