@aquera/ngx-smart-table 0.0.2-alpha
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/README.md +152 -0
- package/aquera-ngx-smart-table.d.ts +5 -0
- package/esm2020/aquera-ngx-smart-table.mjs +5 -0
- package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +63 -0
- package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +115 -0
- package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +206 -0
- package/esm2020/lib/builder/components/column-list/column-list.component.mjs +125 -0
- package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +105 -0
- package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +132 -0
- package/esm2020/lib/builder/definition-builder.module.mjs +70 -0
- package/esm2020/lib/builder/models/builder-state.interface.mjs +5 -0
- package/esm2020/lib/builder/services/definition-builder.service.mjs +251 -0
- package/esm2020/lib/builder/services/definition-export.service.mjs +167 -0
- package/esm2020/lib/builder/services/definition-import.service.mjs +193 -0
- package/esm2020/lib/builder/services/sample-data-generator.service.mjs +126 -0
- package/esm2020/lib/builder/utils/config-validator.util.mjs +165 -0
- package/esm2020/lib/builder/utils/typescript-generator.util.mjs +206 -0
- package/esm2020/lib/editors/index.mjs +9 -0
- package/esm2020/lib/editors/nile-autocomplete-editor.mjs +228 -0
- package/esm2020/lib/editors/nile-calendar-editor.mjs +214 -0
- package/esm2020/lib/editors/nile-date-picker-editor.mjs +227 -0
- package/esm2020/lib/editors/nile-input-editor.mjs +235 -0
- package/esm2020/lib/editors/nile-select-editor.mjs +317 -0
- package/esm2020/lib/factories/column-config.factory.mjs +231 -0
- package/esm2020/lib/models/autosave-config.interface.mjs +8 -0
- package/esm2020/lib/models/base-column-config.class.mjs +253 -0
- package/esm2020/lib/models/cell-strategies.interface.mjs +6 -0
- package/esm2020/lib/models/cell-types.mjs +147 -0
- package/esm2020/lib/models/column-action.interface.mjs +6 -0
- package/esm2020/lib/models/column-config.interface.mjs +43 -0
- package/esm2020/lib/models/column-config.utils.mjs +101 -0
- package/esm2020/lib/models/row-action.interface.mjs +5 -0
- package/esm2020/lib/models/row-validator.interface.mjs +2 -0
- package/esm2020/lib/models/schema-validation.interface.mjs +2 -0
- package/esm2020/lib/models/sheet-action.interface.mjs +5 -0
- package/esm2020/lib/models/sheet-config.interface.mjs +5 -0
- package/esm2020/lib/models/table-config.interface.mjs +106 -0
- package/esm2020/lib/models/table-validator.interface.mjs +2 -0
- package/esm2020/lib/models/workbook-action.interface.mjs +5 -0
- package/esm2020/lib/models/workbook-config.interface.mjs +5 -0
- package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +24 -0
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +391 -0
- package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +103 -0
- package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +383 -0
- package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +232 -0
- package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +97 -0
- package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +157 -0
- package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +87 -0
- package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +167 -0
- package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +165 -0
- package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +112 -0
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +1246 -0
- package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +171 -0
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +489 -0
- package/esm2020/lib/renderer/directives/click-outside.directive.mjs +28 -0
- package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +108 -0
- package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +73 -0
- package/esm2020/lib/renderer/models/cell-state.interface.mjs +66 -0
- package/esm2020/lib/renderer/models/cell.class.mjs +389 -0
- package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +7 -0
- package/esm2020/lib/renderer/models/sheet-state.class.mjs +90 -0
- package/esm2020/lib/renderer/models/sheet-state.interface.mjs +5 -0
- package/esm2020/lib/renderer/models/table-state.class.mjs +841 -0
- package/esm2020/lib/renderer/models/table-state.interface.mjs +5 -0
- package/esm2020/lib/renderer/models/table-types.mjs +29 -0
- package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +7 -0
- package/esm2020/lib/renderer/models/workbook-state.class.mjs +174 -0
- package/esm2020/lib/renderer/models/workbook-state.interface.mjs +5 -0
- package/esm2020/lib/renderer/models/z-index.enum.mjs +55 -0
- package/esm2020/lib/schemas/table-config.schema.mjs +472 -0
- package/esm2020/lib/services/autosave.service.mjs +92 -0
- package/esm2020/lib/services/custom-validation-rules.util.mjs +124 -0
- package/esm2020/lib/services/json-schema-validator.service.mjs +216 -0
- package/esm2020/lib/services/row-validation.service.mjs +42 -0
- package/esm2020/lib/services/validation-logger.service.mjs +177 -0
- package/esm2020/lib/services/virtual-scroll.service.mjs +52 -0
- package/esm2020/lib/shared/shared-table-components.module.mjs +35 -0
- package/esm2020/lib/smart-table.module.mjs +124 -0
- package/esm2020/lib/strategies/default-editors.mjs +433 -0
- package/esm2020/lib/strategies/default-formatters.mjs +238 -0
- package/esm2020/lib/strategies/default-validators.mjs +327 -0
- package/esm2020/public-api.mjs +146 -0
- package/fesm2015/aquera-ngx-smart-table.mjs +11860 -0
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -0
- package/fesm2020/aquera-ngx-smart-table.mjs +11897 -0
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -0
- package/lib/builder/components/builder-preview/builder-preview.component.d.ts +31 -0
- package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +53 -0
- package/lib/builder/components/column-editor/column-editor.component.d.ts +69 -0
- package/lib/builder/components/column-list/column-list.component.d.ts +65 -0
- package/lib/builder/components/definition-builder/definition-builder.component.d.ts +58 -0
- package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +32 -0
- package/lib/builder/definition-builder.module.d.ts +15 -0
- package/lib/builder/models/builder-state.interface.d.ts +93 -0
- package/lib/builder/services/definition-builder.service.d.ts +80 -0
- package/lib/builder/services/definition-export.service.d.ts +59 -0
- package/lib/builder/services/definition-import.service.d.ts +31 -0
- package/lib/builder/services/sample-data-generator.service.d.ts +41 -0
- package/lib/builder/utils/config-validator.util.d.ts +32 -0
- package/lib/builder/utils/typescript-generator.util.d.ts +29 -0
- package/lib/editors/index.d.ts +8 -0
- package/lib/editors/nile-autocomplete-editor.d.ts +102 -0
- package/lib/editors/nile-calendar-editor.d.ts +89 -0
- package/lib/editors/nile-date-picker-editor.d.ts +95 -0
- package/lib/editors/nile-input-editor.d.ts +67 -0
- package/lib/editors/nile-select-editor.d.ts +109 -0
- package/lib/factories/column-config.factory.d.ts +73 -0
- package/lib/models/autosave-config.interface.d.ts +23 -0
- package/lib/models/base-column-config.class.d.ts +115 -0
- package/lib/models/cell-strategies.interface.d.ts +181 -0
- package/lib/models/cell-types.d.ts +337 -0
- package/lib/models/column-action.interface.d.ts +86 -0
- package/lib/models/column-config.interface.d.ts +272 -0
- package/lib/models/column-config.utils.d.ts +37 -0
- package/lib/models/row-action.interface.d.ts +86 -0
- package/lib/models/row-validator.interface.d.ts +37 -0
- package/lib/models/schema-validation.interface.d.ts +42 -0
- package/lib/models/sheet-action.interface.d.ts +59 -0
- package/lib/models/sheet-config.interface.d.ts +41 -0
- package/lib/models/table-config.interface.d.ts +245 -0
- package/lib/models/table-validator.interface.d.ts +40 -0
- package/lib/models/workbook-action.interface.d.ts +90 -0
- package/lib/models/workbook-config.interface.d.ts +107 -0
- package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +9 -0
- package/lib/renderer/components/st-cell/st-cell.component.d.ts +69 -0
- package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +39 -0
- package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +139 -0
- package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +81 -0
- package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +44 -0
- package/lib/renderer/components/st-header/st-header.component.d.ts +93 -0
- package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +42 -0
- package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +67 -0
- package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +98 -0
- package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +58 -0
- package/lib/renderer/components/st-table/st-table.component.d.ts +349 -0
- package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +77 -0
- package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +235 -0
- package/lib/renderer/directives/click-outside.directive.d.ts +10 -0
- package/lib/renderer/directives/st-column-resize.directive.d.ts +44 -0
- package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +15 -0
- package/lib/renderer/models/cell-state.interface.d.ts +118 -0
- package/lib/renderer/models/cell.class.d.ts +174 -0
- package/lib/renderer/models/row-validation-state.interface.d.ts +27 -0
- package/lib/renderer/models/sheet-state.class.d.ts +67 -0
- package/lib/renderer/models/sheet-state.interface.d.ts +55 -0
- package/lib/renderer/models/table-state.class.d.ts +313 -0
- package/lib/renderer/models/table-state.interface.d.ts +18 -0
- package/lib/renderer/models/table-types.d.ts +228 -0
- package/lib/renderer/models/table-validation-state.interface.d.ts +34 -0
- package/lib/renderer/models/workbook-state.class.d.ts +117 -0
- package/lib/renderer/models/workbook-state.interface.d.ts +71 -0
- package/lib/renderer/models/z-index.enum.d.ts +44 -0
- package/lib/schemas/table-config.schema.d.ts +455 -0
- package/lib/services/autosave.service.d.ts +73 -0
- package/lib/services/custom-validation-rules.util.d.ts +12 -0
- package/lib/services/json-schema-validator.service.d.ts +49 -0
- package/lib/services/row-validation.service.d.ts +17 -0
- package/lib/services/validation-logger.service.d.ts +87 -0
- package/lib/services/virtual-scroll.service.d.ts +44 -0
- package/lib/shared/shared-table-components.module.d.ts +9 -0
- package/lib/smart-table.module.d.ts +26 -0
- package/lib/strategies/default-editors.d.ts +109 -0
- package/lib/strategies/default-formatters.d.ts +116 -0
- package/lib/strategies/default-validators.d.ts +113 -0
- package/package.json +42 -0
- package/public-api.d.ts +70 -0
- package/src/lib/builder/README.md +30 -0
- package/src/lib/editors/README.md +303 -0
- package/src/lib/renderer/components/st-column-filter/README.md +286 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom editor using NileAutoComplete from @aquera/nile-elements
|
|
3
|
+
* Provides real-time suggestions as users type in table cells
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Custom editor that uses NileAutoComplete component
|
|
7
|
+
* @template T The value type (string by default)
|
|
8
|
+
*/
|
|
9
|
+
export class NileAutoCompleteEditor {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.eventListeners = [];
|
|
13
|
+
if (!options.options || options.options.length === 0) {
|
|
14
|
+
console.warn('NileAutoCompleteEditor requires options array to be provided');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
edit(context) {
|
|
18
|
+
if (!context.container) {
|
|
19
|
+
console.warn('NileAutoCompleteEditor requires a container element');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Create NileAutoComplete custom element using document.createElement
|
|
23
|
+
this.autocomplete = document.createElement('nile-autocomplete');
|
|
24
|
+
this.autocomplete.value = String(context.value ?? '');
|
|
25
|
+
this.autocomplete.className = 'st-cell-editor st-nile-autocomplete-editor';
|
|
26
|
+
// Apply inline styles for proper cell fitting
|
|
27
|
+
this.autocomplete.style.width = 'inherit';
|
|
28
|
+
this.autocomplete.style.height = 'inherit';
|
|
29
|
+
this.autocomplete.style.boxSizing = 'border-box';
|
|
30
|
+
// Apply all configuration options
|
|
31
|
+
this.applyOptions();
|
|
32
|
+
// Set allMenuItems property for autocomplete suggestions
|
|
33
|
+
this.setMenuItems();
|
|
34
|
+
// Set up event listeners
|
|
35
|
+
this.setupEventListeners(context);
|
|
36
|
+
// Clear container and append autocomplete
|
|
37
|
+
context.container.innerHTML = '';
|
|
38
|
+
context.container.appendChild(this.autocomplete);
|
|
39
|
+
// Auto focus
|
|
40
|
+
if (this.options?.autoFocus !== false) {
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
this.autocomplete?.focus();
|
|
43
|
+
}, 0);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Set allMenuItems property for autocomplete suggestions
|
|
48
|
+
* NileAutoComplete requires allMenuItems to be set as a property, not child elements
|
|
49
|
+
*/
|
|
50
|
+
setMenuItems() {
|
|
51
|
+
if (!this.autocomplete)
|
|
52
|
+
return;
|
|
53
|
+
const options = this.options.options || [];
|
|
54
|
+
// Convert options to string array for allMenuItems
|
|
55
|
+
const menuItems = options.map(opt => {
|
|
56
|
+
if (typeof opt === 'string') {
|
|
57
|
+
return opt;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// For AutoCompleteOption objects, use the label for display
|
|
61
|
+
return opt.label;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// Set the allMenuItems property directly on the element
|
|
65
|
+
this.autocomplete.allMenuItems = menuItems;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Apply all configuration options to the NileAutoComplete element
|
|
69
|
+
*/
|
|
70
|
+
applyOptions() {
|
|
71
|
+
if (!this.autocomplete)
|
|
72
|
+
return;
|
|
73
|
+
// Basic properties
|
|
74
|
+
if (this.options?.placeholder) {
|
|
75
|
+
this.autocomplete.placeholder = this.options.placeholder;
|
|
76
|
+
}
|
|
77
|
+
if (this.options?.disabled) {
|
|
78
|
+
this.autocomplete.disabled = this.options.disabled;
|
|
79
|
+
}
|
|
80
|
+
// Note: Some properties may not be available on NileAutoComplete
|
|
81
|
+
// Setting via attributes as fallback
|
|
82
|
+
if (this.options?.helpText) {
|
|
83
|
+
this.autocomplete.setAttribute('help-text', this.options.helpText);
|
|
84
|
+
}
|
|
85
|
+
// Size (if supported by NileAutoComplete)
|
|
86
|
+
if (this.options?.size) {
|
|
87
|
+
this.autocomplete.setAttribute('size', this.options.size);
|
|
88
|
+
}
|
|
89
|
+
// Behavior options - using attributes for properties that may not exist
|
|
90
|
+
if (this.options?.clearable) {
|
|
91
|
+
this.autocomplete.setAttribute('clearable', String(this.options.clearable));
|
|
92
|
+
}
|
|
93
|
+
if (this.options?.required) {
|
|
94
|
+
this.autocomplete.setAttribute('required', String(this.options.required));
|
|
95
|
+
}
|
|
96
|
+
// Styling options
|
|
97
|
+
if (this.options?.filled !== undefined) {
|
|
98
|
+
this.autocomplete.setAttribute('filled', String(this.options.filled));
|
|
99
|
+
}
|
|
100
|
+
if (this.options?.pill) {
|
|
101
|
+
this.autocomplete.setAttribute('pill', String(this.options.pill));
|
|
102
|
+
}
|
|
103
|
+
// Visual states - using attributes for properties that may not exist
|
|
104
|
+
if (this.options?.warning) {
|
|
105
|
+
this.autocomplete.setAttribute('warning', String(this.options.warning));
|
|
106
|
+
}
|
|
107
|
+
if (this.options?.error) {
|
|
108
|
+
this.autocomplete.setAttribute('error', String(this.options.error));
|
|
109
|
+
}
|
|
110
|
+
if (this.options?.success) {
|
|
111
|
+
this.autocomplete.setAttribute('success', String(this.options.success));
|
|
112
|
+
}
|
|
113
|
+
if (this.options?.errorMessage) {
|
|
114
|
+
this.autocomplete.setAttribute('error-message', this.options.errorMessage);
|
|
115
|
+
}
|
|
116
|
+
// Autocomplete specific options
|
|
117
|
+
if (this.options?.minSearchLength !== undefined) {
|
|
118
|
+
this.autocomplete.setAttribute('min-search-length', String(this.options.minSearchLength));
|
|
119
|
+
}
|
|
120
|
+
if (this.options?.maxSuggestions !== undefined) {
|
|
121
|
+
this.autocomplete.setAttribute('max-suggestions', String(this.options.maxSuggestions));
|
|
122
|
+
}
|
|
123
|
+
if (this.options?.caseSensitive !== undefined) {
|
|
124
|
+
this.autocomplete.setAttribute('case-sensitive', String(this.options.caseSensitive));
|
|
125
|
+
}
|
|
126
|
+
// Advanced options
|
|
127
|
+
if (this.options?.hoist) {
|
|
128
|
+
this.autocomplete.setAttribute('hoist', String(this.options.hoist));
|
|
129
|
+
}
|
|
130
|
+
if (this.options?.placement) {
|
|
131
|
+
this.autocomplete.setAttribute('placement', this.options.placement);
|
|
132
|
+
}
|
|
133
|
+
// Set portal attribute for proper dropdown rendering
|
|
134
|
+
this.autocomplete.setAttribute('portal', 'true');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Set up all event listeners with proper cleanup tracking
|
|
138
|
+
*/
|
|
139
|
+
setupEventListeners(context) {
|
|
140
|
+
if (!this.autocomplete)
|
|
141
|
+
return;
|
|
142
|
+
const validateOnSave = this.options?.validateOnSave !== false;
|
|
143
|
+
// Handle keyboard events (keydown is not replaced by custom events)
|
|
144
|
+
const keydownHandler = (e) => {
|
|
145
|
+
const keyEvent = e;
|
|
146
|
+
if (keyEvent.key === 'Enter') {
|
|
147
|
+
keyEvent.preventDefault();
|
|
148
|
+
keyEvent.stopPropagation();
|
|
149
|
+
this.saveValue(context, validateOnSave);
|
|
150
|
+
}
|
|
151
|
+
else if (keyEvent.key === 'Escape') {
|
|
152
|
+
keyEvent.preventDefault();
|
|
153
|
+
keyEvent.stopPropagation();
|
|
154
|
+
context.onCancel();
|
|
155
|
+
}
|
|
156
|
+
else if (keyEvent.key === 'Tab') {
|
|
157
|
+
keyEvent.preventDefault();
|
|
158
|
+
keyEvent.stopPropagation();
|
|
159
|
+
this.saveValue(context, validateOnSave);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
this.autocomplete.addEventListener('keydown', keydownHandler);
|
|
163
|
+
this.eventListeners.push({ event: 'keydown', handler: keydownHandler });
|
|
164
|
+
// Use nile-complete custom event for when user selects an autocomplete suggestion
|
|
165
|
+
const completeHandler = (e) => {
|
|
166
|
+
const customEvent = e;
|
|
167
|
+
// Save the selected value from autocomplete
|
|
168
|
+
if (customEvent.detail && customEvent.detail.value !== undefined) {
|
|
169
|
+
context.onSave(this.parseValue(customEvent.detail.value));
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
this.autocomplete.addEventListener('nile-complete', completeHandler);
|
|
173
|
+
this.eventListeners.push({ event: 'nile-complete', handler: completeHandler });
|
|
174
|
+
// Use native blur event (NileAutoComplete doesn't have nile-blur)
|
|
175
|
+
const blurHandler = (e) => {
|
|
176
|
+
const customEvent = e;
|
|
177
|
+
// Get current value directly from the component
|
|
178
|
+
const currentValue = customEvent.detail?.value ?? '';
|
|
179
|
+
// Save on blur - TableState coordination ensures only one cell is editing at a time
|
|
180
|
+
context.onSave(this.parseValue(currentValue));
|
|
181
|
+
};
|
|
182
|
+
this.autocomplete.addEventListener('blur', blurHandler);
|
|
183
|
+
this.eventListeners.push({ event: 'blur', handler: blurHandler });
|
|
184
|
+
// Use native input event for real-time value updates (NileAutoComplete doesn't have nile-input)
|
|
185
|
+
const inputHandler = () => {
|
|
186
|
+
const currentValue = this.autocomplete?.value ?? '';
|
|
187
|
+
context.onChange(this.parseValue(currentValue));
|
|
188
|
+
};
|
|
189
|
+
this.autocomplete.addEventListener('input', inputHandler);
|
|
190
|
+
this.eventListeners.push({ event: 'input', handler: inputHandler });
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Save value with optional validation
|
|
194
|
+
*/
|
|
195
|
+
saveValue(context, validate) {
|
|
196
|
+
if (!this.autocomplete)
|
|
197
|
+
return;
|
|
198
|
+
// Note: NileAutoComplete may not have validation methods
|
|
199
|
+
// Validation should be handled by the validator strategy instead
|
|
200
|
+
context.onSave(this.getCurrentValue());
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parse value to appropriate type
|
|
204
|
+
*/
|
|
205
|
+
parseValue(value) {
|
|
206
|
+
return value;
|
|
207
|
+
}
|
|
208
|
+
destroy() {
|
|
209
|
+
// Remove all event listeners
|
|
210
|
+
if (this.autocomplete) {
|
|
211
|
+
this.eventListeners.forEach(({ event, handler }) => {
|
|
212
|
+
this.autocomplete?.removeEventListener(event, handler);
|
|
213
|
+
});
|
|
214
|
+
this.eventListeners = [];
|
|
215
|
+
this.autocomplete.remove();
|
|
216
|
+
this.autocomplete = undefined;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
focus() {
|
|
220
|
+
this.autocomplete?.focus();
|
|
221
|
+
}
|
|
222
|
+
getCurrentValue() {
|
|
223
|
+
if (!this.autocomplete)
|
|
224
|
+
return '';
|
|
225
|
+
return (this.autocomplete.value ?? '');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1hdXRvY29tcGxldGUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtYXV0b2NvbXBsZXRlLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFtRkg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUE2QixPQUFzQztRQUF0QyxZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUYzRCxtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFHNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztTQUM5RTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsT0FBNkI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3BFLE9BQU87U0FDUjtRQUVELHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyw0Q0FBNEMsQ0FBQztRQUUzRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZ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SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVBdXRvQ29tcGxldGUgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFByb3ZpZGVzIHJlYWwtdGltZSBzdWdnZXN0aW9ucyBhcyB1c2VycyB0eXBlIGluIHRhYmxlIGNlbGxzXG4gKi9cblxuaW1wb3J0IHsgQ2VsbEVkaXRvciwgQ2VsbEVkaXRvckNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0b2NvbXBsZXRlIG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlT3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUF1dG9Db21wbGV0ZUVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbGVBdXRvQ29tcGxldGVFZGl0b3JPcHRpb25zIHtcbiAgLy8gT3B0aW9ucyBjb25maWd1cmF0aW9uIChSRVFVSVJFRClcbiAgLyoqIEFycmF5IG9mIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucyAtIHN1cHBvcnRzIGJvdGggc2ltcGxlIHN0cmluZyBhcnJheSBvciBkZXRhaWxlZCBBdXRvQ29tcGxldGVPcHRpb24gb2JqZWN0cyAqL1xuICBvcHRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSB8IHN0cmluZ1tdO1xuICBcbiAgLy8gQmFzaWMgcHJvcGVydGllc1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB0byBzaG93IGFzIGEgaGludCB3aGVuIHRoZSBzZWFyY2ggaXMgZW1wdHkgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlIHRoZSBhdXRvY29tcGxldGUgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSBiZWxvdyB0aGUgY29udHJvbCAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIGF1dG9jb21wbGV0ZSBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBcbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAvKiogQWRkcyBjbGVhciBidXR0b24gd2hlbiB2YWx1ZSBpcyBub3QgZW1wdHkgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIGF1dG9jb21wbGV0ZSByZXF1aXJlZCAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBBdXRvLWZvY3VzIHRoZSBpbnB1dCB3aGVuIGVkaXRvciBvcGVucyAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICAvKiogU2VsZWN0IGFsbCB0ZXh0IHdoZW4gZm9jdXNlZCAqL1xuICBzZWxlY3RPbkZvY3VzPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZpc3VhbCBzdGF0ZXNcbiAgLyoqIFdhcm5pbmcgc3RhdGUgc3R5bGluZyAqL1xuICB3YXJuaW5nPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIHN0YXRlIHN0eWxpbmcgKi9cbiAgZXJyb3I/OiBib29sZWFuO1xuICAvKiogU3VjY2VzcyBzdGF0ZSBzdHlsaW5nICovXG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgXG4gIC8vIEF1dG9jb21wbGV0ZSBzcGVjaWZpYyBvcHRpb25zXG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBzaG93aW5nIHN1Z2dlc3Rpb25zICovXG4gIG1pblNlYXJjaExlbmd0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHN1Z2dlc3Rpb25zIHRvIHNob3cgKi9cbiAgbWF4U3VnZ2VzdGlvbnM/OiBudW1iZXI7XG4gIC8qKiBDYXNlLXNlbnNpdGl2ZSBtYXRjaGluZyAqL1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgLyoqIEZpbHRlciBtb2RlIGZvciBtYXRjaGluZyBzdWdnZXN0aW9ucyAqL1xuICBmaWx0ZXJNb2RlPzogJ3N0YXJ0c1dpdGgnIHwgJ2NvbnRhaW5zJyB8ICdjdXN0b20nO1xuICAvKiogQ3VzdG9tIGZpbHRlciBmdW5jdGlvbiBmb3IgbWF0Y2hpbmcgKi9cbiAgY3VzdG9tRmlsdGVyPzogKGlucHV0OiBzdHJpbmcsIG9wdGlvbjogQXV0b0NvbXBsZXRlT3B0aW9uKSA9PiBib29sZWFuO1xuICBcbiAgLy8gU3R5bGluZyBvcHRpb25zXG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBhdXRvY29tcGxldGUgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICBcbiAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBzdWdnZXN0aW9ucyBkcm9wZG93biAqL1xuICBwbGFjZW1lbnQ/OiAndG9wJyB8ICdib3R0b20nO1xuICBcbiAgLy8gVmFsaWRhdGlvblxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVBdXRvQ29tcGxldGUgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGJ5IGRlZmF1bHQpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlQXV0b0NvbXBsZXRlRWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlPzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5pbGVBdXRvQ29tcGxldGVFZGl0b3JPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLm9wdGlvbnMgfHwgb3B0aW9ucy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQXV0b0NvbXBsZXRlRWRpdG9yIHJlcXVpcmVzIG9wdGlvbnMgYXJyYXkgdG8gYmUgcHJvdmlkZWQnKTtcbiAgICB9XG4gIH1cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQXV0b0NvbXBsZXRlRWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgTmlsZUF1dG9Db21wbGV0ZSBjdXN0b20gZWxlbWVudCB1c2luZyBkb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWF1dG9jb21wbGV0ZScpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLnZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUgPz8gJycpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWF1dG9jb21wbGV0ZS1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5zdHlsZS53aWR0aCA9ICdpbmhlcml0JztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5hdXRvY29tcGxldGUuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuXG4gICAgLy8gU2V0IGFsbE1lbnVJdGVtcyBwcm9wZXJ0eSBmb3IgYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRNZW51SXRlbXMoKTtcblxuICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dCk7XG5cbiAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCBhdXRvY29tcGxldGVcbiAgICBjb250ZXh0LmNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmF1dG9jb21wbGV0ZSk7XG5cbiAgICAvLyBBdXRvIGZvY3VzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYXV0b0ZvY3VzICE9PSBmYWxzZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGxNZW51SXRlbXMgcHJvcGVydHkgZm9yIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICAgKiBOaWxlQXV0b0NvbXBsZXRlIHJlcXVpcmVzIGFsbE1lbnVJdGVtcyB0byBiZSBzZXQgYXMgYSBwcm9wZXJ0eSwgbm90IGNoaWxkIGVsZW1lbnRzXG4gICAqL1xuICBwcml2YXRlIHNldE1lbnVJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLm9wdGlvbnMgfHwgW107XG4gICAgXG4gICAgLy8gQ29udmVydCBvcHRpb25zIHRvIHN0cmluZyBhcnJheSBmb3IgYWxsTWVudUl0ZW1zXG4gICAgY29uc3QgbWVudUl0ZW1zOiBzdHJpbmdbXSA9IG9wdGlvbnMubWFwKG9wdCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBBdXRvQ29tcGxldGVPcHRpb24gb2JqZWN0cywgdXNlIHRoZSBsYWJlbCBmb3IgZGlzcGxheVxuICAgICAgICByZXR1cm4gb3B0LmxhYmVsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRoZSBhbGxNZW51SXRlbXMgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIGVsZW1lbnRcbiAgICAodGhpcy5hdXRvY29tcGxldGUgYXMgYW55KS5hbGxNZW51SXRlbXMgPSBtZW51SXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgTmlsZUF1dG9Db21wbGV0ZSBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICAvLyBCYXNpYyBwcm9wZXJ0aWVzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5kaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBTb21lIHByb3BlcnRpZXMgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gTmlsZUF1dG9Db21wbGV0ZVxuICAgIC8vIFNldHRpbmcgdmlhIGF0dHJpYnV0ZXMgYXMgZmFsbGJhY2tcbiAgICBpZiAodGhpcy5vcHRpb25zPy5oZWxwVGV4dCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdoZWxwLXRleHQnLCB0aGlzLm9wdGlvbnMuaGVscFRleHQpO1xuICAgIH1cblxuICAgIC8vIFNpemUgKGlmIHN1cHBvcnRlZCBieSBOaWxlQXV0b0NvbXBsZXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNpemUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnc2l6ZScsIHRoaXMub3B0aW9ucy5zaXplKTtcbiAgICB9XG5cbiAgICAvLyBCZWhhdmlvciBvcHRpb25zIC0gdXNpbmcgYXR0cmlidXRlcyBmb3IgcHJvcGVydGllcyB0aGF0IG1heSBub3QgZXhpc3RcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jbGVhcmFibGUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnY2xlYXJhYmxlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsIFN0cmluZyh0aGlzLm9wdGlvbnMucmVxdWlyZWQpKTtcbiAgICB9XG5cbiAgICAvLyBTdHlsaW5nIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdmaWxsZWQnLCBTdHJpbmcodGhpcy5vcHRpb25zLmZpbGxlZCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBpbGwpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgncGlsbCcsIFN0cmluZyh0aGlzLm9wdGlvbnMucGlsbCkpO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXMgLSB1c2luZyBhdHRyaWJ1dGVzIGZvciBwcm9wZXJ0aWVzIHRoYXQgbWF5IG5vdCBleGlzdFxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lndhcm5pbmcpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnd2FybmluZycsIFN0cmluZyh0aGlzLm9wdGlvbnMud2FybmluZykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2Vycm9yJywgU3RyaW5nKHRoaXMub3B0aW9ucy5lcnJvcikpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnc3VjY2VzcycsIFN0cmluZyh0aGlzLm9wdGlvbnMuc3VjY2VzcykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdlcnJvci1tZXNzYWdlJywgdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0b2NvbXBsZXRlIHNwZWNpZmljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5taW5TZWFyY2hMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdtaW4tc2VhcmNoLWxlbmd0aCcsIFN0cmluZyh0aGlzLm9wdGlvbnMubWluU2VhcmNoTGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubWF4U3VnZ2VzdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdtYXgtc3VnZ2VzdGlvbnMnLCBTdHJpbmcodGhpcy5vcHRpb25zLm1heFN1Z2dlc3Rpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY2FzZVNlbnNpdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2Nhc2Utc2Vuc2l0aXZlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5jYXNlU2Vuc2l0aXZlKSk7XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmhvaXN0KSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2hvaXN0JywgU3RyaW5nKHRoaXMub3B0aW9ucy5ob2lzdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdwbGFjZW1lbnQnLCB0aGlzLm9wdGlvbnMucGxhY2VtZW50KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgcG9ydGFsIGF0dHJpYnV0ZSBmb3IgcHJvcGVyIGRyb3Bkb3duIHJlbmRlcmluZ1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgncG9ydGFsJywgJ3RydWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucz8udmFsaWRhdGVPblNhdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gSGFuZGxlIGtleWJvYXJkIGV2ZW50cyAoa2V5ZG93biBpcyBub3QgcmVwbGFjZWQgYnkgY3VzdG9tIGV2ZW50cylcbiAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5RXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuaWxlLWNvbXBsZXRlIGN1c3RvbSBldmVudCBmb3Igd2hlbiB1c2VyIHNlbGVjdHMgYW4gYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25cbiAgICBjb25zdCBjb21wbGV0ZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGVkIHZhbHVlIGZyb20gYXV0b2NvbXBsZXRlXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuZGV0YWlsICYmIGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXN0b21FdmVudC5kZXRhaWwudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY29tcGxldGUnLCBjb21wbGV0ZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jb21wbGV0ZScsIGhhbmRsZXI6IGNvbXBsZXRlSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuYXRpdmUgYmx1ciBldmVudCAoTmlsZUF1dG9Db21wbGV0ZSBkb2Vzbid0IGhhdmUgbmlsZS1ibHVyKVxuICAgIGNvbnN0IGJsdXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAvLyBHZXQgY3VycmVudCB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWUgPz8gJyc7XG4gICAgICAvLyBTYXZlIG9uIGJsdXIgLSBUYWJsZVN0YXRlIGNvb3JkaW5hdGlvbiBlbnN1cmVzIG9ubHkgb25lIGNlbGwgaXMgZWRpdGluZyBhdCBhIHRpbWVcbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBibHVySGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdibHVyJywgaGFuZGxlcjogYmx1ckhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmF0aXZlIGlucHV0IGV2ZW50IGZvciByZWFsLXRpbWUgdmFsdWUgdXBkYXRlcyAoTmlsZUF1dG9Db21wbGV0ZSBkb2Vzbid0IGhhdmUgbmlsZS1pbnB1dClcbiAgICBjb25zdCBpbnB1dEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmF1dG9jb21wbGV0ZT8udmFsdWUgPz8gJyc7XG4gICAgICBjb250ZXh0Lm9uQ2hhbmdlKHRoaXMucGFyc2VWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaW5wdXRIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2lucHV0JywgaGFuZGxlcjogaW5wdXRIYW5kbGVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICAvLyBOb3RlOiBOaWxlQXV0b0NvbXBsZXRlIG1heSBub3QgaGF2ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSB2YWxpZGF0b3Igc3RyYXRlZ3kgaW5zdGVhZFxuICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIHRvIGFwcHJvcHJpYXRlIHR5cGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5yZW1vdmUoKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5hdXRvY29tcGxldGUpIHJldHVybiAnJyBhcyB1bmtub3duIGFzIFQ7XG4gICAgcmV0dXJuICh0aGlzLmF1dG9jb21wbGV0ZS52YWx1ZSA/PyAnJykgYXMgdW5rbm93biBhcyBUO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom editor using NileCalendar from @aquera/nile-elements
|
|
3
|
+
* Provides date selection functionality for table cells
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Custom editor that uses NileCalendar component for date selection
|
|
7
|
+
* @template T The value type (string by default, formatted as YYYY-MM-DD)
|
|
8
|
+
*/
|
|
9
|
+
export class NileCalendarEditor {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.eventListeners = [];
|
|
13
|
+
}
|
|
14
|
+
edit(context) {
|
|
15
|
+
if (!context.container) {
|
|
16
|
+
console.warn('NileCalendarEditor requires a container element');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Create NileCalendar custom element using document.createElement
|
|
20
|
+
this.calendar = document.createElement('nile-calendar');
|
|
21
|
+
// Set initial value (NileCalendar expects Date object)
|
|
22
|
+
if (context.value) {
|
|
23
|
+
const dateValue = String(context.value);
|
|
24
|
+
// Convert string to Date object
|
|
25
|
+
const date = new Date(dateValue);
|
|
26
|
+
if (!isNaN(date.getTime())) {
|
|
27
|
+
this.calendar.value = date;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
this.calendar.className = 'st-cell-editor st-nile-calendar-editor';
|
|
31
|
+
// Apply inline styles for proper cell fitting
|
|
32
|
+
this.calendar.style.width = 'inherit';
|
|
33
|
+
this.calendar.style.height = 'inherit';
|
|
34
|
+
this.calendar.style.boxSizing = 'border-box';
|
|
35
|
+
// Apply all configuration options
|
|
36
|
+
this.applyOptions();
|
|
37
|
+
// Set up event listeners
|
|
38
|
+
this.setupEventListeners(context);
|
|
39
|
+
// Clear container and append calendar
|
|
40
|
+
context.container.innerHTML = '';
|
|
41
|
+
context.container.appendChild(this.calendar);
|
|
42
|
+
// Auto focus
|
|
43
|
+
if (this.options?.autoFocus !== false) {
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
this.calendar?.focus();
|
|
46
|
+
}, 0);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Apply all configuration options to the NileCalendar element
|
|
51
|
+
*/
|
|
52
|
+
applyOptions() {
|
|
53
|
+
if (!this.calendar)
|
|
54
|
+
return;
|
|
55
|
+
// Date format (default: ISO format)
|
|
56
|
+
const dateFormat = this.options?.dateFormat || 'YYYY-MM-DD';
|
|
57
|
+
this.calendar.setAttribute('dateFormat', dateFormat);
|
|
58
|
+
// Basic properties
|
|
59
|
+
if (this.options?.disabled) {
|
|
60
|
+
this.calendar.setAttribute('disabled', String(this.options.disabled));
|
|
61
|
+
}
|
|
62
|
+
if (this.options?.placeholder) {
|
|
63
|
+
this.calendar.setAttribute('placeholder', this.options.placeholder);
|
|
64
|
+
}
|
|
65
|
+
if (this.options?.helpText) {
|
|
66
|
+
this.calendar.setAttribute('help-text', this.options.helpText);
|
|
67
|
+
}
|
|
68
|
+
// Behavior options
|
|
69
|
+
if (this.options?.allowClear) {
|
|
70
|
+
this.calendar.setAttribute('allowClear', String(this.options.allowClear));
|
|
71
|
+
}
|
|
72
|
+
if (this.options?.doubleClickUnselect) {
|
|
73
|
+
this.calendar.setAttribute('doubleClickUnselect', String(this.options.doubleClickUnselect));
|
|
74
|
+
}
|
|
75
|
+
if (this.options?.showMonthDropdown) {
|
|
76
|
+
this.calendar.setAttribute('showMonthDropdown', String(this.options.showMonthDropdown));
|
|
77
|
+
}
|
|
78
|
+
if (this.options?.showYearDropdown) {
|
|
79
|
+
this.calendar.setAttribute('showYearDropdown', String(this.options.showYearDropdown));
|
|
80
|
+
}
|
|
81
|
+
if (this.options?.showManualInputs) {
|
|
82
|
+
this.calendar.setAttribute('showManualInputs', String(this.options.showManualInputs));
|
|
83
|
+
}
|
|
84
|
+
// Year range
|
|
85
|
+
if (this.options?.startYear) {
|
|
86
|
+
this.calendar.setAttribute('startYear', String(this.options.startYear));
|
|
87
|
+
}
|
|
88
|
+
if (this.options?.endYear) {
|
|
89
|
+
this.calendar.setAttribute('endYear', String(this.options.endYear));
|
|
90
|
+
}
|
|
91
|
+
// Allowed dates range
|
|
92
|
+
if (this.options?.allowedDates) {
|
|
93
|
+
this.calendar.setAttribute('allowedDates', JSON.stringify(this.options.allowedDates));
|
|
94
|
+
}
|
|
95
|
+
// Visual states - using attributes for properties that may not exist
|
|
96
|
+
if (this.options?.warning) {
|
|
97
|
+
this.calendar.setAttribute('warning', String(this.options.warning));
|
|
98
|
+
}
|
|
99
|
+
if (this.options?.error) {
|
|
100
|
+
this.calendar.setAttribute('error', String(this.options.error));
|
|
101
|
+
}
|
|
102
|
+
if (this.options?.success) {
|
|
103
|
+
this.calendar.setAttribute('success', String(this.options.success));
|
|
104
|
+
}
|
|
105
|
+
if (this.options?.errorMessage) {
|
|
106
|
+
this.calendar.setAttribute('error-message', this.options.errorMessage);
|
|
107
|
+
}
|
|
108
|
+
// Size
|
|
109
|
+
if (this.options?.size) {
|
|
110
|
+
this.calendar.setAttribute('size', this.options.size);
|
|
111
|
+
}
|
|
112
|
+
// Portal rendering (default: true)
|
|
113
|
+
if (this.options?.portal !== false) {
|
|
114
|
+
this.calendar.setAttribute('portal', 'true');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Set up all event listeners with proper cleanup tracking
|
|
119
|
+
*/
|
|
120
|
+
setupEventListeners(context) {
|
|
121
|
+
if (!this.calendar)
|
|
122
|
+
return;
|
|
123
|
+
const validateOnSave = this.options?.validateOnSave !== false;
|
|
124
|
+
// Handle keyboard events (keydown is not replaced by custom events)
|
|
125
|
+
const keydownHandler = (e) => {
|
|
126
|
+
const keyEvent = e;
|
|
127
|
+
if (keyEvent.key === 'Enter') {
|
|
128
|
+
keyEvent.preventDefault();
|
|
129
|
+
keyEvent.stopPropagation();
|
|
130
|
+
this.saveValue(context, validateOnSave);
|
|
131
|
+
}
|
|
132
|
+
else if (keyEvent.key === 'Escape') {
|
|
133
|
+
keyEvent.preventDefault();
|
|
134
|
+
keyEvent.stopPropagation();
|
|
135
|
+
context.onCancel();
|
|
136
|
+
}
|
|
137
|
+
else if (keyEvent.key === 'Tab') {
|
|
138
|
+
keyEvent.preventDefault();
|
|
139
|
+
keyEvent.stopPropagation();
|
|
140
|
+
this.saveValue(context, validateOnSave);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
this.calendar.addEventListener('keydown', keydownHandler);
|
|
144
|
+
this.eventListeners.push({ event: 'keydown', handler: keydownHandler });
|
|
145
|
+
// Use nile-change custom event for date selection
|
|
146
|
+
const changeHandler = (e) => {
|
|
147
|
+
const customEvent = e;
|
|
148
|
+
context.onSave(this.parseValue(customEvent.detail.value));
|
|
149
|
+
};
|
|
150
|
+
this.calendar.addEventListener('nile-change', changeHandler);
|
|
151
|
+
this.eventListeners.push({ event: 'nile-change', handler: changeHandler });
|
|
152
|
+
// Use nile-blur custom event (save on blur)
|
|
153
|
+
const blurHandler = (e) => {
|
|
154
|
+
const customEvent = e;
|
|
155
|
+
// Note: NileCalendar may not have validation methods
|
|
156
|
+
// Validation should be handled by the validator strategy instead
|
|
157
|
+
context.onSave(this.parseValue(customEvent.detail.value));
|
|
158
|
+
};
|
|
159
|
+
this.calendar.addEventListener('nile-blur', blurHandler);
|
|
160
|
+
this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });
|
|
161
|
+
// Handle clear button if enabled
|
|
162
|
+
if (this.options?.allowClear) {
|
|
163
|
+
const clearHandler = (e) => {
|
|
164
|
+
context.onSave(this.parseValue(''));
|
|
165
|
+
};
|
|
166
|
+
this.calendar.addEventListener('nile-clear', clearHandler);
|
|
167
|
+
this.eventListeners.push({ event: 'nile-clear', handler: clearHandler });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Save value with optional validation
|
|
172
|
+
*/
|
|
173
|
+
saveValue(context, validate) {
|
|
174
|
+
if (!this.calendar)
|
|
175
|
+
return;
|
|
176
|
+
// Note: NileCalendar may not have validation methods
|
|
177
|
+
// Validation should be handled by the validator strategy instead
|
|
178
|
+
context.onSave(this.getCurrentValue());
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Parse value to appropriate type
|
|
182
|
+
*/
|
|
183
|
+
parseValue(value) {
|
|
184
|
+
// Value is already in the correct format from nile-calendar
|
|
185
|
+
return (value || '');
|
|
186
|
+
}
|
|
187
|
+
destroy() {
|
|
188
|
+
// Remove all event listeners
|
|
189
|
+
if (this.calendar) {
|
|
190
|
+
this.eventListeners.forEach(({ event, handler }) => {
|
|
191
|
+
this.calendar?.removeEventListener(event, handler);
|
|
192
|
+
});
|
|
193
|
+
this.eventListeners = [];
|
|
194
|
+
this.calendar.remove();
|
|
195
|
+
this.calendar = undefined;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
focus() {
|
|
199
|
+
this.calendar?.focus();
|
|
200
|
+
}
|
|
201
|
+
getCurrentValue() {
|
|
202
|
+
if (!this.calendar)
|
|
203
|
+
return '';
|
|
204
|
+
// NileCalendar.value is a Date object, convert to ISO string format
|
|
205
|
+
if (this.calendar.value instanceof Date) {
|
|
206
|
+
const year = this.calendar.value.getFullYear();
|
|
207
|
+
const month = String(this.calendar.value.getMonth() + 1).padStart(2, '0');
|
|
208
|
+
const day = String(this.calendar.value.getDate()).padStart(2, '0');
|
|
209
|
+
return `${year}-${month}-${day}`;
|
|
210
|
+
}
|
|
211
|
+
return '';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jYWxlbmRhci1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2VkaXRvcnMvbmlsZS1jYWxlbmRhci1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBdUVIOzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IsWUFBNkIsT0FBbUM7UUFBbkMsWUFBTyxHQUFQLE9BQU8sQ0FBNEI7UUFGeEQsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO0lBRVgsQ0FBQztJQUVwRSxJQUFJLENBQUMsT0FBNkI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ2hFLE9BQU87U0FDUjtRQUVELGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFeEQsdURBQXVEO1FBQ3ZELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLGdDQUFnQztZQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDNUI7U0FDRjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLHdDQUF3QyxDQUFDO1FBRW5FLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLElBQUks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c3RvbSBlZGl0b3IgdXNpbmcgTmlsZUNhbGVuZGFyIGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBQcm92aWRlcyBkYXRlIHNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5IGZvciB0YWJsZSBjZWxsc1xuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIERhdGUgcmFuZ2UgY29uZmlndXJhdGlvbiBmb3IgcmVzdHJpY3RpbmcgYWxsb3dlZCBkYXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsbG93ZWREYXRlc1JhbmdlIHtcbiAgLyoqIFN0YXJ0IGRhdGUgaW4gSVNPIGZvcm1hdCAoWVlZWS1NTS1ERCkgKi9cbiAgc3RhcnREYXRlPzogc3RyaW5nO1xuICAvKiogRW5kIGRhdGUgaW4gSVNPIGZvcm1hdCAoWVlZWS1NTS1ERCkgKi9cbiAgZW5kRGF0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUNhbGVuZGFyRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZUNhbGVuZGFyRWRpdG9yT3B0aW9ucyB7XG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgdG8gc2hvdyB3aGVuIG5vIGRhdGUgaXMgc2VsZWN0ZWQgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlIHRoZSBjYWxlbmRhciBjb250cm9sICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEhlbHAgdGV4dCB0byBkaXNwbGF5IGJlbG93IHRoZSBjb250cm9sICovXG4gIGhlbHBUZXh0Pzogc3RyaW5nO1xuICBcbiAgLy8gRGF0ZSBjb25maWd1cmF0aW9uXG4gIC8qKiBEYXRlIGZvcm1hdCBmb3IgZGlzcGxheSAoZGVmYXVsdDogJ1lZWVktTU0tREQnKSAqL1xuICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuICAvKiogU3RhcnQgeWVhciBmb3IgeWVhciBkcm9wZG93biAqL1xuICBzdGFydFllYXI/OiBudW1iZXI7XG4gIC8qKiBFbmQgeWVhciBmb3IgeWVhciBkcm9wZG93biAqL1xuICBlbmRZZWFyPzogbnVtYmVyO1xuICAvKiogRGF0ZSByYW5nZSByZXN0cmljdGlvbnMgKi9cbiAgYWxsb3dlZERhdGVzPzogQWxsb3dlZERhdGVzUmFuZ2U7XG4gIFxuICAvLyBCZWhhdmlvciBvcHRpb25zXG4gIC8qKiBTaG93IGNsZWFyIGJ1dHRvbiBmb3IgcmVtb3ZpbmcgZGF0ZSAqL1xuICBhbGxvd0NsZWFyPzogYm9vbGVhbjtcbiAgLyoqIEFsbG93IGRvdWJsZS1jbGljayB0byB1bnNlbGVjdCBkYXRlICovXG4gIGRvdWJsZUNsaWNrVW5zZWxlY3Q/OiBib29sZWFuO1xuICAvKiogU2hvdyBtb250aCBzZWxlY3Rpb24gZHJvcGRvd24gKi9cbiAgc2hvd01vbnRoRHJvcGRvd24/OiBib29sZWFuO1xuICAvKiogU2hvdyB5ZWFyIHNlbGVjdGlvbiBkcm9wZG93biAqL1xuICBzaG93WWVhckRyb3Bkb3duPzogYm9vbGVhbjtcbiAgLyoqIEFsbG93IG1hbnVhbCBkYXRlIGlucHV0IHZpYSB0ZXh0IGZpZWxkcyAqL1xuICBzaG93TWFudWFsSW5wdXRzPzogYm9vbGVhbjtcbiAgLyoqIEF1dG8tZm9jdXMgdGhlIGNhbGVuZGFyIHdoZW4gZWRpdG9yIG9wZW5zICovXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIFxuICAvLyBWaXN1YWwgc3RhdGVzXG4gIC8qKiBXYXJuaW5nIHN0YXRlIHN0eWxpbmcgKi9cbiAgd2FybmluZz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBzdGF0ZSBzdHlsaW5nICovXG4gIGVycm9yPzogYm9vbGVhbjtcbiAgLyoqIFN1Y2Nlc3Mgc3RhdGUgc3R5bGluZyAqL1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIFxuICAvLyBTdHlsaW5nXG4gIC8qKiBTaXplIG9mIHRoZSBjYWxlbmRhciBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBcbiAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAvKiogVXNlIHBvcnRhbCBmb3IgZHJvcGRvd24gcmVuZGVyaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgcG9ydGFsPzogYm9vbGVhbjtcbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDdXN0b20gZWRpdG9yIHRoYXQgdXNlcyBOaWxlQ2FsZW5kYXIgY29tcG9uZW50IGZvciBkYXRlIHNlbGVjdGlvblxuICogQHRlbXBsYXRlIFQgVGhlIHZhbHVlIHR5cGUgKHN0cmluZyBieSBkZWZhdWx0LCBmb3JtYXR0ZWQgYXMgWVlZWS1NTS1ERClcbiAqL1xuZXhwb3J0IGNsYXNzIE5pbGVDYWxlbmRhckVkaXRvcjxUID0gc3RyaW5nPiBpbXBsZW1lbnRzIENlbGxFZGl0b3I8VD4ge1xuICBwcml2YXRlIGNhbGVuZGFyPzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM/OiBOaWxlQ2FsZW5kYXJFZGl0b3JPcHRpb25zKSB7fVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVDYWxlbmRhckVkaXRvciByZXF1aXJlcyBhIGNvbnRhaW5lciBlbGVtZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIE5pbGVDYWxlbmRhciBjdXN0b20gZWxlbWVudCB1c2luZyBkb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgdGhpcy5jYWxlbmRhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtY2FsZW5kYXInKTtcbiAgICBcbiAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZSAoTmlsZUNhbGVuZGFyIGV4cGVjdHMgRGF0ZSBvYmplY3QpXG4gICAgaWYgKGNvbnRleHQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IFN0cmluZyhjb250ZXh0LnZhbHVlKTtcbiAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIERhdGUgb2JqZWN0XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVZhbHVlKTtcbiAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIudmFsdWUgPSBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmNhbGVuZGFyLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWNhbGVuZGFyLWVkaXRvcic7XG4gICAgXG4gICAgLy8gQXBwbHkgaW5saW5lIHN0eWxlcyBmb3IgcHJvcGVyIGNlbGwgZml0dGluZ1xuICAgIHRoaXMuY2FsZW5kYXIuc3R5bGUud2lkdGggPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5jYWxlbmRhci5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5jYWxlbmRhci5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG4gICAgXG4gICAgLy8gQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG4gICAgXG4gICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0KTtcbiAgICBcbiAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCBjYWxlbmRhclxuICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgIGNvbnRleHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FsZW5kYXIpO1xuICAgIFxuICAgIC8vIEF1dG8gZm9jdXNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvRm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jYWxlbmRhcj8uZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlQ2FsZW5kYXIgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyKSByZXR1cm47XG4gICAgXG4gICAgLy8gRGF0ZSBmb3JtYXQgKGRlZmF1bHQ6IElTTyBmb3JtYXQpXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMub3B0aW9ucz8uZGF0ZUZvcm1hdCB8fCAnWVlZWS1NTS1ERCc7XG4gICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ2RhdGVGb3JtYXQnLCBkYXRlRm9ybWF0KTtcbiAgICBcbiAgICAvLyBCYXNpYyBwcm9wZXJ0aWVzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIFN0cmluZyh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnaGVscC10ZXh0JywgdGhpcy5vcHRpb25zLmhlbHBUZXh0KTtcbiAgICB9XG4gICAgXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmFsbG93Q2xlYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdhbGxvd0NsZWFyJywgU3RyaW5nKHRoaXMub3B0aW9ucy5hbGxvd0NsZWFyKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRvdWJsZUNsaWNrVW5zZWxlY3QpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdkb3VibGVDbGlja1Vuc2VsZWN0JywgU3RyaW5nKHRoaXMub3B0aW9ucy5kb3VibGVDbGlja1Vuc2VsZWN0KSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNob3dNb250aERyb3Bkb3duKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnc2hvd01vbnRoRHJvcGRvd24nLCBTdHJpbmcodGhpcy5vcHRpb25zLnNob3dNb250aERyb3Bkb3duKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNob3dZZWFyRHJvcGRvd24pIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdzaG93WWVhckRyb3Bkb3duJywgU3RyaW5nKHRoaXMub3B0aW9ucy5zaG93WWVhckRyb3Bkb3duKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNob3dNYW51YWxJbnB1dHMpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdzaG93TWFudWFsSW5wdXRzJywgU3RyaW5nKHRoaXMub3B0aW9ucy5zaG93TWFudWFsSW5wdXRzKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFllYXIgcmFuZ2VcbiAgICBpZiAodGhpcy5vcHRpb25zPy5zdGFydFllYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdzdGFydFllYXInLCBTdHJpbmcodGhpcy5vcHRpb25zLnN0YXJ0WWVhcikpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zPy5lbmRZZWFyKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnZW5kWWVhcicsIFN0cmluZyh0aGlzLm9wdGlvbnMuZW5kWWVhcikpO1xuICAgIH1cbiAgICBcbiAgICAvLyBBbGxvd2VkIGRhdGVzIHJhbmdlXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWxsb3dlZERhdGVzKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnYWxsb3dlZERhdGVzJywgSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zLmFsbG93ZWREYXRlcykpO1xuICAgIH1cbiAgICBcbiAgICAvLyBWaXN1YWwgc3RhdGVzIC0gdXNpbmcgYXR0cmlidXRlcyBmb3IgcHJvcGVydGllcyB0aGF0IG1heSBub3QgZXhpc3RcbiAgICBpZiAodGhpcy5vcHRpb25zPy53YXJuaW5nKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnd2FybmluZycsIFN0cmluZyh0aGlzLm9wdGlvbnMud2FybmluZykpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zPy5lcnJvcikge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ2Vycm9yJywgU3RyaW5nKHRoaXMub3B0aW9ucy5lcnJvcikpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zPy5zdWNjZXNzKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnc3VjY2VzcycsIFN0cmluZyh0aGlzLm9wdGlvbnMuc3VjY2VzcykpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zPy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdlcnJvci1tZXNzYWdlJywgdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNpemVcbiAgICBpZiAodGhpcy5vcHRpb25zPy5zaXplKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnc2l6ZScsIHRoaXMub3B0aW9ucy5zaXplKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUG9ydGFsIHJlbmRlcmluZyAoZGVmYXVsdDogdHJ1ZSlcbiAgICBpZiAodGhpcy5vcHRpb25zPy5wb3J0YWwgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgncG9ydGFsJywgJ3RydWUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGFsbCBldmVudCBsaXN0ZW5lcnMgd2l0aCBwcm9wZXIgY2xlYW51cCB0cmFja2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdmFsaWRhdGVPblNhdmUgPSB0aGlzLm9wdGlvbnM/LnZhbGlkYXRlT25TYXZlICE9PSBmYWxzZTtcbiAgICBcbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2F2ZVZhbHVlKGNvbnRleHQsIHZhbGlkYXRlT25TYXZlKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5RXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgY29udGV4dC5vbkNhbmNlbCgpO1xuICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdrZXlkb3duJywgaGFuZGxlcjoga2V5ZG93bkhhbmRsZXIgfSk7XG4gICAgXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBmb3IgZGF0ZSBzZWxlY3Rpb25cbiAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoY3VzdG9tRXZlbnQuZGV0YWlsLnZhbHVlKSk7XG4gICAgfTtcbiAgICB0aGlzLmNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNoYW5nZScsIGhhbmRsZXI6IGNoYW5nZUhhbmRsZXIgfSk7XG4gICAgXG4gICAgLy8gVXNlIG5pbGUtYmx1ciBjdXN0b20gZXZlbnQgKHNhdmUgb24gYmx1cilcbiAgICBjb25zdCBibHVySGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgLy8gTm90ZTogTmlsZUNhbGVuZGFyIG1heSBub3QgaGF2ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICAgIC8vIFZhbGlkYXRpb24gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIHZhbGlkYXRvciBzdHJhdGVneSBpbnN0ZWFkXG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoY3VzdG9tRXZlbnQuZGV0YWlsLnZhbHVlKSk7XG4gICAgfTtcbiAgICB0aGlzLmNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtYmx1cicsIGJsdXJIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtYmx1cicsIGhhbmRsZXI6IGJsdXJIYW5kbGVyIH0pO1xuICAgIFxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmFsbG93Q2xlYXIpIHtcbiAgICAgIGNvbnN0IGNsZWFySGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2xlYXInLCBjbGVhckhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNsZWFyJywgaGFuZGxlcjogY2xlYXJIYW5kbGVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHZhbHVlIHdpdGggb3B0aW9uYWwgdmFsaWRhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzYXZlVmFsdWUoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4sIHZhbGlkYXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyKSByZXR1cm47XG4gICAgXG4gICAgLy8gTm90ZTogTmlsZUNhbGVuZGFyIG1heSBub3QgaGF2ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSB2YWxpZGF0b3Igc3RyYXRlZ3kgaW5zdGVhZFxuICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIHRvIGFwcHJvcHJpYXRlIHR5cGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogVCB7XG4gICAgLy8gVmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgZnJvbSBuaWxlLWNhbGVuZGFyXG4gICAgcmV0dXJuICh2YWx1ZSB8fCAnJykgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVyc1xuICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmNhbGVuZGFyPy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLmNhbGVuZGFyLnJlbW92ZSgpO1xuICAgICAgdGhpcy5jYWxlbmRhciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGVuZGFyPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5jYWxlbmRhcikgcmV0dXJuICcnIGFzIHVua25vd24gYXMgVDtcbiAgICBcbiAgICAvLyBOaWxlQ2FsZW5kYXIudmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgY29udmVydCB0byBJU08gc3RyaW5nIGZvcm1hdFxuICAgIGlmICh0aGlzLmNhbGVuZGFyLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuY2FsZW5kYXIudmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKHRoaXMuY2FsZW5kYXIudmFsdWUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcodGhpcy5jYWxlbmRhci52YWx1ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YCBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiAnJyBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|