@api-client/ui 0.5.5 → 0.5.6
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/build/src/elements/highlight/MarkdownStyles.d.ts.map +1 -1
- package/build/src/elements/highlight/MarkdownStyles.js +0 -13
- package/build/src/elements/highlight/MarkdownStyles.js.map +1 -1
- package/build/src/elements/http/BodyEditor.d.ts +0 -13
- package/build/src/elements/http/BodyEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyEditor.js +0 -13
- package/build/src/elements/http/BodyEditor.js.map +1 -1
- package/build/src/elements/http/BodyTextEditor.d.ts +0 -13
- package/build/src/elements/http/BodyTextEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyTextEditor.js +0 -13
- package/build/src/elements/http/BodyTextEditor.js.map +1 -1
- package/build/src/elements/http/BodyUrlEncodedEditor.d.ts +0 -13
- package/build/src/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyUrlEncodedEditor.js +0 -13
- package/build/src/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/build/src/elements/http/UrlInput.d.ts +0 -13
- package/build/src/elements/http/UrlInput.d.ts.map +1 -1
- package/build/src/elements/http/UrlInput.js +0 -13
- package/build/src/elements/http/UrlInput.js.map +1 -1
- package/build/src/index.d.ts +2 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -0
- package/build/src/index.js.map +1 -1
- package/build/src/md/button/internals/button.styles.js +1 -1
- package/build/src/md/button/internals/button.styles.js.map +1 -1
- package/build/src/md/date/internals/DateTime.d.ts +0 -13
- package/build/src/md/date/internals/DateTime.d.ts.map +1 -1
- package/build/src/md/date/internals/DateTime.js +0 -13
- package/build/src/md/date/internals/DateTime.js.map +1 -1
- package/build/src/md/date-picker/index.d.ts +13 -0
- package/build/src/md/date-picker/index.d.ts.map +1 -0
- package/build/src/md/date-picker/index.js +13 -0
- package/build/src/md/date-picker/index.js.map +1 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.d.ts +4 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.d.ts.map +1 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.js +336 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.js.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.d.ts +159 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.d.ts.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.js +770 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.js.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.d.ts +93 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.d.ts.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.js +221 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.js.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-input.d.ts +108 -0
- package/build/src/md/date-picker/ui-date-picker-input.d.ts.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-input.js +397 -0
- package/build/src/md/date-picker/ui-date-picker-input.js.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.d.ts +119 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.d.ts.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.js +473 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.js.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal.d.ts +108 -0
- package/build/src/md/date-picker/ui-date-picker-modal.d.ts.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal.js +344 -0
- package/build/src/md/date-picker/ui-date-picker-modal.js.map +1 -0
- package/build/src/md/dialog/internals/Dialog.styles.d.ts.map +1 -1
- package/build/src/md/dialog/internals/Dialog.styles.js +1 -0
- package/build/src/md/dialog/internals/Dialog.styles.js.map +1 -1
- package/demo/elements/har/har2.json +1 -1
- package/demo/md/date-picker/date-picker.ts +301 -0
- package/demo/md/date-picker/index.html +171 -0
- package/demo/md/index.html +2 -0
- package/package.json +1 -1
- package/src/elements/highlight/MarkdownStyles.ts +0 -13
- package/src/elements/http/BodyEditor.ts +0 -13
- package/src/elements/http/BodyTextEditor.ts +0 -13
- package/src/elements/http/BodyUrlEncodedEditor.ts +0 -13
- package/src/elements/http/UrlInput.ts +0 -13
- package/src/index.ts +17 -0
- package/src/md/button/internals/button.styles.ts +1 -1
- package/src/md/date/internals/DateTime.ts +0 -14
- package/src/md/date-picker/README.md +184 -0
- package/src/md/date-picker/index.ts +17 -0
- package/src/md/date-picker/internals/DatePicker.styles.ts +338 -0
- package/src/md/date-picker/internals/DatePickerCalendar.ts +697 -0
- package/src/md/date-picker/internals/DatePickerUtils.ts +288 -0
- package/src/md/date-picker/ui-date-picker-input.ts +272 -0
- package/src/md/date-picker/ui-date-picker-modal-input.ts +371 -0
- package/src/md/date-picker/ui-date-picker-modal.ts +263 -0
- package/src/md/dialog/internals/Dialog.styles.ts +1 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { LitElement, html } from 'lit';
|
|
3
|
+
import { customElement, property, state, query } from 'lit/decorators.js';
|
|
4
|
+
import { inputStyles } from './internals/DatePicker.styles.js';
|
|
5
|
+
import { formatDate, parseDate } from './internals/DatePickerUtils.js';
|
|
6
|
+
import './internals/DatePickerCalendar.js';
|
|
7
|
+
import '../../md/text-field/ui-outlined-text-field.js';
|
|
8
|
+
import '../../md/icons/ui-icon.js';
|
|
9
|
+
/**
|
|
10
|
+
* A docked date picker that opens from a text field input.
|
|
11
|
+
* Ideal for forms and date selection in medium to large layouts.
|
|
12
|
+
*
|
|
13
|
+
* ## Usage
|
|
14
|
+
*
|
|
15
|
+
* ```html
|
|
16
|
+
* <ui-date-picker-input
|
|
17
|
+
* label="Select date"
|
|
18
|
+
* placeholder="MM/DD/YYYY"
|
|
19
|
+
* .value=${new Date()}
|
|
20
|
+
* ></ui-date-picker-input>
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ### Custom date format
|
|
24
|
+
* ```html
|
|
25
|
+
* <ui-date-picker-input
|
|
26
|
+
* label="Birth date"
|
|
27
|
+
* .dateFormat=${date => date.toLocaleDateString('en-GB')}
|
|
28
|
+
* ></ui-date-picker-input>
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
let UiDatePickerInput = (() => {
|
|
32
|
+
let _classDecorators = [customElement('ui-date-picker-input')];
|
|
33
|
+
let _classDescriptor;
|
|
34
|
+
let _classExtraInitializers = [];
|
|
35
|
+
let _classThis;
|
|
36
|
+
let _classSuper = LitElement;
|
|
37
|
+
let _label_decorators;
|
|
38
|
+
let _label_initializers = [];
|
|
39
|
+
let _label_extraInitializers = [];
|
|
40
|
+
let _placeholder_decorators;
|
|
41
|
+
let _placeholder_initializers = [];
|
|
42
|
+
let _placeholder_extraInitializers = [];
|
|
43
|
+
let _value_decorators;
|
|
44
|
+
let _value_initializers = [];
|
|
45
|
+
let _value_extraInitializers = [];
|
|
46
|
+
let _disabled_decorators;
|
|
47
|
+
let _disabled_initializers = [];
|
|
48
|
+
let _disabled_extraInitializers = [];
|
|
49
|
+
let _required_decorators;
|
|
50
|
+
let _required_initializers = [];
|
|
51
|
+
let _required_extraInitializers = [];
|
|
52
|
+
let _errorMessage_decorators;
|
|
53
|
+
let _errorMessage_initializers = [];
|
|
54
|
+
let _errorMessage_extraInitializers = [];
|
|
55
|
+
let _error_decorators;
|
|
56
|
+
let _error_initializers = [];
|
|
57
|
+
let _error_extraInitializers = [];
|
|
58
|
+
let _minDate_decorators;
|
|
59
|
+
let _minDate_initializers = [];
|
|
60
|
+
let _minDate_extraInitializers = [];
|
|
61
|
+
let _maxDate_decorators;
|
|
62
|
+
let _maxDate_initializers = [];
|
|
63
|
+
let _maxDate_extraInitializers = [];
|
|
64
|
+
let _disabledDates_decorators;
|
|
65
|
+
let _disabledDates_initializers = [];
|
|
66
|
+
let _disabledDates_extraInitializers = [];
|
|
67
|
+
let _locale_decorators;
|
|
68
|
+
let _locale_initializers = [];
|
|
69
|
+
let _locale_extraInitializers = [];
|
|
70
|
+
let _dateFormat_decorators;
|
|
71
|
+
let _dateFormat_initializers = [];
|
|
72
|
+
let _dateFormat_extraInitializers = [];
|
|
73
|
+
let __isOpen_decorators;
|
|
74
|
+
let __isOpen_initializers = [];
|
|
75
|
+
let __isOpen_extraInitializers = [];
|
|
76
|
+
let __inputValue_decorators;
|
|
77
|
+
let __inputValue_initializers = [];
|
|
78
|
+
let __inputValue_extraInitializers = [];
|
|
79
|
+
let __textField_decorators;
|
|
80
|
+
let __textField_initializers = [];
|
|
81
|
+
let __textField_extraInitializers = [];
|
|
82
|
+
var UiDatePickerInput = class extends _classSuper {
|
|
83
|
+
static { _classThis = this; }
|
|
84
|
+
static {
|
|
85
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
86
|
+
_label_decorators = [property({ type: String })];
|
|
87
|
+
_placeholder_decorators = [property({ type: String })];
|
|
88
|
+
_value_decorators = [property({ type: Object })];
|
|
89
|
+
_disabled_decorators = [property({ type: Boolean })];
|
|
90
|
+
_required_decorators = [property({ type: Boolean })];
|
|
91
|
+
_errorMessage_decorators = [property({ type: String })];
|
|
92
|
+
_error_decorators = [property({ type: Boolean })];
|
|
93
|
+
_minDate_decorators = [property({ type: Object })];
|
|
94
|
+
_maxDate_decorators = [property({ type: Object })];
|
|
95
|
+
_disabledDates_decorators = [property({ type: Array })];
|
|
96
|
+
_locale_decorators = [property({ type: String })];
|
|
97
|
+
_dateFormat_decorators = [property({ type: Object })];
|
|
98
|
+
__isOpen_decorators = [state()];
|
|
99
|
+
__inputValue_decorators = [state()];
|
|
100
|
+
__textField_decorators = [query('ui-outlined-text-field')];
|
|
101
|
+
__esDecorate(this, null, _label_decorators, { kind: "accessor", name: "label", static: false, private: false, access: { has: obj => "label" in obj, get: obj => obj.label, set: (obj, value) => { obj.label = value; } }, metadata: _metadata }, _label_initializers, _label_extraInitializers);
|
|
102
|
+
__esDecorate(this, null, _placeholder_decorators, { kind: "accessor", name: "placeholder", static: false, private: false, access: { has: obj => "placeholder" in obj, get: obj => obj.placeholder, set: (obj, value) => { obj.placeholder = value; } }, metadata: _metadata }, _placeholder_initializers, _placeholder_extraInitializers);
|
|
103
|
+
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
|
|
104
|
+
__esDecorate(this, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
|
|
105
|
+
__esDecorate(this, null, _required_decorators, { kind: "accessor", name: "required", static: false, private: false, access: { has: obj => "required" in obj, get: obj => obj.required, set: (obj, value) => { obj.required = value; } }, metadata: _metadata }, _required_initializers, _required_extraInitializers);
|
|
106
|
+
__esDecorate(this, null, _errorMessage_decorators, { kind: "accessor", name: "errorMessage", static: false, private: false, access: { has: obj => "errorMessage" in obj, get: obj => obj.errorMessage, set: (obj, value) => { obj.errorMessage = value; } }, metadata: _metadata }, _errorMessage_initializers, _errorMessage_extraInitializers);
|
|
107
|
+
__esDecorate(this, null, _error_decorators, { kind: "accessor", name: "error", static: false, private: false, access: { has: obj => "error" in obj, get: obj => obj.error, set: (obj, value) => { obj.error = value; } }, metadata: _metadata }, _error_initializers, _error_extraInitializers);
|
|
108
|
+
__esDecorate(this, null, _minDate_decorators, { kind: "accessor", name: "minDate", static: false, private: false, access: { has: obj => "minDate" in obj, get: obj => obj.minDate, set: (obj, value) => { obj.minDate = value; } }, metadata: _metadata }, _minDate_initializers, _minDate_extraInitializers);
|
|
109
|
+
__esDecorate(this, null, _maxDate_decorators, { kind: "accessor", name: "maxDate", static: false, private: false, access: { has: obj => "maxDate" in obj, get: obj => obj.maxDate, set: (obj, value) => { obj.maxDate = value; } }, metadata: _metadata }, _maxDate_initializers, _maxDate_extraInitializers);
|
|
110
|
+
__esDecorate(this, null, _disabledDates_decorators, { kind: "accessor", name: "disabledDates", static: false, private: false, access: { has: obj => "disabledDates" in obj, get: obj => obj.disabledDates, set: (obj, value) => { obj.disabledDates = value; } }, metadata: _metadata }, _disabledDates_initializers, _disabledDates_extraInitializers);
|
|
111
|
+
__esDecorate(this, null, _locale_decorators, { kind: "accessor", name: "locale", static: false, private: false, access: { has: obj => "locale" in obj, get: obj => obj.locale, set: (obj, value) => { obj.locale = value; } }, metadata: _metadata }, _locale_initializers, _locale_extraInitializers);
|
|
112
|
+
__esDecorate(this, null, _dateFormat_decorators, { kind: "accessor", name: "dateFormat", static: false, private: false, access: { has: obj => "dateFormat" in obj, get: obj => obj.dateFormat, set: (obj, value) => { obj.dateFormat = value; } }, metadata: _metadata }, _dateFormat_initializers, _dateFormat_extraInitializers);
|
|
113
|
+
__esDecorate(this, null, __isOpen_decorators, { kind: "accessor", name: "_isOpen", static: false, private: false, access: { has: obj => "_isOpen" in obj, get: obj => obj._isOpen, set: (obj, value) => { obj._isOpen = value; } }, metadata: _metadata }, __isOpen_initializers, __isOpen_extraInitializers);
|
|
114
|
+
__esDecorate(this, null, __inputValue_decorators, { kind: "accessor", name: "_inputValue", static: false, private: false, access: { has: obj => "_inputValue" in obj, get: obj => obj._inputValue, set: (obj, value) => { obj._inputValue = value; } }, metadata: _metadata }, __inputValue_initializers, __inputValue_extraInitializers);
|
|
115
|
+
__esDecorate(this, null, __textField_decorators, { kind: "accessor", name: "_textField", static: false, private: false, access: { has: obj => "_textField" in obj, get: obj => obj._textField, set: (obj, value) => { obj._textField = value; } }, metadata: _metadata }, __textField_initializers, __textField_extraInitializers);
|
|
116
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
117
|
+
UiDatePickerInput = _classThis = _classDescriptor.value;
|
|
118
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
119
|
+
}
|
|
120
|
+
static styles = inputStyles;
|
|
121
|
+
static shadowRootOptions = {
|
|
122
|
+
mode: 'open',
|
|
123
|
+
delegatesFocus: true,
|
|
124
|
+
};
|
|
125
|
+
#label_accessor_storage = __runInitializers(this, _label_initializers, ''
|
|
126
|
+
/**
|
|
127
|
+
* Placeholder text for the input
|
|
128
|
+
*/
|
|
129
|
+
);
|
|
130
|
+
/**
|
|
131
|
+
* The label for the input field
|
|
132
|
+
*/
|
|
133
|
+
get label() { return this.#label_accessor_storage; }
|
|
134
|
+
set label(value) { this.#label_accessor_storage = value; }
|
|
135
|
+
#placeholder_accessor_storage = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _placeholder_initializers, 'MM/DD/YYYY'
|
|
136
|
+
/**
|
|
137
|
+
* The currently selected date
|
|
138
|
+
*/
|
|
139
|
+
));
|
|
140
|
+
/**
|
|
141
|
+
* Placeholder text for the input
|
|
142
|
+
*/
|
|
143
|
+
get placeholder() { return this.#placeholder_accessor_storage; }
|
|
144
|
+
set placeholder(value) { this.#placeholder_accessor_storage = value; }
|
|
145
|
+
#value_accessor_storage = (__runInitializers(this, _placeholder_extraInitializers), __runInitializers(this, _value_initializers, null
|
|
146
|
+
/**
|
|
147
|
+
* Whether the date picker is disabled
|
|
148
|
+
*/
|
|
149
|
+
));
|
|
150
|
+
/**
|
|
151
|
+
* The currently selected date
|
|
152
|
+
*/
|
|
153
|
+
get value() { return this.#value_accessor_storage; }
|
|
154
|
+
set value(value) { this.#value_accessor_storage = value; }
|
|
155
|
+
#disabled_accessor_storage = (__runInitializers(this, _value_extraInitializers), __runInitializers(this, _disabled_initializers, false
|
|
156
|
+
/**
|
|
157
|
+
* Whether the input is required
|
|
158
|
+
*/
|
|
159
|
+
));
|
|
160
|
+
/**
|
|
161
|
+
* Whether the date picker is disabled
|
|
162
|
+
*/
|
|
163
|
+
get disabled() { return this.#disabled_accessor_storage; }
|
|
164
|
+
set disabled(value) { this.#disabled_accessor_storage = value; }
|
|
165
|
+
#required_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _required_initializers, false
|
|
166
|
+
/**
|
|
167
|
+
* Error message to display
|
|
168
|
+
*/
|
|
169
|
+
));
|
|
170
|
+
/**
|
|
171
|
+
* Whether the input is required
|
|
172
|
+
*/
|
|
173
|
+
get required() { return this.#required_accessor_storage; }
|
|
174
|
+
set required(value) { this.#required_accessor_storage = value; }
|
|
175
|
+
#errorMessage_accessor_storage = (__runInitializers(this, _required_extraInitializers), __runInitializers(this, _errorMessage_initializers, ''
|
|
176
|
+
/**
|
|
177
|
+
* Whether the input has an error state
|
|
178
|
+
*/
|
|
179
|
+
));
|
|
180
|
+
/**
|
|
181
|
+
* Error message to display
|
|
182
|
+
*/
|
|
183
|
+
get errorMessage() { return this.#errorMessage_accessor_storage; }
|
|
184
|
+
set errorMessage(value) { this.#errorMessage_accessor_storage = value; }
|
|
185
|
+
#error_accessor_storage = (__runInitializers(this, _errorMessage_extraInitializers), __runInitializers(this, _error_initializers, false
|
|
186
|
+
/**
|
|
187
|
+
* Minimum selectable date
|
|
188
|
+
*/
|
|
189
|
+
));
|
|
190
|
+
/**
|
|
191
|
+
* Whether the input has an error state
|
|
192
|
+
*/
|
|
193
|
+
get error() { return this.#error_accessor_storage; }
|
|
194
|
+
set error(value) { this.#error_accessor_storage = value; }
|
|
195
|
+
#minDate_accessor_storage = (__runInitializers(this, _error_extraInitializers), __runInitializers(this, _minDate_initializers, undefined
|
|
196
|
+
/**
|
|
197
|
+
* Maximum selectable date
|
|
198
|
+
*/
|
|
199
|
+
));
|
|
200
|
+
/**
|
|
201
|
+
* Minimum selectable date
|
|
202
|
+
*/
|
|
203
|
+
get minDate() { return this.#minDate_accessor_storage; }
|
|
204
|
+
set minDate(value) { this.#minDate_accessor_storage = value; }
|
|
205
|
+
#maxDate_accessor_storage = (__runInitializers(this, _minDate_extraInitializers), __runInitializers(this, _maxDate_initializers, undefined
|
|
206
|
+
/**
|
|
207
|
+
* Array of disabled dates
|
|
208
|
+
*/
|
|
209
|
+
));
|
|
210
|
+
/**
|
|
211
|
+
* Maximum selectable date
|
|
212
|
+
*/
|
|
213
|
+
get maxDate() { return this.#maxDate_accessor_storage; }
|
|
214
|
+
set maxDate(value) { this.#maxDate_accessor_storage = value; }
|
|
215
|
+
#disabledDates_accessor_storage = (__runInitializers(this, _maxDate_extraInitializers), __runInitializers(this, _disabledDates_initializers, undefined
|
|
216
|
+
/**
|
|
217
|
+
* Locale for date formatting
|
|
218
|
+
*/
|
|
219
|
+
));
|
|
220
|
+
/**
|
|
221
|
+
* Array of disabled dates
|
|
222
|
+
*/
|
|
223
|
+
get disabledDates() { return this.#disabledDates_accessor_storage; }
|
|
224
|
+
set disabledDates(value) { this.#disabledDates_accessor_storage = value; }
|
|
225
|
+
#locale_accessor_storage = (__runInitializers(this, _disabledDates_extraInitializers), __runInitializers(this, _locale_initializers, undefined
|
|
226
|
+
/**
|
|
227
|
+
* Custom date format function
|
|
228
|
+
*/
|
|
229
|
+
));
|
|
230
|
+
/**
|
|
231
|
+
* Locale for date formatting
|
|
232
|
+
*/
|
|
233
|
+
get locale() { return this.#locale_accessor_storage; }
|
|
234
|
+
set locale(value) { this.#locale_accessor_storage = value; }
|
|
235
|
+
#dateFormat_accessor_storage = (__runInitializers(this, _locale_extraInitializers), __runInitializers(this, _dateFormat_initializers, undefined));
|
|
236
|
+
/**
|
|
237
|
+
* Custom date format function
|
|
238
|
+
*/
|
|
239
|
+
get dateFormat() { return this.#dateFormat_accessor_storage; }
|
|
240
|
+
set dateFormat(value) { this.#dateFormat_accessor_storage = value; }
|
|
241
|
+
#_isOpen_accessor_storage = (__runInitializers(this, _dateFormat_extraInitializers), __runInitializers(this, __isOpen_initializers, false));
|
|
242
|
+
get _isOpen() { return this.#_isOpen_accessor_storage; }
|
|
243
|
+
set _isOpen(value) { this.#_isOpen_accessor_storage = value; }
|
|
244
|
+
#_inputValue_accessor_storage = (__runInitializers(this, __isOpen_extraInitializers), __runInitializers(this, __inputValue_initializers, ''));
|
|
245
|
+
get _inputValue() { return this.#_inputValue_accessor_storage; }
|
|
246
|
+
set _inputValue(value) { this.#_inputValue_accessor_storage = value; }
|
|
247
|
+
#_textField_accessor_storage = (__runInitializers(this, __inputValue_extraInitializers), __runInitializers(this, __textField_initializers, void 0));
|
|
248
|
+
get _textField() { return this.#_textField_accessor_storage; }
|
|
249
|
+
set _textField(value) { this.#_textField_accessor_storage = value; }
|
|
250
|
+
connectedCallback() {
|
|
251
|
+
super.connectedCallback();
|
|
252
|
+
this._updateInputValue();
|
|
253
|
+
document.addEventListener('click', this._handleDocumentClick.bind(this));
|
|
254
|
+
}
|
|
255
|
+
disconnectedCallback() {
|
|
256
|
+
super.disconnectedCallback();
|
|
257
|
+
document.removeEventListener('click', this._handleDocumentClick.bind(this));
|
|
258
|
+
}
|
|
259
|
+
willUpdate(changedProperties) {
|
|
260
|
+
if (changedProperties.has('value')) {
|
|
261
|
+
this._updateInputValue();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
updated(changedProperties) {
|
|
265
|
+
if (changedProperties.has('_isOpen') && this._isOpen) {
|
|
266
|
+
// Set anchor name on text field for CSS Anchor Positioning API
|
|
267
|
+
if (this._textField) {
|
|
268
|
+
// Using setProperty since anchorName is not in TypeScript types yet
|
|
269
|
+
this._textField.style.setProperty('anchor-name', '--ui-date-picker-anchor');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
_updateInputValue() {
|
|
274
|
+
if (this.value) {
|
|
275
|
+
this._inputValue = this.dateFormat ? this.dateFormat(this.value) : formatDate(this.value, this.locale);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
this._inputValue = '';
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
_handleDocumentClick(event) {
|
|
282
|
+
if (!this.contains(event.target)) {
|
|
283
|
+
this._isOpen = false;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
_handleInputClick() {
|
|
287
|
+
if (!this.disabled) {
|
|
288
|
+
this._isOpen = !this._isOpen;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
_handleInputChange(event) {
|
|
292
|
+
const target = event.target;
|
|
293
|
+
this._inputValue = target.value;
|
|
294
|
+
const parsedDate = parseDate(this._inputValue);
|
|
295
|
+
if (parsedDate) {
|
|
296
|
+
this.value = parsedDate;
|
|
297
|
+
this._dispatchChangeEvent();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
_handleCalendarDateSelect(event) {
|
|
301
|
+
this.value = event.detail.date;
|
|
302
|
+
this._isOpen = false;
|
|
303
|
+
this._dispatchChangeEvent();
|
|
304
|
+
}
|
|
305
|
+
_handleCalendarDateCancel() {
|
|
306
|
+
this._isOpen = false;
|
|
307
|
+
}
|
|
308
|
+
_handleKeyDown(event) {
|
|
309
|
+
switch (event.key) {
|
|
310
|
+
case 'Escape':
|
|
311
|
+
this._isOpen = false;
|
|
312
|
+
break;
|
|
313
|
+
case 'ArrowDown':
|
|
314
|
+
if (!this._isOpen) {
|
|
315
|
+
event.preventDefault();
|
|
316
|
+
this._isOpen = true;
|
|
317
|
+
}
|
|
318
|
+
break;
|
|
319
|
+
case 'Enter':
|
|
320
|
+
if (this._isOpen) {
|
|
321
|
+
event.preventDefault();
|
|
322
|
+
this._isOpen = false;
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
_dispatchChangeEvent() {
|
|
328
|
+
this.dispatchEvent(new CustomEvent('change', {
|
|
329
|
+
detail: {
|
|
330
|
+
value: this.value,
|
|
331
|
+
formattedValue: this._inputValue,
|
|
332
|
+
},
|
|
333
|
+
bubbles: true,
|
|
334
|
+
composed: true,
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
_renderCalendarIcon() {
|
|
338
|
+
return html `
|
|
339
|
+
<ui-icon slot="suffix" icon="calendarToday" @click=${this._handleInputClick} style="cursor: pointer;"></ui-icon>
|
|
340
|
+
`;
|
|
341
|
+
}
|
|
342
|
+
_renderDropdown() {
|
|
343
|
+
if (!this._isOpen)
|
|
344
|
+
return null;
|
|
345
|
+
const currentDate = this.value || new Date();
|
|
346
|
+
return html `
|
|
347
|
+
<div class="dropdown-container">
|
|
348
|
+
<ui-date-picker-calendar
|
|
349
|
+
.year=${currentDate.getFullYear()}
|
|
350
|
+
.month=${currentDate.getMonth()}
|
|
351
|
+
.selectedDate=${this.value}
|
|
352
|
+
.minDate=${this.minDate}
|
|
353
|
+
.maxDate=${this.maxDate}
|
|
354
|
+
.disabledDates=${this.disabledDates}
|
|
355
|
+
.locale=${this.locale}
|
|
356
|
+
showActions
|
|
357
|
+
@date-select=${this._handleCalendarDateSelect}
|
|
358
|
+
@date-cancel=${this._handleCalendarDateCancel}
|
|
359
|
+
></ui-date-picker-calendar>
|
|
360
|
+
</div>
|
|
361
|
+
`;
|
|
362
|
+
}
|
|
363
|
+
render() {
|
|
364
|
+
return html `
|
|
365
|
+
<div class="input-container">
|
|
366
|
+
${this._isOpen ? html `<div class="backdrop" @click=${() => (this._isOpen = false)}></div>` : ''}
|
|
367
|
+
<ui-outlined-text-field
|
|
368
|
+
.label=${this.label}
|
|
369
|
+
.placeholder=${this.placeholder}
|
|
370
|
+
.value=${this._inputValue}
|
|
371
|
+
.disabled=${this.disabled}
|
|
372
|
+
.required=${this.required}
|
|
373
|
+
.errorMessage=${this.errorMessage}
|
|
374
|
+
.error=${this.error}
|
|
375
|
+
readonly
|
|
376
|
+
@click=${this._handleInputClick}
|
|
377
|
+
@input=${this._handleInputChange}
|
|
378
|
+
@keydown=${this._handleKeyDown}
|
|
379
|
+
>
|
|
380
|
+
${this._renderCalendarIcon()}
|
|
381
|
+
</ui-outlined-text-field>
|
|
382
|
+
${this._renderDropdown()}
|
|
383
|
+
</div>
|
|
384
|
+
`;
|
|
385
|
+
}
|
|
386
|
+
constructor() {
|
|
387
|
+
super(...arguments);
|
|
388
|
+
__runInitializers(this, __textField_extraInitializers);
|
|
389
|
+
}
|
|
390
|
+
static {
|
|
391
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
return UiDatePickerInput = _classThis;
|
|
395
|
+
})();
|
|
396
|
+
export { UiDatePickerInput };
|
|
397
|
+
//# sourceMappingURL=ui-date-picker-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-date-picker-input.js","sourceRoot":"","sources":["../../../../src/md/date-picker/ui-date-picker-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, TemplateResult } from 'lit'\nimport { customElement, property, state, query } from 'lit/decorators.js'\nimport { inputStyles } from './internals/DatePicker.styles.js'\nimport { formatDate, parseDate } from './internals/DatePickerUtils.js'\nimport type { DateSelectEvent } from './internals/DatePickerCalendar.js'\nimport './internals/DatePickerCalendar.js'\nimport '../../md/text-field/ui-outlined-text-field.js'\nimport '../../md/icons/ui-icon.js'\n\n/**\n * A docked date picker that opens from a text field input.\n * Ideal for forms and date selection in medium to large layouts.\n *\n * ## Usage\n *\n * ```html\n * <ui-date-picker-input\n * label=\"Select date\"\n * placeholder=\"MM/DD/YYYY\"\n * .value=${new Date()}\n * ></ui-date-picker-input>\n * ```\n *\n * ### Custom date format\n * ```html\n * <ui-date-picker-input\n * label=\"Birth date\"\n * .dateFormat=${date => date.toLocaleDateString('en-GB')}\n * ></ui-date-picker-input>\n * ```\n */\n@customElement('ui-date-picker-input')\nexport class UiDatePickerInput extends LitElement {\n static override styles = inputStyles\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n }\n\n /**\n * The label for the input field\n */\n @property({ type: String }) accessor label = ''\n\n /**\n * Placeholder text for the input\n */\n @property({ type: String }) accessor placeholder = 'MM/DD/YYYY'\n\n /**\n * The currently selected date\n */\n @property({ type: Object }) accessor value: Date | null = null\n\n /**\n * Whether the date picker is disabled\n */\n @property({ type: Boolean }) accessor disabled = false\n\n /**\n * Whether the input is required\n */\n @property({ type: Boolean }) accessor required = false\n\n /**\n * Error message to display\n */\n @property({ type: String }) accessor errorMessage = ''\n\n /**\n * Whether the input has an error state\n */\n @property({ type: Boolean }) accessor error = false\n\n /**\n * Minimum selectable date\n */\n @property({ type: Object }) accessor minDate: Date | undefined = undefined\n\n /**\n * Maximum selectable date\n */\n @property({ type: Object }) accessor maxDate: Date | undefined = undefined\n\n /**\n * Array of disabled dates\n */\n @property({ type: Array }) accessor disabledDates: Date[] | undefined = undefined\n\n /**\n * Locale for date formatting\n */\n @property({ type: String }) accessor locale: string | undefined = undefined\n\n /**\n * Custom date format function\n */\n @property({ type: Object }) accessor dateFormat: ((date: Date) => string) | undefined = undefined\n\n @state() private accessor _isOpen = false\n\n @state() private accessor _inputValue = ''\n\n @query('ui-outlined-text-field') private accessor _textField!: HTMLElement\n\n override connectedCallback(): void {\n super.connectedCallback()\n this._updateInputValue()\n document.addEventListener('click', this._handleDocumentClick.bind(this))\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n document.removeEventListener('click', this._handleDocumentClick.bind(this))\n }\n\n override willUpdate(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('value')) {\n this._updateInputValue()\n }\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('_isOpen') && this._isOpen) {\n // Set anchor name on text field for CSS Anchor Positioning API\n if (this._textField) {\n // Using setProperty since anchorName is not in TypeScript types yet\n this._textField.style.setProperty('anchor-name', '--ui-date-picker-anchor')\n }\n }\n }\n\n private _updateInputValue(): void {\n if (this.value) {\n this._inputValue = this.dateFormat ? this.dateFormat(this.value) : formatDate(this.value, this.locale)\n } else {\n this._inputValue = ''\n }\n }\n\n private _handleDocumentClick(event: Event): void {\n if (!this.contains(event.target as Node)) {\n this._isOpen = false\n }\n }\n\n private _handleInputClick(): void {\n if (!this.disabled) {\n this._isOpen = !this._isOpen\n }\n }\n\n private _handleInputChange(event: Event): void {\n const target = event.target as HTMLInputElement\n this._inputValue = target.value\n\n const parsedDate = parseDate(this._inputValue)\n if (parsedDate) {\n this.value = parsedDate\n this._dispatchChangeEvent()\n }\n }\n\n private _handleCalendarDateSelect(event: CustomEvent<DateSelectEvent>): void {\n this.value = event.detail.date\n this._isOpen = false\n this._dispatchChangeEvent()\n }\n\n private _handleCalendarDateCancel(): void {\n this._isOpen = false\n }\n\n private _handleKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n this._isOpen = false\n break\n case 'ArrowDown':\n if (!this._isOpen) {\n event.preventDefault()\n this._isOpen = true\n }\n break\n case 'Enter':\n if (this._isOpen) {\n event.preventDefault()\n this._isOpen = false\n }\n break\n }\n }\n\n private _dispatchChangeEvent(): void {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {\n value: this.value,\n formattedValue: this._inputValue,\n },\n bubbles: true,\n composed: true,\n })\n )\n }\n\n private _renderCalendarIcon(): TemplateResult {\n return html`\n <ui-icon slot=\"suffix\" icon=\"calendarToday\" @click=${this._handleInputClick} style=\"cursor: pointer;\"></ui-icon>\n `\n }\n\n private _renderDropdown(): TemplateResult | null {\n if (!this._isOpen) return null\n\n const currentDate = this.value || new Date()\n\n return html`\n <div class=\"dropdown-container\">\n <ui-date-picker-calendar\n .year=${currentDate.getFullYear()}\n .month=${currentDate.getMonth()}\n .selectedDate=${this.value}\n .minDate=${this.minDate}\n .maxDate=${this.maxDate}\n .disabledDates=${this.disabledDates}\n .locale=${this.locale}\n showActions\n @date-select=${this._handleCalendarDateSelect}\n @date-cancel=${this._handleCalendarDateCancel}\n ></ui-date-picker-calendar>\n </div>\n `\n }\n\n override render(): TemplateResult {\n return html`\n <div class=\"input-container\">\n ${this._isOpen ? html`<div class=\"backdrop\" @click=${() => (this._isOpen = false)}></div>` : ''}\n <ui-outlined-text-field\n .label=${this.label}\n .placeholder=${this.placeholder}\n .value=${this._inputValue}\n .disabled=${this.disabled}\n .required=${this.required}\n .errorMessage=${this.errorMessage}\n .error=${this.error}\n readonly\n @click=${this._handleInputClick}\n @input=${this._handleInputChange}\n @keydown=${this._handleKeyDown}\n >\n ${this._renderCalendarIcon()}\n </ui-outlined-text-field>\n ${this._renderDropdown()}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-date-picker-input': UiDatePickerInput\n }\n\n interface HTMLElementEventMap {\n change: CustomEvent<{\n value: Date | null\n formattedValue: string\n }>\n }\n}\n"]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
2
|
+
import { DateRange } from './internals/DatePickerUtils.js';
|
|
3
|
+
import '../../md/dialog/ui-dialog.js';
|
|
4
|
+
import '../../md/button/ui-button.js';
|
|
5
|
+
import '../../md/icon-button/ui-icon-button.js';
|
|
6
|
+
import '../../md/text-field/ui-outlined-text-field.js';
|
|
7
|
+
import '../../md/icons/ui-icon.js';
|
|
8
|
+
export interface ModalInputDatePickerChangeEvent {
|
|
9
|
+
range: DateRange;
|
|
10
|
+
formattedRange: {
|
|
11
|
+
start: string | null;
|
|
12
|
+
end: string | null;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A modal date input picker for manual date entry using keyboard.
|
|
17
|
+
* Ideal for compact layouts and precise date entry.
|
|
18
|
+
*
|
|
19
|
+
* ## Usage
|
|
20
|
+
*
|
|
21
|
+
* ```html
|
|
22
|
+
* <ui-date-picker-modal-input
|
|
23
|
+
* .open=${true}
|
|
24
|
+
* .selectedRange=${{ start: new Date(), end: null }}
|
|
25
|
+
* @date-input-change=${this.handleRangeChange}
|
|
26
|
+
* @close=${this.handleClose}
|
|
27
|
+
* ></ui-date-picker-modal-input>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* ### Single date mode
|
|
31
|
+
* ```html
|
|
32
|
+
* <ui-date-picker-modal-input
|
|
33
|
+
* .rangeMode=${false}
|
|
34
|
+
* .selectedDate=${new Date()}
|
|
35
|
+
* ></ui-date-picker-modal-input>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare class UiDatePickerModalInput extends LitElement {
|
|
39
|
+
static styles: import("lit").CSSResult;
|
|
40
|
+
/**
|
|
41
|
+
* Whether the modal is open
|
|
42
|
+
*/
|
|
43
|
+
accessor open: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* The modal title
|
|
46
|
+
*/
|
|
47
|
+
accessor title: string;
|
|
48
|
+
/**
|
|
49
|
+
* Whether to use range mode (two date inputs) or single date mode
|
|
50
|
+
*/
|
|
51
|
+
accessor rangeMode: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Label for the start date (or single date)
|
|
54
|
+
*/
|
|
55
|
+
accessor startLabel: string;
|
|
56
|
+
/**
|
|
57
|
+
* Label for the end date (only used in range mode)
|
|
58
|
+
*/
|
|
59
|
+
accessor endLabel: string;
|
|
60
|
+
/**
|
|
61
|
+
* Placeholder for date inputs
|
|
62
|
+
*/
|
|
63
|
+
accessor placeholder: string;
|
|
64
|
+
/**
|
|
65
|
+
* The selected date (single mode)
|
|
66
|
+
*/
|
|
67
|
+
accessor selectedDate: Date | null;
|
|
68
|
+
/**
|
|
69
|
+
* The selected date range (range mode)
|
|
70
|
+
*/
|
|
71
|
+
accessor selectedRange: DateRange | null;
|
|
72
|
+
/**
|
|
73
|
+
* Minimum selectable date
|
|
74
|
+
*/
|
|
75
|
+
accessor minDate: Date | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Maximum selectable date
|
|
78
|
+
*/
|
|
79
|
+
accessor maxDate: Date | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Locale for date formatting
|
|
82
|
+
*/
|
|
83
|
+
accessor locale: string | undefined;
|
|
84
|
+
private accessor _startInput;
|
|
85
|
+
private accessor _endInput;
|
|
86
|
+
private accessor _startError;
|
|
87
|
+
private accessor _endError;
|
|
88
|
+
connectedCallback(): void;
|
|
89
|
+
willUpdate(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
90
|
+
private _updateInputValues;
|
|
91
|
+
private _validateDate;
|
|
92
|
+
private _handleStartInput;
|
|
93
|
+
private _handleEndInput;
|
|
94
|
+
private _handleCancel;
|
|
95
|
+
private _handleConfirm;
|
|
96
|
+
private _dispatchChangeEvent;
|
|
97
|
+
private _dispatchCloseEvent;
|
|
98
|
+
private _renderHeader;
|
|
99
|
+
private _renderInputs;
|
|
100
|
+
private _renderActions;
|
|
101
|
+
render(): TemplateResult;
|
|
102
|
+
}
|
|
103
|
+
declare global {
|
|
104
|
+
interface HTMLElementTagNameMap {
|
|
105
|
+
'ui-date-picker-modal-input': UiDatePickerModalInput;
|
|
106
|
+
}
|
|
107
|
+
interface HTMLElementEventMap {
|
|
108
|
+
'date-input-change': CustomEvent<ModalInputDatePickerChangeEvent | {
|
|
109
|
+
date: Date;
|
|
110
|
+
formattedDate: string;
|
|
111
|
+
}>;
|
|
112
|
+
'modal-input-close': CustomEvent<{
|
|
113
|
+
confirmed: boolean;
|
|
114
|
+
date?: Date | null;
|
|
115
|
+
range?: DateRange | null;
|
|
116
|
+
}>;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=ui-date-picker-modal-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-date-picker-modal-input.d.ts","sourceRoot":"","sources":["../../../../src/md/date-picker/ui-date-picker-modal-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAA;AAGtD,OAAO,EAAE,SAAS,EAAyB,MAAM,gCAAgC,CAAA;AACjF,OAAO,8BAA8B,CAAA;AACrC,OAAO,8BAA8B,CAAA;AACrC,OAAO,wCAAwC,CAAA;AAC/C,OAAO,+CAA+C,CAAA;AACtD,OAAO,2BAA2B,CAAA;AAElC,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,SAAS,CAAA;IAChB,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KACnB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBACa,sBAAuB,SAAQ,UAAU;IACpD,OAAgB,MAAM,0BAAc;IAEpC;;OAEG;IAC0B,QAAQ,CAAC,IAAI,UAAQ;IAElD;;OAEG;IACH,SAA8C,KAAK,SAAgB;IAEnE;;OAEG;IAC0B,QAAQ,CAAC,SAAS,UAAO;IAEtD;;OAEG;IACyB,QAAQ,CAAC,UAAU,SAAe;IAE9D;;OAEG;IACyB,QAAQ,CAAC,QAAQ,SAAa;IAE1D;;OAEG;IACyB,QAAQ,CAAC,WAAW,SAAe;IAE/D;;OAEG;IACyB,QAAQ,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAO;IAErE;;OAEG;IACyB,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,IAAI,CAAO;IAE3E;;OAEG;IACyB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAY;IAE1E;;OAEG;IACyB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAY;IAE1E;;OAEG;IACyB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAY;IAElE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IAEjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAK;IAE/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IAEjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAK;IAE/B,iBAAiB,IAAI,IAAI;IAKzB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMpF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,cAAc;IAab,MAAM,IAAI,cAAc;CAOlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,4BAA4B,EAAE,sBAAsB,CAAA;KACrD;IAED,UAAU,mBAAmB;QAC3B,mBAAmB,EAAE,WAAW,CAC5B,+BAA+B,GAC/B;YACE,IAAI,EAAE,IAAI,CAAA;YACV,aAAa,EAAE,MAAM,CAAA;SACtB,CACJ,CAAA;QACD,mBAAmB,EAAE,WAAW,CAAC;YAC/B,SAAS,EAAE,OAAO,CAAA;YAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;YAClB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;SACzB,CAAC,CAAA;KACH;CACF"}
|