@mmlogic/components 0.5.4 → 0.5.5
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/dist/cjs/{cell-renderer-Coy-aD3k.js → cell-renderer-Mx3pwONr.js} +237 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mosterdcomponents.cjs.js +1 -1
- package/dist/cjs/mrd-boolean-field_25.cjs.entry.js +296 -56
- package/dist/cjs/mrd-merge-view.cjs.entry.js +3 -3
- package/dist/collection/components/fields/mrd-currency-field/mrd-currency-field.js +56 -5
- package/dist/collection/components/fields/mrd-date-field/mrd-date-field.css +55 -4
- package/dist/collection/components/fields/mrd-date-field/mrd-date-field.js +118 -8
- package/dist/collection/components/fields/mrd-datetime-field/mrd-datetime-field.css +55 -4
- package/dist/collection/components/fields/mrd-datetime-field/mrd-datetime-field.js +117 -15
- package/dist/collection/components/fields/mrd-email-field/mrd-email-field.js +1 -1
- package/dist/collection/components/fields/mrd-file-field/mrd-file-field.js +1 -1
- package/dist/collection/components/fields/mrd-image-field/mrd-image-field.js +1 -1
- package/dist/collection/components/fields/mrd-longtext-field/mrd-longtext-field.js +1 -1
- package/dist/collection/components/fields/mrd-number-field/mrd-number-field.js +33 -8
- package/dist/collection/components/fields/mrd-secret-field/mrd-secret-field.js +2 -2
- package/dist/collection/components/fields/mrd-text-field/mrd-text-field.js +1 -1
- package/dist/collection/components/fields/mrd-textarea-field/mrd-textarea-field.js +1 -1
- package/dist/collection/components/fields/mrd-time-field/mrd-time-field.js +1 -1
- package/dist/collection/components/form/mrd-field/mrd-field.js +11 -11
- package/dist/collection/components/invoice/mrd-invoice-view/mrd-invoice-view.js +1 -1
- package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +1 -1
- package/dist/collection/components/merge/mrd-merge-view/mrd-merge-view.js +2 -2
- package/dist/collection/dev/app.js +58 -13
- package/dist/collection/utils/format.js +160 -0
- package/dist/collection/utils/i18n.js +72 -0
- package/dist/components/cell-renderer.js +1 -1
- package/dist/components/format.js +1 -1
- package/dist/components/i18n.js +1 -1
- package/dist/components/mrd-currency-field2.js +1 -1
- package/dist/components/mrd-date-field2.js +1 -1
- package/dist/components/mrd-datetime-field2.js +1 -1
- package/dist/components/mrd-document-list2.js +1 -1
- package/dist/components/mrd-document-view2.js +1 -1
- package/dist/components/mrd-email-field2.js +1 -1
- package/dist/components/mrd-email-view2.js +1 -1
- package/dist/components/mrd-field2.js +1 -1
- package/dist/components/mrd-file-field2.js +1 -1
- package/dist/components/mrd-image-field2.js +1 -1
- package/dist/components/mrd-invoice-view2.js +1 -1
- package/dist/components/mrd-layout-section.js +1 -1
- package/dist/components/mrd-longtext-field2.js +1 -1
- package/dist/components/mrd-merge-view.js +1 -1
- package/dist/components/mrd-number-field2.js +1 -1
- package/dist/components/mrd-secret-field2.js +1 -1
- package/dist/components/mrd-table2.js +1 -1
- package/dist/components/mrd-text-field2.js +1 -1
- package/dist/components/mrd-textarea-field2.js +1 -1
- package/dist/components/mrd-time-field2.js +1 -1
- package/dist/esm/{cell-renderer-C2FLUrMN.js → cell-renderer-UQOYlDv7.js} +233 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mosterdcomponents.js +1 -1
- package/dist/esm/mrd-boolean-field_25.entry.js +296 -56
- package/dist/esm/mrd-merge-view.entry.js +3 -3
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
- package/dist/mosterdcomponents/p-8cc374e0.entry.js +3 -0
- package/dist/mosterdcomponents/p-CF--ScWr.js +1 -0
- package/dist/mosterdcomponents/{p-4ea5b97c.entry.js → p-d31b71d9.entry.js} +1 -1
- package/dist/types/components/fields/mrd-currency-field/mrd-currency-field.d.ts +13 -0
- package/dist/types/components/fields/mrd-date-field/mrd-date-field.d.ts +22 -1
- package/dist/types/components/fields/mrd-datetime-field/mrd-datetime-field.d.ts +21 -2
- package/dist/types/components/fields/mrd-number-field/mrd-number-field.d.ts +6 -0
- package/dist/types/components.d.ts +26 -0
- package/dist/types/utils/format.d.ts +34 -0
- package/package.json +1 -1
- package/dist/mosterdcomponents/p-8736313b.entry.js +0 -3
- package/dist/mosterdcomponents/p-BgsPVesg.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement, w as writeTask } from './index-CDiBvvJU.js';
|
|
2
|
-
import { t, p as parseLocalizedNumber, f as
|
|
2
|
+
import { t, p as parseLocalizedNumber, f as formatNumber, a as formatIsoDate, l as localeDatePattern, b as parseLocalizedDate, c as formatLocalDateTime, d as parseLocalizedDateTime, e as formatDate, g as formatDateTime, h as formatCurrency, C as CellRenderer, i as formatPercentage } from './cell-renderer-UQOYlDv7.js';
|
|
3
3
|
import { b as ClientLayoutItemFieldDataType, e as ClientLayoutNavigateBehaviour, a as ClientLayoutItemType, c as ClientLayoutItemRelationDisplayType, d as ClientLayoutItemRelationEditBehavior, r as resolveArchetype, A as ARCHETYPE_DOCUMENT, h as ARCHETYPE_INVOICE_LINE, f as ARCHETYPE_INVOICE, g as ARCHETYPE_EMAIL } from './client-layout-Bc42CfJB.js';
|
|
4
4
|
|
|
5
5
|
const mrdBooleanFieldCss = () => `.sc-mrd-boolean-field-h{display:block}.mrd-boolean-field.sc-mrd-boolean-field{display:flex;align-items:center;width:100%}.mrd-boolean-field__toggle-label.sc-mrd-boolean-field{display:flex;align-items:center;gap:var(--mrd-space-3);cursor:pointer;user-select:none}.mrd-boolean-field__checkbox.sc-mrd-boolean-field{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.mrd-boolean-field__checkbox.sc-mrd-boolean-field:checked+.mrd-boolean-field__toggle.sc-mrd-boolean-field{background-color:var(--mrd-color-primary)}.mrd-boolean-field__checkbox.sc-mrd-boolean-field:checked+.mrd-boolean-field__toggle.sc-mrd-boolean-field::after{transform:translateX(20px)}.mrd-boolean-field__checkbox.sc-mrd-boolean-field:focus+.mrd-boolean-field__toggle.sc-mrd-boolean-field{box-shadow:var(--mrd-shadow-focus)}.mrd-boolean-field__checkbox.sc-mrd-boolean-field:disabled+.mrd-boolean-field__toggle.sc-mrd-boolean-field{opacity:0.5;cursor:not-allowed}.mrd-boolean-field__toggle.sc-mrd-boolean-field{position:relative;display:inline-block;width:44px;height:24px;background-color:var(--mrd-color-neutral-300);border-radius:var(--mrd-border-radius-full);transition:background-color var(--mrd-transition);flex-shrink:0}.mrd-boolean-field__toggle.sc-mrd-boolean-field::after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;background-color:var(--mrd-color-white);border-radius:50%;transition:transform var(--mrd-transition);box-shadow:var(--mrd-shadow-sm)}.mrd-boolean-field__text.sc-mrd-boolean-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-800)}.mrd-boolean-field__text--required.sc-mrd-boolean-field::after{content:" *";color:var(--mrd-color-danger)}`;
|
|
@@ -119,13 +119,26 @@ const MrdCurrencyField = class {
|
|
|
119
119
|
this.amountDisplay = '';
|
|
120
120
|
this.currency = 'EUR';
|
|
121
121
|
this.error = '';
|
|
122
|
+
/** While focused the user owns the text; prop updates must not overwrite it. */
|
|
123
|
+
this.focused = false;
|
|
122
124
|
this.handleAmountInput = (e) => {
|
|
123
125
|
this.amountDisplay = e.target.value;
|
|
124
126
|
};
|
|
127
|
+
this.handleAmountFocus = () => {
|
|
128
|
+
this.focused = true;
|
|
129
|
+
// Drop the grouping separators while editing, but keep the locale's decimal
|
|
130
|
+
// separator: String(1234.56) would be re-read as 123456 where '.' groups.
|
|
131
|
+
const parsed = parseLocalizedNumber(this.amountDisplay, this.locale);
|
|
132
|
+
if (parsed !== null) {
|
|
133
|
+
this.amountDisplay = formatNumber(parsed, this.locale, { useGrouping: false, maximumFractionDigits: 20 });
|
|
134
|
+
}
|
|
135
|
+
};
|
|
125
136
|
this.handleAmountBlur = (e) => {
|
|
137
|
+
this.focused = false;
|
|
126
138
|
const raw = e.target.value;
|
|
127
139
|
const parsed = parseLocalizedNumber(raw, this.locale);
|
|
128
140
|
this.error = requiredError(raw, this.required, this.locale);
|
|
141
|
+
this.amountDisplay = parsed !== null ? this.formatAmount(parsed) : '';
|
|
129
142
|
const val = { amount: parsed, currency: this.currency };
|
|
130
143
|
this.mrdChange.emit({ name: this.name, value: val });
|
|
131
144
|
this.mrdBlur.emit({ name: this.name, value: val });
|
|
@@ -137,19 +150,56 @@ const MrdCurrencyField = class {
|
|
|
137
150
|
};
|
|
138
151
|
}
|
|
139
152
|
componentWillLoad() {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
153
|
+
this.syncFromValue();
|
|
154
|
+
}
|
|
155
|
+
componentDidRender() {
|
|
156
|
+
// A rendered `selected` attribute is ignored once the select has an established
|
|
157
|
+
// value, so the currency is applied imperatively — same reason as the DROPDOWN
|
|
158
|
+
// preselect in mrd-relation-field. Without this an edit-mode record that loads
|
|
159
|
+
// after mount keeps showing EUR and would be saved back with the wrong currency.
|
|
160
|
+
if (this.selectEl && this.selectEl.value !== this.currency) {
|
|
161
|
+
this.selectEl.value = this.currency;
|
|
143
162
|
}
|
|
144
163
|
}
|
|
164
|
+
/** The record's own currency may sit outside the common list; never drop it. */
|
|
165
|
+
currencyOptions() {
|
|
166
|
+
return COMMON_CURRENCIES.includes(this.currency) ? COMMON_CURRENCIES : [this.currency, ...COMMON_CURRENCIES];
|
|
167
|
+
}
|
|
168
|
+
/** Edit mode loads the record after mount, so the incoming value must re-sync. */
|
|
169
|
+
valueChanged() {
|
|
170
|
+
if (!this.focused)
|
|
171
|
+
this.syncFromValue();
|
|
172
|
+
}
|
|
173
|
+
localeChanged() {
|
|
174
|
+
if (!this.focused)
|
|
175
|
+
this.syncFromValue();
|
|
176
|
+
}
|
|
177
|
+
syncFromValue() {
|
|
178
|
+
const value = this.value;
|
|
179
|
+
this.currency = (value === null || value === void 0 ? void 0 : value.currency) || 'EUR';
|
|
180
|
+
this.amountDisplay =
|
|
181
|
+
(value === null || value === void 0 ? void 0 : value.amount) !== null && (value === null || value === void 0 ? void 0 : value.amount) !== undefined ? this.formatAmount(value.amount) : '';
|
|
182
|
+
}
|
|
183
|
+
/** Display form: locale separators, always two decimals. The ISO code sits in the select. */
|
|
184
|
+
formatAmount(amount) {
|
|
185
|
+
return formatNumber(amount, this.locale, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
|
|
186
|
+
}
|
|
145
187
|
render() {
|
|
146
188
|
const hasError = !!this.error;
|
|
147
|
-
return (h(Host, { key: '
|
|
189
|
+
return (h(Host, { key: '43ef1fe660c4eaef025203544916b077975b6aa3' }, h("div", { key: '00b8e79182c8e2a353d57ad5c341024caf00d4ea', class: "mrd-currency-field" }, h(FieldLabel, { key: '96835c311e0d490864c484b818f1dcc623f488b2', base: "mrd-currency-field", label: this.label, required: this.required }), h("div", { key: '80317cfe562af00cc4cbf9aabf4bac2126cf6fe5', class: "mrd-currency-field__row" }, h("input", { key: '1983ef1e4d19e0fc529cf5e8be7d287fea36620a', class: controlClass('mrd-currency-field', hasError, 'amount'), type: "text", inputMode: "decimal", name: `${this.name}_amount`, value: this.amountDisplay, placeholder: this.formatAmount(0), required: this.required, disabled: this.disabled, onInput: this.handleAmountInput, onFocus: this.handleAmountFocus, onBlur: this.handleAmountBlur }), h("select", { key: 'b5fe3f03590bebaa564d76bc5fcb47c327eacece', class: "mrd-currency-field__currency", ref: el => (this.selectEl = el), disabled: this.disabled, onChange: this.handleCurrencyChange }, this.currencyOptions().map(c => (h("option", { key: c, value: c, selected: c === this.currency }, c))))), h(FieldError, { key: '1a128b26293170d4137f787622d4e89a23e62c0b', base: "mrd-currency-field", error: this.error }))));
|
|
148
190
|
}
|
|
191
|
+
static get watchers() { return {
|
|
192
|
+
"value": [{
|
|
193
|
+
"valueChanged": 0
|
|
194
|
+
}],
|
|
195
|
+
"locale": [{
|
|
196
|
+
"localeChanged": 0
|
|
197
|
+
}]
|
|
198
|
+
}; }
|
|
149
199
|
};
|
|
150
200
|
MrdCurrencyField.style = mrdCurrencyFieldCss();
|
|
151
201
|
|
|
152
|
-
const mrdDateFieldCss = () => `.sc-mrd-date-field-h{display:block}.mrd-date-field.sc-mrd-date-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-date-field__label.sc-mrd-date-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-date-field__label--required.sc-mrd-date-field::after{content:" *";color:var(--mrd-color-danger)}.mrd-date-field__input.sc-mrd-date-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box}.mrd-date-field__input.sc-mrd-date-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-date-field__input.sc-mrd-date-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-date-field__input.sc-mrd-date-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-date-field__input--error.sc-mrd-date-field{border-color:var(--mrd-border-color-error)}.mrd-date-field__input--error.sc-mrd-date-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-date-
|
|
202
|
+
const mrdDateFieldCss = () => `.sc-mrd-date-field-h{display:block}.mrd-date-field.sc-mrd-date-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-date-field__label.sc-mrd-date-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-date-field__label--required.sc-mrd-date-field::after{content:" *";color:var(--mrd-color-danger)}.mrd-date-field__control.sc-mrd-date-field{position:relative;display:block}.mrd-date-field__input.sc-mrd-date-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box}.mrd-date-field__input.sc-mrd-date-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-date-field__input.sc-mrd-date-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-date-field__input.sc-mrd-date-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-date-field__input--error.sc-mrd-date-field{border-color:var(--mrd-border-color-error)}.mrd-date-field__input--error.sc-mrd-date-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-date-field__input.sc-mrd-date-field{padding-inline-end:calc(var(--mrd-input-padding-x) + 1.75rem)}.mrd-date-field__picker.sc-mrd-date-field{position:absolute;inset-inline-end:var(--mrd-space-1);top:50%;transform:translateY(-50%);width:1.75rem;height:1.75rem}.mrd-date-field__picker-button.sc-mrd-date-field{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0;border:0;border-radius:var(--mrd-border-radius-sm);background:transparent;color:var(--mrd-color-neutral-500);cursor:pointer;transition:color var(--mrd-transition), background-color var(--mrd-transition)}.mrd-date-field__picker-button.sc-mrd-date-field svg.sc-mrd-date-field{width:1.125rem;height:1.125rem}.mrd-date-field__picker-button.sc-mrd-date-field:hover:not(:disabled){color:var(--mrd-color-primary);background-color:var(--mrd-color-neutral-100)}.mrd-date-field__picker-button.sc-mrd-date-field:focus-visible{outline:2px solid var(--mrd-border-color-focus);outline-offset:1px}.mrd-date-field__picker-button.sc-mrd-date-field:disabled{cursor:not-allowed;opacity:0.5}.mrd-date-field__picker-native.sc-mrd-date-field{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;opacity:0;pointer-events:none}.mrd-date-field__error.sc-mrd-date-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
|
|
153
203
|
|
|
154
204
|
const MrdDateField = class {
|
|
155
205
|
constructor(hostRef) {
|
|
@@ -158,28 +208,114 @@ const MrdDateField = class {
|
|
|
158
208
|
this.mrdBlur = createEvent(this, "mrdBlur");
|
|
159
209
|
this.name = '';
|
|
160
210
|
this.label = '';
|
|
211
|
+
/** ISO date, 'YYYY-MM-DD'. */
|
|
161
212
|
this.value = '';
|
|
213
|
+
/** Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj'). */
|
|
214
|
+
this.placeholder = '';
|
|
162
215
|
this.required = false;
|
|
163
216
|
this.disabled = false;
|
|
164
217
|
this.locale = navigator.language;
|
|
218
|
+
/** What the user sees: the value formatted for `locale`, or their raw typing. */
|
|
219
|
+
this.displayValue = '';
|
|
165
220
|
this.error = '';
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.
|
|
221
|
+
/** While focused the user owns the text; prop updates must not overwrite it. */
|
|
222
|
+
this.focused = false;
|
|
223
|
+
this.handleFocus = () => {
|
|
224
|
+
this.focused = true;
|
|
225
|
+
};
|
|
226
|
+
this.handleInput = (e) => {
|
|
227
|
+
this.displayValue = e.target.value;
|
|
170
228
|
};
|
|
171
229
|
this.handleBlur = (e) => {
|
|
172
|
-
|
|
173
|
-
|
|
230
|
+
this.focused = false;
|
|
231
|
+
const value = this.commit(e.target.value);
|
|
232
|
+
this.mrdChange.emit({ name: this.name, value });
|
|
233
|
+
this.mrdBlur.emit({ name: this.name, value });
|
|
234
|
+
};
|
|
235
|
+
this.handleKeyDown = (e) => {
|
|
236
|
+
// Submitting with Enter never fires blur, so commit the typed text here too.
|
|
237
|
+
if (e.key !== 'Enter')
|
|
238
|
+
return;
|
|
239
|
+
const value = this.commit(e.target.value);
|
|
240
|
+
this.mrdChange.emit({ name: this.name, value });
|
|
241
|
+
};
|
|
242
|
+
this.openPicker = () => {
|
|
243
|
+
const native = this.nativeInput;
|
|
244
|
+
if (!native || this.disabled)
|
|
245
|
+
return;
|
|
246
|
+
// The blur commit that precedes this click re-renders asynchronously, so sync by hand first.
|
|
247
|
+
native.value = this.currentIso();
|
|
248
|
+
try {
|
|
249
|
+
native.showPicker();
|
|
250
|
+
}
|
|
251
|
+
catch (_a) {
|
|
252
|
+
// Browsers without showPicker(): focusing at least surfaces the platform control.
|
|
253
|
+
native.focus();
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
this.handlePickerChange = (e) => {
|
|
257
|
+
const iso = e.target.value; // native inputs always yield 'YYYY-MM-DD'
|
|
258
|
+
this.displayValue = formatIsoDate(iso, this.locale);
|
|
259
|
+
this.error = requiredError(iso, this.required, this.locale);
|
|
260
|
+
this.mrdChange.emit({ name: this.name, value: iso });
|
|
261
|
+
this.mrdBlur.emit({ name: this.name, value: iso });
|
|
174
262
|
};
|
|
175
263
|
}
|
|
264
|
+
componentWillLoad() {
|
|
265
|
+
this.displayValue = formatIsoDate(this.value, this.locale);
|
|
266
|
+
}
|
|
267
|
+
valueChanged(newValue) {
|
|
268
|
+
if (!this.focused)
|
|
269
|
+
this.displayValue = formatIsoDate(newValue, this.locale);
|
|
270
|
+
}
|
|
271
|
+
localeChanged() {
|
|
272
|
+
if (!this.focused)
|
|
273
|
+
this.displayValue = formatIsoDate(this.value, this.locale);
|
|
274
|
+
}
|
|
275
|
+
patternPlaceholder() {
|
|
276
|
+
if (this.placeholder)
|
|
277
|
+
return this.placeholder;
|
|
278
|
+
return localeDatePattern(this.locale, {
|
|
279
|
+
day: t('date_token_day', this.locale),
|
|
280
|
+
month: t('date_token_month', this.locale),
|
|
281
|
+
year: t('date_token_year', this.locale),
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
/** Parse the typed text, reformat it, and emit the ISO value. */
|
|
285
|
+
commit(raw) {
|
|
286
|
+
const trimmed = raw.trim();
|
|
287
|
+
const iso = trimmed ? parseLocalizedDate(trimmed, this.locale) : '';
|
|
288
|
+
if (trimmed && iso === null) {
|
|
289
|
+
// Keep the raw text so the user can correct it instead of retyping.
|
|
290
|
+
this.error = t('invalid_date', this.locale);
|
|
291
|
+
this.displayValue = trimmed;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
this.error = requiredError(iso, this.required, this.locale);
|
|
295
|
+
this.displayValue = iso ? formatIsoDate(iso, this.locale) : '';
|
|
296
|
+
}
|
|
297
|
+
return iso !== null && iso !== void 0 ? iso : '';
|
|
298
|
+
}
|
|
299
|
+
/** The ISO value currently shown, so the picker opens on the right date. */
|
|
300
|
+
currentIso() {
|
|
301
|
+
var _a;
|
|
302
|
+
return (_a = (this.displayValue ? parseLocalizedDate(this.displayValue, this.locale) : '')) !== null && _a !== void 0 ? _a : '';
|
|
303
|
+
}
|
|
176
304
|
render() {
|
|
177
|
-
return (h(Host, { key: '
|
|
305
|
+
return (h(Host, { key: '06ba48bd538ee4c8de4e071285535451f783c259' }, h("div", { key: '73ea6ea23c85fe3325bb151afb755cc11a13cf58', class: "mrd-date-field" }, h(FieldLabel, { key: '527848cf72323aef176fc7d5bcd47dcf2f7e46f6', base: "mrd-date-field", label: this.label, required: this.required }), h("div", { key: '2ff7586f4e6298d1f9b9b131106044533de82c6d', class: "mrd-date-field__control" }, h("input", { key: '68fdf2f1f7961ca049ab6493494c8c0707e6a4af', class: controlClass('mrd-date-field', !!this.error), type: "text", name: this.name, value: this.displayValue, placeholder: this.patternPlaceholder(), autocomplete: "off", required: this.required, disabled: this.disabled, onFocus: this.handleFocus, onInput: this.handleInput, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown }), h("span", { key: '9557b7a3f6780b8a05030ab8e7c941c44df9f4a5', class: "mrd-date-field__picker" }, h("button", { key: '586973e0440ed0b74e1fa0affae9e462257024c3', type: "button", class: "mrd-date-field__picker-button", title: t('open_calendar', this.locale), "aria-label": t('open_calendar', this.locale), disabled: this.disabled, onClick: this.openPicker }, h("svg", { key: '144319d3a50d0d38c75c59dd3321d4b9097322a6', viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", "stroke-width": "1.5", "aria-hidden": "true" }, h("rect", { key: 'aec01ca5c620bf3116705b7a28052eb3bc210cfd', x: "3", y: "4.5", width: "14", height: "12", rx: "2" }), h("path", { key: 'a0e13dd3a2005bfbee40f5a071b6760270d0d58d', d: "M3 8.5h14M7 2.5v3M13 2.5v3", "stroke-linecap": "round" }))), h("input", { key: 'be02df44f31a59a26ce166ab9a9eab9db2635d89', class: "mrd-date-field__picker-native", type: "date", ref: el => (this.nativeInput = el), value: this.currentIso(), disabled: this.disabled, tabIndex: -1, "aria-hidden": "true", onChange: this.handlePickerChange }))), h(FieldError, { key: '2f8b2072bee32170a35f98ec5c962018774c7e8c', base: "mrd-date-field", error: this.error }))));
|
|
178
306
|
}
|
|
307
|
+
static get watchers() { return {
|
|
308
|
+
"value": [{
|
|
309
|
+
"valueChanged": 0
|
|
310
|
+
}],
|
|
311
|
+
"locale": [{
|
|
312
|
+
"localeChanged": 0
|
|
313
|
+
}]
|
|
314
|
+
}; }
|
|
179
315
|
};
|
|
180
316
|
MrdDateField.style = mrdDateFieldCss();
|
|
181
317
|
|
|
182
|
-
const mrdDatetimeFieldCss = () => `.sc-mrd-datetime-field-h{display:block}.mrd-datetime-field.sc-mrd-datetime-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-datetime-field__label.sc-mrd-datetime-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-datetime-field__label--required.sc-mrd-datetime-field::after{content:" *";color:var(--mrd-color-danger)}.mrd-datetime-field__input.sc-mrd-datetime-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box}.mrd-datetime-field__input.sc-mrd-datetime-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-datetime-field__input.sc-mrd-datetime-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-datetime-field__input.sc-mrd-datetime-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-datetime-field__input--error.sc-mrd-datetime-field{border-color:var(--mrd-border-color-error)}.mrd-datetime-field__input--error.sc-mrd-datetime-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-datetime-
|
|
318
|
+
const mrdDatetimeFieldCss = () => `.sc-mrd-datetime-field-h{display:block}.mrd-datetime-field.sc-mrd-datetime-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-datetime-field__label.sc-mrd-datetime-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-datetime-field__label--required.sc-mrd-datetime-field::after{content:" *";color:var(--mrd-color-danger)}.mrd-datetime-field__control.sc-mrd-datetime-field{position:relative;display:block}.mrd-datetime-field__input.sc-mrd-datetime-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box}.mrd-datetime-field__input.sc-mrd-datetime-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-datetime-field__input.sc-mrd-datetime-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-datetime-field__input.sc-mrd-datetime-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-datetime-field__input--error.sc-mrd-datetime-field{border-color:var(--mrd-border-color-error)}.mrd-datetime-field__input--error.sc-mrd-datetime-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-datetime-field__input.sc-mrd-datetime-field{padding-inline-end:calc(var(--mrd-input-padding-x) + 1.75rem)}.mrd-datetime-field__picker.sc-mrd-datetime-field{position:absolute;inset-inline-end:var(--mrd-space-1);top:50%;transform:translateY(-50%);width:1.75rem;height:1.75rem}.mrd-datetime-field__picker-button.sc-mrd-datetime-field{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0;border:0;border-radius:var(--mrd-border-radius-sm);background:transparent;color:var(--mrd-color-neutral-500);cursor:pointer;transition:color var(--mrd-transition), background-color var(--mrd-transition)}.mrd-datetime-field__picker-button.sc-mrd-datetime-field svg.sc-mrd-datetime-field{width:1.125rem;height:1.125rem}.mrd-datetime-field__picker-button.sc-mrd-datetime-field:hover:not(:disabled){color:var(--mrd-color-primary);background-color:var(--mrd-color-neutral-100)}.mrd-datetime-field__picker-button.sc-mrd-datetime-field:focus-visible{outline:2px solid var(--mrd-border-color-focus);outline-offset:1px}.mrd-datetime-field__picker-button.sc-mrd-datetime-field:disabled{cursor:not-allowed;opacity:0.5}.mrd-datetime-field__picker-native.sc-mrd-datetime-field{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;opacity:0;pointer-events:none}.mrd-datetime-field__error.sc-mrd-datetime-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
|
|
183
319
|
|
|
184
320
|
const MrdDatetimeField = class {
|
|
185
321
|
constructor(hostRef) {
|
|
@@ -188,30 +324,72 @@ const MrdDatetimeField = class {
|
|
|
188
324
|
this.mrdBlur = createEvent(this, "mrdBlur");
|
|
189
325
|
this.name = '';
|
|
190
326
|
this.label = '';
|
|
327
|
+
/** UTC ISO string, e.g. '2026-07-06T12:30:00Z'. */
|
|
191
328
|
this.value = '';
|
|
329
|
+
/** Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj uu:mm'). */
|
|
330
|
+
this.placeholder = '';
|
|
192
331
|
this.required = false;
|
|
193
332
|
this.disabled = false;
|
|
194
333
|
this.locale = navigator.language;
|
|
334
|
+
/** What the user sees: the value formatted for `locale`, or their raw typing. */
|
|
335
|
+
this.displayValue = '';
|
|
195
336
|
this.error = '';
|
|
196
|
-
|
|
197
|
-
this.
|
|
198
|
-
|
|
199
|
-
this.
|
|
200
|
-
|
|
201
|
-
|
|
337
|
+
/** While focused the user owns the text; prop updates must not overwrite it. */
|
|
338
|
+
this.focused = false;
|
|
339
|
+
this.handleFocus = () => {
|
|
340
|
+
this.focused = true;
|
|
341
|
+
};
|
|
342
|
+
this.handleInput = (e) => {
|
|
343
|
+
this.displayValue = e.target.value;
|
|
202
344
|
};
|
|
203
345
|
this.handleBlur = (e) => {
|
|
204
|
-
|
|
205
|
-
|
|
346
|
+
this.focused = false;
|
|
347
|
+
const value = this.commit(e.target.value);
|
|
348
|
+
this.mrdChange.emit({ name: this.name, value });
|
|
349
|
+
this.mrdBlur.emit({ name: this.name, value });
|
|
350
|
+
};
|
|
351
|
+
this.handleKeyDown = (e) => {
|
|
352
|
+
// Submitting with Enter never fires blur, so commit the typed text here too.
|
|
353
|
+
if (e.key !== 'Enter')
|
|
354
|
+
return;
|
|
355
|
+
const value = this.commit(e.target.value);
|
|
356
|
+
this.mrdChange.emit({ name: this.name, value });
|
|
357
|
+
};
|
|
358
|
+
this.openPicker = () => {
|
|
359
|
+
const native = this.nativeInput;
|
|
360
|
+
if (!native || this.disabled)
|
|
361
|
+
return;
|
|
362
|
+
// The blur commit that precedes this click re-renders asynchronously, so sync by hand first.
|
|
363
|
+
native.value = this.currentLocal();
|
|
364
|
+
try {
|
|
365
|
+
native.showPicker();
|
|
366
|
+
}
|
|
367
|
+
catch (_a) {
|
|
368
|
+
// Browsers without showPicker(): focusing at least surfaces the platform control.
|
|
369
|
+
native.focus();
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
this.handlePickerChange = (e) => {
|
|
373
|
+
const local = e.target.value; // native inputs always yield 'YYYY-MM-DDTHH:mm'
|
|
374
|
+
this.displayValue = formatLocalDateTime(local, this.locale);
|
|
375
|
+
this.error = requiredError(local, this.required, this.locale);
|
|
376
|
+
const value = this.localToUtc(local);
|
|
377
|
+
this.mrdChange.emit({ name: this.name, value });
|
|
378
|
+
this.mrdBlur.emit({ name: this.name, value });
|
|
206
379
|
};
|
|
207
380
|
}
|
|
208
381
|
componentWillLoad() {
|
|
209
|
-
this.
|
|
382
|
+
this.displayValue = this.toDisplay(this.value);
|
|
210
383
|
}
|
|
211
384
|
valueChanged(newVal) {
|
|
212
|
-
|
|
385
|
+
if (!this.focused)
|
|
386
|
+
this.displayValue = this.toDisplay(newVal);
|
|
387
|
+
}
|
|
388
|
+
localeChanged() {
|
|
389
|
+
if (!this.focused)
|
|
390
|
+
this.displayValue = this.toDisplay(this.value);
|
|
213
391
|
}
|
|
214
|
-
// UTC ISO string → "YYYY-MM-DDTHH:mm" in local timezone
|
|
392
|
+
// UTC ISO string → "YYYY-MM-DDTHH:mm" in local timezone
|
|
215
393
|
utcToLocal(utcStr) {
|
|
216
394
|
if (!utcStr)
|
|
217
395
|
return '';
|
|
@@ -230,12 +408,50 @@ const MrdDatetimeField = class {
|
|
|
230
408
|
return '';
|
|
231
409
|
return d.toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
232
410
|
}
|
|
411
|
+
// UTC ISO string → locale-formatted text for the input
|
|
412
|
+
toDisplay(utcStr) {
|
|
413
|
+
return formatLocalDateTime(this.utcToLocal(utcStr), this.locale);
|
|
414
|
+
}
|
|
415
|
+
patternPlaceholder() {
|
|
416
|
+
if (this.placeholder)
|
|
417
|
+
return this.placeholder;
|
|
418
|
+
return localeDatePattern(this.locale, {
|
|
419
|
+
day: t('date_token_day', this.locale),
|
|
420
|
+
month: t('date_token_month', this.locale),
|
|
421
|
+
year: t('date_token_year', this.locale),
|
|
422
|
+
hour: t('time_token_hour', this.locale),
|
|
423
|
+
minute: t('time_token_minute', this.locale),
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
/** Parse the typed text, reformat it, and return the UTC value to emit. */
|
|
427
|
+
commit(raw) {
|
|
428
|
+
const trimmed = raw.trim();
|
|
429
|
+
const local = trimmed ? parseLocalizedDateTime(trimmed, this.locale) : '';
|
|
430
|
+
if (trimmed && local === null) {
|
|
431
|
+
// Keep the raw text so the user can correct it instead of retyping.
|
|
432
|
+
this.error = t('invalid_datetime', this.locale);
|
|
433
|
+
this.displayValue = trimmed;
|
|
434
|
+
return '';
|
|
435
|
+
}
|
|
436
|
+
const localValue = local !== null && local !== void 0 ? local : '';
|
|
437
|
+
this.error = requiredError(localValue, this.required, this.locale);
|
|
438
|
+
this.displayValue = localValue ? formatLocalDateTime(localValue, this.locale) : '';
|
|
439
|
+
return this.localToUtc(localValue);
|
|
440
|
+
}
|
|
441
|
+
/** The local 'YYYY-MM-DDTHH:mm' currently shown, so the picker opens on the right moment. */
|
|
442
|
+
currentLocal() {
|
|
443
|
+
var _a;
|
|
444
|
+
return (_a = (this.displayValue ? parseLocalizedDateTime(this.displayValue, this.locale) : '')) !== null && _a !== void 0 ? _a : '';
|
|
445
|
+
}
|
|
233
446
|
render() {
|
|
234
|
-
return (h(Host, { key: '
|
|
447
|
+
return (h(Host, { key: 'e075e65c76a627a8f19db488c07704e2b1a7270b' }, h("div", { key: 'a6b5a5df3168272f1f775933dfc372e1b2ccbd95', class: "mrd-datetime-field" }, h(FieldLabel, { key: '39e232c066b8c354eeda7df9bcba4e3f95c18ee5', base: "mrd-datetime-field", label: this.label, required: this.required }), h("div", { key: '4ffac4089cbb9e5506aa0854c8b1f15862bc8456', class: "mrd-datetime-field__control" }, h("input", { key: 'd33400133173c7f3e8b045339f44fbeba7f0b35a', class: controlClass('mrd-datetime-field', !!this.error), type: "text", name: this.name, value: this.displayValue, placeholder: this.patternPlaceholder(), autocomplete: "off", required: this.required, disabled: this.disabled, onFocus: this.handleFocus, onInput: this.handleInput, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown }), h("span", { key: '54d8d3b1f508d6226d1341d87c1fec19d5914a10', class: "mrd-datetime-field__picker" }, h("button", { key: '27cd3977984eedd9e3471dd039fc73798f1c7abc', type: "button", class: "mrd-datetime-field__picker-button", title: t('open_calendar', this.locale), "aria-label": t('open_calendar', this.locale), disabled: this.disabled, onClick: this.openPicker }, h("svg", { key: '634ca817fa001263933795e35e1a215a06da7a77', viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", "stroke-width": "1.5", "aria-hidden": "true" }, h("rect", { key: '66eadf6b2cfee53376f6ea0f50dbd2ec04fc5663', x: "3", y: "4.5", width: "14", height: "12", rx: "2" }), h("path", { key: '4bb61793e0501bd18bb16c4e203b20f509692970', d: "M3 8.5h14M7 2.5v3M13 2.5v3", "stroke-linecap": "round" }))), h("input", { key: '8877da44e4dc527e7c05244359a0caf9d2e81fdd', class: "mrd-datetime-field__picker-native", type: "datetime-local", ref: el => (this.nativeInput = el), value: this.currentLocal(), disabled: this.disabled, tabIndex: -1, "aria-hidden": "true", onChange: this.handlePickerChange }))), h(FieldError, { key: '4ee97180614972c4dd334d68873a9fb7f91e48f5', base: "mrd-datetime-field", error: this.error }))));
|
|
235
448
|
}
|
|
236
449
|
static get watchers() { return {
|
|
237
450
|
"value": [{
|
|
238
451
|
"valueChanged": 0
|
|
452
|
+
}],
|
|
453
|
+
"locale": [{
|
|
454
|
+
"localeChanged": 0
|
|
239
455
|
}]
|
|
240
456
|
}; }
|
|
241
457
|
};
|
|
@@ -1459,7 +1675,7 @@ const MrdEmailField = class {
|
|
|
1459
1675
|
};
|
|
1460
1676
|
}
|
|
1461
1677
|
render() {
|
|
1462
|
-
return (h(Host, { key: '
|
|
1678
|
+
return (h(Host, { key: 'e185145e628e3a23dd338d93dd8e42bf11569728' }, h("div", { key: '7d77dd982543a8add5fa1f47aa7985cc15079080', class: "mrd-email-field" }, h(FieldLabel, { key: '14eb00a535a052ebe3cb2793cc7dfc05168c402b', base: "mrd-email-field", label: this.label, required: this.required }), h("input", { key: '11fb9856144f7da30a054b4433350d80d316de64', class: controlClass('mrd-email-field', !!this.error), type: "email", name: this.name, value: this.value, placeholder: this.placeholder || 'name@example.com', required: this.required, disabled: this.disabled, onInput: this.handleInput, onBlur: this.handleBlur }), h(FieldError, { key: 'be33c0a43cd99a7152c1d10b7067ea5e52834742', base: "mrd-email-field", error: this.error }))));
|
|
1463
1679
|
}
|
|
1464
1680
|
};
|
|
1465
1681
|
MrdEmailField.style = mrdEmailFieldCss();
|
|
@@ -4092,7 +4308,7 @@ const MrdField = class {
|
|
|
4092
4308
|
return (h("div", { class: "mrd-field__history-editor" }, this.historyEntries.length > 0 && (h("span", { class: "mrd-field__history-editor-label" }, t('history_badge_tooltip', locale))), this.historyEntries.map((entry, i) => (h("div", { key: String(i), class: "mrd-field__history-editor-row" }, h("input", { class: "mrd-field__history-editor-value", type: valueType, value: entry.value, onInput: (e) => updateEntry(i, 'value', e.target.value) }), h("span", { class: "mrd-field__history-editor-sep" }, t('history_until', locale)), h("input", { class: "mrd-field__history-editor-until", type: "date", value: entry.until, onInput: (e) => updateEntry(i, 'until', e.target.value) }), h("button", { type: "button", class: "mrd-field__history-editor-remove", onClick: () => removeEntry(i), "aria-label": t('remove', locale) }, h("svg", { viewBox: "0 0 20 20", fill: "currentColor", "aria-hidden": "true" }, h("path", { "fill-rule": "evenodd", d: "M8.75 1A2.75 2.75 0 006 3.75v.443c-.795.077-1.584.176-2.365.298a.75.75 0 10.23 1.482l.149-.022.841 10.518A2.75 2.75 0 007.596 19h4.807a2.75 2.75 0 002.742-2.53l.841-10.52.149.023a.75.75 0 00.23-1.482A41.03 41.03 0 0014 4.193V3.75A2.75 2.75 0 0011.25 1h-2.5zM10 4c.84 0 1.673.025 2.5.075V3.75c0-.69-.56-1.25-1.25-1.25h-2.5c-.69 0-1.25.56-1.25 1.25v.325C8.327 4.025 9.16 4 10 4zM8.58 7.72a.75.75 0 00-1.5.06l.3 7.5a.75.75 0 101.5-.06l-.3-7.5zm4.34.06a.75.75 0 10-1.5-.06l-.3 7.5a.75.75 0 101.5.06l.3-7.5z", "clip-rule": "evenodd" })))))), h("button", { type: "button", class: "mrd-field__history-editor-add", onClick: addEntry }, "+ ", t('add', locale))));
|
|
4093
4309
|
}
|
|
4094
4310
|
renderLeafField(displayValue) {
|
|
4095
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
|
|
4311
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8;
|
|
4096
4312
|
const { item, locale } = this;
|
|
4097
4313
|
const commonProps = {
|
|
4098
4314
|
name: item.name,
|
|
@@ -4117,25 +4333,25 @@ const MrdField = class {
|
|
|
4117
4333
|
case ClientLayoutItemFieldDataType.BOOLEAN:
|
|
4118
4334
|
return (h("mrd-boolean-field", Object.assign({}, commonProps, { value: (_l = displayValue) !== null && _l !== void 0 ? _l : false })));
|
|
4119
4335
|
case ClientLayoutItemFieldDataType.DATE:
|
|
4120
|
-
return (h("mrd-date-field", Object.assign({}, commonProps, { value: (_m = displayValue) !== null && _m !== void 0 ? _m : '' })));
|
|
4336
|
+
return (h("mrd-date-field", Object.assign({}, commonProps, { value: (_m = displayValue) !== null && _m !== void 0 ? _m : '', placeholder: (_o = item.placeholder) !== null && _o !== void 0 ? _o : '' })));
|
|
4121
4337
|
case ClientLayoutItemFieldDataType.DATETIME:
|
|
4122
|
-
return (h("mrd-datetime-field", Object.assign({}, commonProps, { value: (
|
|
4338
|
+
return (h("mrd-datetime-field", Object.assign({}, commonProps, { value: (_p = displayValue) !== null && _p !== void 0 ? _p : '', placeholder: (_q = item.placeholder) !== null && _q !== void 0 ? _q : '' })));
|
|
4123
4339
|
case ClientLayoutItemFieldDataType.TIME:
|
|
4124
|
-
return (h("mrd-time-field", Object.assign({}, commonProps, { value: (
|
|
4340
|
+
return (h("mrd-time-field", Object.assign({}, commonProps, { value: (_r = displayValue) !== null && _r !== void 0 ? _r : '' })));
|
|
4125
4341
|
case ClientLayoutItemFieldDataType.EMAIL:
|
|
4126
|
-
return (h("mrd-email-field", Object.assign({}, commonProps, { value: (
|
|
4342
|
+
return (h("mrd-email-field", Object.assign({}, commonProps, { value: (_s = displayValue) !== null && _s !== void 0 ? _s : '', placeholder: (_t = item.placeholder) !== null && _t !== void 0 ? _t : '' })));
|
|
4127
4343
|
case ClientLayoutItemFieldDataType.HYPERLINK:
|
|
4128
|
-
return (h("mrd-hyperlink-field", Object.assign({}, commonProps, { value: (
|
|
4344
|
+
return (h("mrd-hyperlink-field", Object.assign({}, commonProps, { value: (_u = displayValue) !== null && _u !== void 0 ? _u : '', placeholder: (_v = item.placeholder) !== null && _v !== void 0 ? _v : '' })));
|
|
4129
4345
|
case ClientLayoutItemFieldDataType.LIST:
|
|
4130
|
-
return (h("mrd-list-field", Object.assign({}, commonProps, { value: (
|
|
4346
|
+
return (h("mrd-list-field", Object.assign({}, commonProps, { value: (_w = displayValue) !== null && _w !== void 0 ? _w : '', multiple: (_x = item.multiple) !== null && _x !== void 0 ? _x : false, listItems: (_y = item.listItems) !== null && _y !== void 0 ? _y : [] })));
|
|
4131
4347
|
case ClientLayoutItemFieldDataType.FILE:
|
|
4132
|
-
return (h("mrd-file-field", Object.assign({}, commonProps, { value: displayValue, accept: (
|
|
4348
|
+
return (h("mrd-file-field", Object.assign({}, commonProps, { value: displayValue, accept: (_z = item.accept) !== null && _z !== void 0 ? _z : '', maxSize: (_0 = item.maxSize) !== null && _0 !== void 0 ? _0 : 0, multiple: (_1 = item.multiple) !== null && _1 !== void 0 ? _1 : false, onMrdUpload: this.handleUpload })));
|
|
4133
4349
|
case ClientLayoutItemFieldDataType.IMAGE:
|
|
4134
|
-
return (h("mrd-image-field", Object.assign({}, commonProps, { value: displayValue, accept: (
|
|
4350
|
+
return (h("mrd-image-field", Object.assign({}, commonProps, { value: displayValue, accept: (_2 = item.accept) !== null && _2 !== void 0 ? _2 : 'image/*', maxSize: (_3 = item.maxSize) !== null && _3 !== void 0 ? _3 : 0, multiple: (_4 = item.multiple) !== null && _4 !== void 0 ? _4 : false, onMrdUpload: this.handleUpload })));
|
|
4135
4351
|
case ClientLayoutItemFieldDataType.LONGTEXT:
|
|
4136
|
-
return (h("mrd-longtext-field", Object.assign({}, commonProps, { value: (
|
|
4352
|
+
return (h("mrd-longtext-field", Object.assign({}, commonProps, { value: (_5 = displayValue) !== null && _5 !== void 0 ? _5 : '', placeholder: (_6 = item.placeholder) !== null && _6 !== void 0 ? _6 : '' })));
|
|
4137
4353
|
case ClientLayoutItemFieldDataType.SECRET:
|
|
4138
|
-
return (h("mrd-secret-field", Object.assign({}, commonProps, { value: (
|
|
4354
|
+
return (h("mrd-secret-field", Object.assign({}, commonProps, { value: (_7 = displayValue) !== null && _7 !== void 0 ? _7 : '', placeholder: (_8 = item.placeholder) !== null && _8 !== void 0 ? _8 : '' })));
|
|
4139
4355
|
default:
|
|
4140
4356
|
return null;
|
|
4141
4357
|
}
|
|
@@ -4331,7 +4547,7 @@ const MrdFileField = class {
|
|
|
4331
4547
|
error: hasError,
|
|
4332
4548
|
disabled: this.disabled || this.zoneBusy,
|
|
4333
4549
|
});
|
|
4334
|
-
return (h(Host, { key: '
|
|
4550
|
+
return (h(Host, { key: '36f9660fd297e7b2e7b2ac1816f4dcbc70d5cfcb' }, h("div", { key: 'a33534d3fedae04bad0eefc9d2d297ea148c5784', class: "mrd-file-field" }, h(FieldLabel, { key: '833f8ff178ec259c8066ddf542bdd1930bac486f', base: "mrd-file-field", label: this.label, required: this.required }), h("div", { key: 'd3bd00b25329b8cc716c5fcc526919d8f2c14bce', class: zoneClass, onClick: this.handleZoneClick, onDragOver: this.drag.onDragOver, onDragLeave: this.drag.onDragLeave, onDrop: this.drag.onDrop }, h("input", { key: '4b98ee338e8a5e4e6f94e5b5614ca88c90f802ee', ref: el => (this.fileInputRef = el), class: "mrd-file-field__input", type: "file", name: this.name, accept: this.accept, multiple: this.multiple, disabled: this.disabled || this.zoneBusy, required: this.required && !hasEntries, onChange: this.handleInputChange }), hasEntries && !this.multiple ? (h("div", { class: "mrd-file-field__selected" }, this.renderEntry(this.entries[0], 0))) : (h("div", { class: "mrd-file-field__prompt" }, h("svg", { class: "mrd-file-field__upload-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("polyline", { points: "16 16 12 12 8 16" }), h("line", { x1: "12", y1: "12", x2: "12", y2: "21" }), h("path", { d: "M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3" })), h("span", null, t('drop_file_here', this.locale), ' ', h("span", { class: "mrd-file-field__browse" }, t('browse', this.locale)))))), this.multiple && hasEntries && (h("ul", { key: '6e6e1d62738d0a824eb86e0dbb01b63a0227580d', class: "mrd-file-field__list" }, this.entries.map((entry, index) => (h("li", { class: "mrd-file-field__item", key: `${index}-${entryLabel(entry)}` }, this.renderEntry(entry, index)))))), h(FieldError, { key: 'df6427015d3f813a72e8998f9fa6152f6caef90e', base: "mrd-file-field", error: this.error }))));
|
|
4335
4551
|
}
|
|
4336
4552
|
static get watchers() { return {
|
|
4337
4553
|
"value": [{
|
|
@@ -4959,7 +5175,7 @@ const MrdImageField = class {
|
|
|
4959
5175
|
error: hasError,
|
|
4960
5176
|
disabled: this.disabled || this.zoneBusy,
|
|
4961
5177
|
});
|
|
4962
|
-
return (h(Host, { key: '
|
|
5178
|
+
return (h(Host, { key: '5009b2db845c8f85f395c7230e2d5c464c56ea14' }, h("div", { key: 'fcae7821876ee3d71aac576cdea44c3c4f169890', class: "mrd-image-field" }, h(FieldLabel, { key: '834638e3f7b2073508d98b6dd5ecb437b0bb52ad', base: "mrd-image-field", label: this.label, required: this.required }), h("div", { key: '50e9bdaa1ebb3ec87f36e0d37dc6c2f8dc79848d', class: zoneClass, onClick: this.handleZoneClick, onDragOver: this.drag.onDragOver, onDragLeave: this.drag.onDragLeave, onDrop: this.drag.onDrop }, h("input", { key: '38e115fae5b3e2c3371857d284fbd54ea23812df', ref: el => (this.fileInputRef = el), class: "mrd-image-field__input", type: "file", name: this.name, accept: this.accept, multiple: this.multiple, disabled: this.disabled || this.zoneBusy, required: this.required && !hasEntries, onChange: this.handleInputChange }), hasEntries && !this.multiple ? (this.renderSingle(this.entries[0])) : (h("div", { class: "mrd-image-field__prompt" }, h("svg", { class: "mrd-image-field__upload-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", ry: "2" }), h("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), h("polyline", { points: "21 15 16 10 5 21" })), h("span", null, t('drop_file_here', this.locale), ' ', h("span", { class: "mrd-image-field__browse" }, t('browse', this.locale)))))), this.multiple && hasEntries && (h("ul", { key: '67bad2f2142f78d7f25b8f35819b6adba48ea597', class: "mrd-image-field__grid" }, this.entries.map((entry, index) => this.renderGridItem(entry, index)))), h(FieldError, { key: 'ef07863946f0b4c94aa30b97d0ecb9616303e793', base: "mrd-image-field", error: this.error }))));
|
|
4963
5179
|
}
|
|
4964
5180
|
static get watchers() { return {
|
|
4965
5181
|
"value": [{
|
|
@@ -5064,7 +5280,7 @@ const MrdInvoiceView = class {
|
|
|
5064
5280
|
const invoiceDateRaw = this.slotValue('invoiceDate');
|
|
5065
5281
|
const dueDateRaw = this.slotValue('dueDate');
|
|
5066
5282
|
const hasLines = !!((_b = (_a = this.archetype) === null || _a === void 0 ? void 0 : _a.slots) === null || _b === void 0 ? void 0 : _b['lines']);
|
|
5067
|
-
return (h(Host, { key: '
|
|
5283
|
+
return (h(Host, { key: '8005640e6d13004ae2fdf5f48129214fbc8c55fc' }, h("div", { key: '992f925691e2455c8888df76f93176cec5866210', class: "mrd-invoice-view" }, h("div", { key: 'aa418658cfe830be4e0f8bf77af42a898c9170db', class: "mrd-invoice-view__header" }, h("div", { key: 'ce10fef2072c26a0eb8f7ead620cb460af6646f0', class: "mrd-invoice-view__title-row" }, invoiceNumber && h("h1", { key: '992486cd5dc0bfb9761bdc94bcd237e6bd6e3d24', class: "mrd-invoice-view__title" }, t('invoice_title', this.locale), " ", invoiceNumber), this.renderStatus()), h("div", { key: 'a8c5d2516b737d4dcd5d0f966aadcda4d47a63ad', class: "mrd-invoice-view__dates" }, invoiceDateRaw != null && invoiceDateRaw !== '' && (h("span", { key: 'dd728929fc408c280ad81e212bdfac5905cda02d' }, t('invoice_date', this.locale), ": ", formatDate(invoiceDateRaw, this.locale))), dueDateRaw != null && dueDateRaw !== '' && (h("span", { key: 'd4226d5cc37f0152950f44a3b63a88f0454919bd' }, t('invoice_due_date', this.locale), ": ", formatDate(dueDateRaw, this.locale)))), this.renderContainer()), h("div", { key: 'c40b00c852d005963be7b5006e13804e72ba032a', class: "mrd-invoice-view__parties" }, this.renderPartyLink('customer', t('invoice_customer', this.locale)), this.renderPartyLink('supplier', t('invoice_supplier', this.locale))), hasLines && (h("div", { key: '000e991c64daa582194631b2eac6b1acba418e97', class: "mrd-invoice-view__lines" }, h("slot", { key: '97ba2acb750137eeb5ed6b5e9e5d277f638d4f0a', name: "lines" }))), this.renderAmounts(), this.renderAttachments())));
|
|
5068
5284
|
}
|
|
5069
5285
|
static get watchers() { return {
|
|
5070
5286
|
"data": [{
|
|
@@ -5592,7 +5808,7 @@ const MrdLayoutSection = class {
|
|
|
5592
5808
|
const docArchetype = resolveArchetype(this.archetypes, ARCHETYPE_DOCUMENT);
|
|
5593
5809
|
const invoiceArchetype = !docArchetype ? resolveArchetype(this.archetypes, ARCHETYPE_INVOICE) : undefined;
|
|
5594
5810
|
const emailArchetype = !docArchetype && !invoiceArchetype ? resolveArchetype(this.archetypes, ARCHETYPE_EMAIL) : undefined;
|
|
5595
|
-
return (h(Host, { key: '
|
|
5811
|
+
return (h(Host, { key: '8c4e0a0e71d777295010702584b4aa8f7817cafb' }, h("div", { key: 'fe021021eba48acad3d52ee4849ebe355e83c348', class: "mrd-layout-section" }, docArchetype && this.renderDocumentObject(docArchetype), invoiceArchetype && this.renderInvoiceObject(invoiceArchetype), emailArchetype && this.renderEmailObject(emailArchetype), !docArchetype && !invoiceArchetype && !emailArchetype && this.items.map(item => this.renderItem(item))), this.renderImageModal()));
|
|
5596
5812
|
}
|
|
5597
5813
|
get el() { return getElement(this); }
|
|
5598
5814
|
static get watchers() { return {
|
|
@@ -5711,7 +5927,7 @@ const MrdLongtextField = class {
|
|
|
5711
5927
|
};
|
|
5712
5928
|
}
|
|
5713
5929
|
render() {
|
|
5714
|
-
return (h(Host, { key: '
|
|
5930
|
+
return (h(Host, { key: 'a43ce67cb05e96853193e56c175d99e51d07cbab' }, h("div", { key: 'eb7d09bcae010736dd17b5f17bcb1cb32a6b1c4e', class: "mrd-longtext-field" }, h(FieldLabel, { key: 'd3a47993cc977c06b845eda4575b93d238eaf15a', base: "mrd-longtext-field", label: this.label, required: this.required }), this.disabled ? (h("pre", { class: "mrd-longtext-field__content" }, this.value)) : (h("textarea", { class: controlClass('mrd-longtext-field', !!this.error), name: this.name, placeholder: this.placeholder, required: this.required, rows: 10, onInput: this.handleInput, onBlur: this.handleBlur }, this.value)), h(FieldError, { key: '89f801af61fc0b874db44dbfca6eb33ffe285a84', base: "mrd-longtext-field", error: this.error }))));
|
|
5715
5931
|
}
|
|
5716
5932
|
};
|
|
5717
5933
|
MrdLongtextField.style = mrdLongtextFieldCss();
|
|
@@ -5734,10 +5950,13 @@ const MrdNumberField = class {
|
|
|
5734
5950
|
this.decimalPrecision = 2;
|
|
5735
5951
|
this.displayValue = '';
|
|
5736
5952
|
this.error = '';
|
|
5953
|
+
/** While focused the user owns the text; prop updates must not overwrite it. */
|
|
5954
|
+
this.focused = false;
|
|
5737
5955
|
this.handleInput = (e) => {
|
|
5738
5956
|
this.displayValue = e.target.value;
|
|
5739
5957
|
};
|
|
5740
5958
|
this.handleBlur = (e) => {
|
|
5959
|
+
this.focused = false;
|
|
5741
5960
|
const raw = e.target.value;
|
|
5742
5961
|
const parsed = parseLocalizedNumber(raw, this.locale);
|
|
5743
5962
|
if (this.required && (parsed === null || raw === '')) {
|
|
@@ -5756,17 +5975,30 @@ const MrdNumberField = class {
|
|
|
5756
5975
|
this.mrdBlur.emit({ name: this.name, value: parsed });
|
|
5757
5976
|
};
|
|
5758
5977
|
this.handleFocus = () => {
|
|
5759
|
-
|
|
5760
|
-
|
|
5761
|
-
|
|
5762
|
-
|
|
5978
|
+
this.focused = true;
|
|
5979
|
+
// Drop the grouping separators while editing, but keep the locale's decimal
|
|
5980
|
+
// separator: String(1234.56) would be re-read as 123456 where '.' groups.
|
|
5981
|
+
const parsed = parseLocalizedNumber(this.displayValue, this.locale);
|
|
5982
|
+
if (parsed !== null) {
|
|
5983
|
+
this.displayValue = formatNumber(parsed, this.locale, { useGrouping: false, maximumFractionDigits: 20 });
|
|
5763
5984
|
}
|
|
5764
5985
|
};
|
|
5765
5986
|
}
|
|
5766
5987
|
componentWillLoad() {
|
|
5767
|
-
|
|
5768
|
-
|
|
5769
|
-
|
|
5988
|
+
this.syncFromValue();
|
|
5989
|
+
}
|
|
5990
|
+
/** Edit mode loads the record after mount, so the incoming value must re-sync. */
|
|
5991
|
+
valueChanged() {
|
|
5992
|
+
if (!this.focused)
|
|
5993
|
+
this.syncFromValue();
|
|
5994
|
+
}
|
|
5995
|
+
localeChanged() {
|
|
5996
|
+
if (!this.focused)
|
|
5997
|
+
this.syncFromValue();
|
|
5998
|
+
}
|
|
5999
|
+
syncFromValue() {
|
|
6000
|
+
this.displayValue =
|
|
6001
|
+
this.value !== null && this.value !== undefined ? this.formatForDisplay(this.value) : '';
|
|
5770
6002
|
}
|
|
5771
6003
|
formatForDisplay(val) {
|
|
5772
6004
|
if (this.dataType === ClientLayoutItemFieldDataType.PERCENTAGE) {
|
|
@@ -5787,8 +6019,16 @@ const MrdNumberField = class {
|
|
|
5787
6019
|
const hasError = !!this.error;
|
|
5788
6020
|
const suffix = this.dataType === ClientLayoutItemFieldDataType.PERCENTAGE ? '%' :
|
|
5789
6021
|
this.dataType === ClientLayoutItemFieldDataType.DECIMAL ? '' : '';
|
|
5790
|
-
return (h(Host, { key: '
|
|
6022
|
+
return (h(Host, { key: 'bd5eb25cf7b97ef2ddb67a6bc6d6d96c9bff7510' }, h("div", { key: '68b15887a045f743a7f177e7a178146a9f4e0400', class: "mrd-number-field" }, h(FieldLabel, { key: '72e88a34a390e36ee11f5840d87dedd9d4d7fb12', base: "mrd-number-field", label: this.label, required: this.required }), h("div", { key: 'd97dae69eedf4c0ed1c872065754327dbffb5ba7', class: "mrd-number-field__input-wrapper" }, h("input", { key: '5767f6c34a08f503a1a157390c679382c857ff01', class: controlClass('mrd-number-field', hasError), type: "text", inputMode: "decimal", name: this.name, value: this.displayValue, placeholder: this.placeholder || (suffix ? `0${suffix}` : '0'), required: this.required, disabled: this.disabled, onInput: this.handleInput, onBlur: this.handleBlur, onFocus: this.handleFocus })), h(FieldError, { key: '1d4f8ffd3fcdf2ae2e8eb1eb68c051619d66c954', base: "mrd-number-field", error: this.error }))));
|
|
5791
6023
|
}
|
|
6024
|
+
static get watchers() { return {
|
|
6025
|
+
"value": [{
|
|
6026
|
+
"valueChanged": 0
|
|
6027
|
+
}],
|
|
6028
|
+
"locale": [{
|
|
6029
|
+
"localeChanged": 0
|
|
6030
|
+
}]
|
|
6031
|
+
}; }
|
|
5792
6032
|
};
|
|
5793
6033
|
MrdNumberField.style = mrdNumberFieldCss();
|
|
5794
6034
|
|
|
@@ -6075,9 +6315,9 @@ const MrdSecretField = class {
|
|
|
6075
6315
|
};
|
|
6076
6316
|
}
|
|
6077
6317
|
render() {
|
|
6078
|
-
return (h(Host, { key: '
|
|
6318
|
+
return (h(Host, { key: 'd3d204242898c1f258b088e7b5428421cde8d7a7' }, h("div", { key: '11d284625cdd1e0def58cc31eab9bbe59346649d', class: "mrd-secret-field" }, h(FieldLabel, { key: '333e5b23d2379125a393f555b936be7bc521fdb4', base: "mrd-secret-field", label: this.label, required: this.required }), this.disabled
|
|
6079
6319
|
? (h("span", { class: "mrd-secret-field__masked", "aria-label": this.label }, this.value ? '••••••••' : ''))
|
|
6080
|
-
: (h("input", { class: controlClass('mrd-secret-field', !!this.error), type: "password", name: this.name, value: this.value, placeholder: this.placeholder, required: this.required, autocomplete: "new-password", onInput: this.handleInput, onBlur: this.handleBlur })), h(FieldError, { key: '
|
|
6320
|
+
: (h("input", { class: controlClass('mrd-secret-field', !!this.error), type: "password", name: this.name, value: this.value, placeholder: this.placeholder, required: this.required, autocomplete: "new-password", onInput: this.handleInput, onBlur: this.handleBlur })), h(FieldError, { key: 'cc202197fdab62da7b5083e078e69efd86e673ca', base: "mrd-secret-field", error: this.error }))));
|
|
6081
6321
|
}
|
|
6082
6322
|
};
|
|
6083
6323
|
MrdSecretField.style = mrdSecretFieldCss();
|
|
@@ -7405,7 +7645,7 @@ const MrdTextField = class {
|
|
|
7405
7645
|
};
|
|
7406
7646
|
}
|
|
7407
7647
|
render() {
|
|
7408
|
-
return (h(Host, { key: '
|
|
7648
|
+
return (h(Host, { key: '145aa80d06459fe85650702ced893e102762afa8' }, h("div", { key: '8f08af9acff56e704d216dc185a5d344b5b9f671', class: "mrd-text-field" }, h(FieldLabel, { key: '4e0204ffe7e8460eaf9a4be1535252cc11d0bab7', base: "mrd-text-field", label: this.label, required: this.required }), h("input", { key: '4d519077ad96c121ede51e188a2151efe72811db', class: controlClass('mrd-text-field', !!this.error), type: "text", name: this.name, value: this.value, placeholder: this.placeholder, required: this.required, disabled: this.disabled, onInput: this.handleInput, onBlur: this.handleBlur }), h(FieldError, { key: '3c5af47037f6d6851503d769429d6c0f786d389d', base: "mrd-text-field", error: this.error }))));
|
|
7409
7649
|
}
|
|
7410
7650
|
};
|
|
7411
7651
|
MrdTextField.style = mrdTextFieldCss();
|
|
@@ -7477,7 +7717,7 @@ const MrdTextareaField = class {
|
|
|
7477
7717
|
return purify.sanitize(html);
|
|
7478
7718
|
}
|
|
7479
7719
|
render() {
|
|
7480
|
-
return (h(Host, { key: '
|
|
7720
|
+
return (h(Host, { key: 'e7c53e9cf54bd4138b42ca3bc7bb5381aad3e4ac' }, h("div", { key: 'bf580a74d2233704852c7d3083ec91c9bbe868ad', class: "mrd-textarea-field" }, h(FieldLabel, { key: '7de50cb2865e83c7fe1ef9b6b099b639e165909c', base: "mrd-textarea-field", label: this.label, required: this.required }), h("div", { key: 'c78e914091cd70b52c1e9cd0046e7c97bcc7e799', class: controlClass('mrd-textarea-field', !!this.error, 'container') }, h("div", { key: '604a157e82ca8a4d98bbd1c928e9f8b41d031227', class: "mrd-textarea-field__editor" })), h(FieldError, { key: 'd0263a7285b928be6ed377e7e0fa3f53a555dadd', base: "mrd-textarea-field", error: this.error }))));
|
|
7481
7721
|
}
|
|
7482
7722
|
get el() { return getElement(this); }
|
|
7483
7723
|
};
|
|
@@ -7508,7 +7748,7 @@ const MrdTimeField = class {
|
|
|
7508
7748
|
};
|
|
7509
7749
|
}
|
|
7510
7750
|
render() {
|
|
7511
|
-
return (h(Host, { key: '
|
|
7751
|
+
return (h(Host, { key: 'ef3876dd5c1d72bdbdb65cba00ea0992ba2ab2b6' }, h("div", { key: '6b217f6c6ec0dbb8b3249dfab6443b8f6140891c', class: "mrd-time-field" }, h(FieldLabel, { key: '87adbcc4bf1ccad07d899a315cb14a00650af09c', base: "mrd-time-field", label: this.label, required: this.required }), h("input", { key: '870fcf7e0df2ee2804f95fdc79c890b3e27bba3f', class: controlClass('mrd-time-field', !!this.error), type: "time", name: this.name, value: this.value, required: this.required, disabled: this.disabled, onChange: this.handleChange, onBlur: this.handleBlur }), h(FieldError, { key: '03c21d23fbc039ffd79856134d181dffcb9e3621', base: "mrd-time-field", error: this.error }))));
|
|
7512
7752
|
}
|
|
7513
7753
|
};
|
|
7514
7754
|
MrdTimeField.style = mrdTimeFieldCss();
|