@mmlogic/components 0.4.0 → 0.4.2
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/index.cjs.js +8 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mosterdcomponents.cjs.js +1 -1
- package/dist/cjs/{mrd-boolean-field_23.cjs.entry.js → mrd-boolean-field_24.cjs.entry.js} +348 -39
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/documents/mrd-document-container/mrd-document-container.css +14 -1
- package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js +22 -7
- package/dist/collection/components/documents/mrd-document-list/mrd-document-list.css +8 -5
- package/dist/collection/components/documents/mrd-document-list/tree-view.js +13 -1
- package/dist/collection/components/documents/mrd-document-view/mrd-document-view.css +39 -29
- package/dist/collection/components/documents/mrd-document-view/mrd-document-view.js +109 -8
- package/dist/collection/components/documents/mrd-file-preview/file-preview-kind.js +30 -0
- package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.css +59 -0
- package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.js +212 -0
- package/dist/collection/components/fields/mrd-boolean-field/mrd-boolean-field.js +1 -1
- package/dist/collection/components/fields/mrd-currency-field/mrd-currency-field.js +1 -1
- package/dist/collection/components/fields/mrd-date-field/mrd-date-field.js +1 -1
- package/dist/collection/components/fields/mrd-datetime-field/mrd-datetime-field.js +1 -1
- 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 +1 -1
- 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/layout/mrd-layout-section/mrd-layout-section.css +5 -0
- package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +91 -8
- package/dist/collection/components/table/mrd-table/mrd-table.css +20 -0
- package/dist/collection/components/table/mrd-table/mrd-table.js +124 -5
- package/dist/collection/components/table/mrd-table/virtual-scroll.js +14 -0
- package/dist/collection/dev/api.js +9 -0
- package/dist/collection/dev/app.js +101 -3
- package/dist/collection/dev/example-data.js +24 -0
- package/dist/collection/types/client-layout.js +8 -0
- package/dist/collection/utils/i18n.js +40 -0
- package/dist/components/client-layout.js +1 -1
- package/dist/components/i18n.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/mrd-boolean-field2.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-container2.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-file-field2.js +1 -1
- package/dist/components/mrd-file-preview.d.ts +11 -0
- package/dist/components/mrd-file-preview.js +1 -0
- package/dist/components/mrd-file-preview2.js +1 -0
- package/dist/components/mrd-image-field2.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-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/index.js +9 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mosterdcomponents.js +1 -1
- package/dist/esm/{mrd-boolean-field_23.entry.js → mrd-boolean-field_24.entry.js} +349 -41
- package/dist/mosterdcomponents/cell-renderer-PbcEU4ph.js.map +1 -0
- package/dist/mosterdcomponents/client-layout-DCOAAH92.js.map +1 -0
- package/dist/mosterdcomponents/field-helpers-CASS3akr.js.map +1 -0
- package/dist/mosterdcomponents/file-upload-common-D1ndi6cN.js.map +1 -0
- package/dist/mosterdcomponents/format-BAfsQfy1.js.map +1 -0
- package/dist/mosterdcomponents/i18n-B1IIkRF9.js.map +1 -0
- package/dist/mosterdcomponents/index-AokUFVX0.js.map +1 -0
- package/dist/mosterdcomponents/index-CprJSlzK.js.map +1 -0
- package/dist/mosterdcomponents/index.esm.js +1 -1
- package/dist/mosterdcomponents/index.esm.js.map +1 -0
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
- package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +1 -0
- package/dist/mosterdcomponents/p-aae8a9dc.entry.js +1 -0
- package/dist/mosterdcomponents/query-params-B1HfnMOl.js.map +1 -0
- package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +1 -0
- package/dist/mosterdcomponents/validation-DbEViuiw.js.map +1 -0
- package/dist/types/components/documents/mrd-document-container/mrd-document-container.d.ts +6 -2
- package/dist/types/components/documents/mrd-document-view/mrd-document-view.d.ts +29 -1
- package/dist/types/components/documents/mrd-file-preview/file-preview-kind.d.ts +9 -0
- package/dist/types/components/documents/mrd-file-preview/mrd-file-preview.d.ts +41 -0
- package/dist/types/components/layout/mrd-layout-section/mrd-layout-section.d.ts +17 -1
- package/dist/types/components/table/mrd-table/mrd-table.d.ts +23 -0
- package/dist/types/components/table/mrd-table/virtual-scroll.d.ts +7 -0
- package/dist/types/components.d.ts +194 -7
- package/dist/types/types/client-layout.d.ts +10 -0
- package/package.json +1 -1
- package/dist/mosterdcomponents/p-9b3c0917.entry.js +0 -1
|
@@ -29,7 +29,7 @@ const MrdBooleanField = class {
|
|
|
29
29
|
this.checked = !!this.value;
|
|
30
30
|
}
|
|
31
31
|
render() {
|
|
32
|
-
return (index.h(index.Host, { key: '
|
|
32
|
+
return (index.h(index.Host, { key: 'c0e92a50b1512d7b7f36f151b34bcb5b9497ca59' }, index.h("div", { key: 'e3f70c88321d8e72784b81092a9ebc0451ba330d', class: "mrd-boolean-field" }, index.h("label", { key: '3e6d907b72a5e1da7e268685c67811ebf264d5d8', class: "mrd-boolean-field__toggle-label" }, index.h("input", { key: '2b6df62a72cba19aa26374a2448c26666e28b03d', class: "mrd-boolean-field__checkbox", type: "checkbox", name: this.name, checked: this.checked, disabled: this.disabled, onChange: this.handleChange, onBlur: this.handleBlur }), index.h("span", { key: '77cbe5c1a25153de745f5e91eef589f40cb3237d', class: "mrd-boolean-field__toggle", "aria-hidden": "true" }), this.label && (index.h("span", { key: '34daaa269ed64ed3be71ecfd15d79eb42d746247', class: `mrd-boolean-field__text${this.required ? ' mrd-boolean-field__text--required' : ''}` }, this.label))))));
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
35
|
MrdBooleanField.style = mrdBooleanFieldCss();
|
|
@@ -125,6 +125,7 @@ const translations = {
|
|
|
125
125
|
invalid_image: 'Selecteer een afbeeldingsbestand',
|
|
126
126
|
search_results: 'Zoekresultaten',
|
|
127
127
|
no_results: 'Geen resultaten gevonden',
|
|
128
|
+
load_failed_retry: 'Laden mislukt — opnieuw proberen',
|
|
128
129
|
loading: 'Laden...',
|
|
129
130
|
submit: 'Opslaan',
|
|
130
131
|
cancel: 'Annuleren',
|
|
@@ -180,6 +181,10 @@ const translations = {
|
|
|
180
181
|
folder_no_slash: "Een foldernaam mag geen '/' bevatten",
|
|
181
182
|
folder_duplicate: 'Er bestaat al een folder met deze naam',
|
|
182
183
|
doc_empty_drop: 'Nog geen documenten — sleep bestanden hierheen',
|
|
184
|
+
// mrd-file-preview
|
|
185
|
+
preview_unsupported: 'Geen voorbeeld beschikbaar voor dit bestandstype',
|
|
186
|
+
preview_error: 'Voorbeeld laden mislukt',
|
|
187
|
+
retry: 'Opnieuw proberen',
|
|
183
188
|
},
|
|
184
189
|
en: {
|
|
185
190
|
required: 'This field is required',
|
|
@@ -198,6 +203,7 @@ const translations = {
|
|
|
198
203
|
invalid_image: 'Please select an image file',
|
|
199
204
|
search_results: 'Search results',
|
|
200
205
|
no_results: 'No results found',
|
|
206
|
+
load_failed_retry: 'Failed to load — retry',
|
|
201
207
|
loading: 'Loading...',
|
|
202
208
|
submit: 'Save',
|
|
203
209
|
cancel: 'Cancel',
|
|
@@ -253,6 +259,10 @@ const translations = {
|
|
|
253
259
|
folder_no_slash: "A folder name cannot contain '/'",
|
|
254
260
|
folder_duplicate: 'A folder with this name already exists',
|
|
255
261
|
doc_empty_drop: 'No documents yet — drop files here',
|
|
262
|
+
// mrd-file-preview
|
|
263
|
+
preview_unsupported: 'No preview available for this file type',
|
|
264
|
+
preview_error: 'Failed to load preview',
|
|
265
|
+
retry: 'Retry',
|
|
256
266
|
},
|
|
257
267
|
ar: {
|
|
258
268
|
required: 'هذا الحقل مطلوب',
|
|
@@ -271,6 +281,7 @@ const translations = {
|
|
|
271
281
|
invalid_image: 'يرجى اختيار ملف صورة',
|
|
272
282
|
search_results: 'نتائج البحث',
|
|
273
283
|
no_results: 'لم يتم العثور على نتائج',
|
|
284
|
+
load_failed_retry: 'فشل التحميل — إعادة المحاولة',
|
|
274
285
|
loading: 'جار التحميل...',
|
|
275
286
|
submit: 'حفظ',
|
|
276
287
|
cancel: 'إلغاء',
|
|
@@ -320,6 +331,10 @@ const translations = {
|
|
|
320
331
|
history_until: 'حتى',
|
|
321
332
|
history_badge_tooltip: 'القيم السابقة',
|
|
322
333
|
hyperlink_name: 'نص الرابط (اختياري)',
|
|
334
|
+
// mrd-file-preview
|
|
335
|
+
preview_unsupported: 'لا تتوفر معاينة لهذا النوع من الملفات',
|
|
336
|
+
preview_error: 'فشل تحميل المعاينة',
|
|
337
|
+
retry: 'إعادة المحاولة',
|
|
323
338
|
},
|
|
324
339
|
fr: {
|
|
325
340
|
required: 'Ce champ est obligatoire',
|
|
@@ -338,6 +353,7 @@ const translations = {
|
|
|
338
353
|
invalid_image: 'Veuillez sélectionner un fichier image',
|
|
339
354
|
search_results: 'Résultats de recherche',
|
|
340
355
|
no_results: 'Aucun résultat trouvé',
|
|
356
|
+
load_failed_retry: 'Échec du chargement — réessayer',
|
|
341
357
|
loading: 'Chargement...',
|
|
342
358
|
submit: 'Enregistrer',
|
|
343
359
|
cancel: 'Annuler',
|
|
@@ -387,6 +403,10 @@ const translations = {
|
|
|
387
403
|
history_until: "jusqu'au",
|
|
388
404
|
history_badge_tooltip: 'Valeurs précédentes',
|
|
389
405
|
hyperlink_name: 'Texte du lien (optionnel)',
|
|
406
|
+
// mrd-file-preview
|
|
407
|
+
preview_unsupported: "Aucun aperçu disponible pour ce type de fichier",
|
|
408
|
+
preview_error: "Échec du chargement de l'aperçu",
|
|
409
|
+
retry: 'Réessayer',
|
|
390
410
|
},
|
|
391
411
|
de: {
|
|
392
412
|
required: 'Dieses Feld ist erforderlich',
|
|
@@ -405,6 +425,7 @@ const translations = {
|
|
|
405
425
|
invalid_image: 'Bitte eine Bilddatei auswählen',
|
|
406
426
|
search_results: 'Suchergebnisse',
|
|
407
427
|
no_results: 'Keine Ergebnisse gefunden',
|
|
428
|
+
load_failed_retry: 'Laden fehlgeschlagen — erneut versuchen',
|
|
408
429
|
loading: 'Laden...',
|
|
409
430
|
submit: 'Speichern',
|
|
410
431
|
cancel: 'Abbrechen',
|
|
@@ -454,6 +475,10 @@ const translations = {
|
|
|
454
475
|
history_until: 'bis',
|
|
455
476
|
history_badge_tooltip: 'Vorherige Werte',
|
|
456
477
|
hyperlink_name: 'Linktext (optional)',
|
|
478
|
+
// mrd-file-preview
|
|
479
|
+
preview_unsupported: 'Keine Vorschau für diesen Dateityp verfügbar',
|
|
480
|
+
preview_error: 'Vorschau konnte nicht geladen werden',
|
|
481
|
+
retry: 'Erneut versuchen',
|
|
457
482
|
},
|
|
458
483
|
es: {
|
|
459
484
|
required: 'Este campo es obligatorio',
|
|
@@ -472,6 +497,7 @@ const translations = {
|
|
|
472
497
|
invalid_image: 'Seleccione un archivo de imagen',
|
|
473
498
|
search_results: 'Resultados de búsqueda',
|
|
474
499
|
no_results: 'No se encontraron resultados',
|
|
500
|
+
load_failed_retry: 'Error al cargar — reintentar',
|
|
475
501
|
loading: 'Cargando...',
|
|
476
502
|
submit: 'Guardar',
|
|
477
503
|
cancel: 'Cancelar',
|
|
@@ -521,6 +547,10 @@ const translations = {
|
|
|
521
547
|
history_until: 'hasta',
|
|
522
548
|
history_badge_tooltip: 'Valores anteriores',
|
|
523
549
|
hyperlink_name: 'Texto del enlace (opcional)',
|
|
550
|
+
// mrd-file-preview
|
|
551
|
+
preview_unsupported: 'Vista previa no disponible para este tipo de archivo',
|
|
552
|
+
preview_error: 'Error al cargar la vista previa',
|
|
553
|
+
retry: 'Reintentar',
|
|
524
554
|
},
|
|
525
555
|
it: {
|
|
526
556
|
required: 'Questo campo è obbligatorio',
|
|
@@ -539,6 +569,7 @@ const translations = {
|
|
|
539
569
|
invalid_image: 'Seleziona un file immagine',
|
|
540
570
|
search_results: 'Risultati della ricerca',
|
|
541
571
|
no_results: 'Nessun risultato trovato',
|
|
572
|
+
load_failed_retry: 'Caricamento non riuscito — riprova',
|
|
542
573
|
loading: 'Caricamento...',
|
|
543
574
|
submit: 'Salva',
|
|
544
575
|
cancel: 'Annulla',
|
|
@@ -588,6 +619,10 @@ const translations = {
|
|
|
588
619
|
history_until: 'fino a',
|
|
589
620
|
history_badge_tooltip: 'Valori precedenti',
|
|
590
621
|
hyperlink_name: 'Testo del collegamento (opzionale)',
|
|
622
|
+
// mrd-file-preview
|
|
623
|
+
preview_unsupported: 'Nessuna anteprima disponibile per questo tipo di file',
|
|
624
|
+
preview_error: "Impossibile caricare l'anteprima",
|
|
625
|
+
retry: 'Riprova',
|
|
591
626
|
},
|
|
592
627
|
uk: {
|
|
593
628
|
required: "Це поле обов'язкове",
|
|
@@ -606,6 +641,7 @@ const translations = {
|
|
|
606
641
|
invalid_image: 'Будь ласка, виберіть файл зображення',
|
|
607
642
|
search_results: 'Результати пошуку',
|
|
608
643
|
no_results: 'Результатів не знайдено',
|
|
644
|
+
load_failed_retry: 'Не вдалося завантажити — повторити',
|
|
609
645
|
loading: 'Завантаження...',
|
|
610
646
|
submit: 'Зберегти',
|
|
611
647
|
cancel: 'Скасувати',
|
|
@@ -655,6 +691,10 @@ const translations = {
|
|
|
655
691
|
history_until: 'до',
|
|
656
692
|
history_badge_tooltip: 'Попередні значення',
|
|
657
693
|
hyperlink_name: "Текст посилання (необов'язково)",
|
|
694
|
+
// mrd-file-preview
|
|
695
|
+
preview_unsupported: 'Попередній перегляд недоступний для цього типу файлу',
|
|
696
|
+
preview_error: 'Не вдалося завантажити попередній перегляд',
|
|
697
|
+
retry: 'Повторити',
|
|
658
698
|
},
|
|
659
699
|
};
|
|
660
700
|
function t(key, locale) {
|
|
@@ -775,7 +815,7 @@ const MrdCurrencyField = class {
|
|
|
775
815
|
}
|
|
776
816
|
render() {
|
|
777
817
|
const hasError = !!this.error;
|
|
778
|
-
return (index.h(index.Host, { key: '
|
|
818
|
+
return (index.h(index.Host, { key: '7265395c3b93c3b4daf4c4221da13e01b2fed2e8' }, index.h("div", { key: 'e644b67a7aba6e8f5b7175f5f79a4bf5e99cb611', class: "mrd-currency-field" }, index.h(FieldLabel, { key: 'd47a215c0684aea8a3253ae6edc4628d20733d90', base: "mrd-currency-field", label: this.label, required: this.required }), index.h("div", { key: 'b8f67f8188ad9cd8ba2b6869fcb2b4cd413dec32', class: "mrd-currency-field__row" }, index.h("input", { key: '8d643424d8932d11ceea0435353c54bc9399c187', class: controlClass('mrd-currency-field', hasError, 'amount'), type: "text", inputMode: "decimal", name: `${this.name}_amount`, value: this.amountDisplay, placeholder: "0.00", required: this.required, disabled: this.disabled, onInput: this.handleAmountInput, onBlur: this.handleAmountBlur }), index.h("select", { key: '55b12e960646c2420883df848ae440d45f808300', class: "mrd-currency-field__currency", disabled: this.disabled, onChange: this.handleCurrencyChange }, COMMON_CURRENCIES.map(c => (index.h("option", { key: c, value: c, selected: c === this.currency }, c))))), index.h(FieldError, { key: 'd0a6adbb83af8fde047eff22c8efd9bbe1ae638f', base: "mrd-currency-field", error: this.error }))));
|
|
779
819
|
}
|
|
780
820
|
};
|
|
781
821
|
MrdCurrencyField.style = mrdCurrencyFieldCss();
|
|
@@ -805,7 +845,7 @@ const MrdDateField = class {
|
|
|
805
845
|
};
|
|
806
846
|
}
|
|
807
847
|
render() {
|
|
808
|
-
return (index.h(index.Host, { key: '
|
|
848
|
+
return (index.h(index.Host, { key: 'c0b9d684c5e0b5e3da785c383472ed5d6c13c39f' }, index.h("div", { key: '304c9b5c9570a369258f5f6fd0877a01a87d98d5', class: "mrd-date-field" }, index.h(FieldLabel, { key: '72c5ec21699a314920ea1217aee9a353bc8b4b7e', base: "mrd-date-field", label: this.label, required: this.required }), index.h("input", { key: 'be18df6c7e5fe89bf00cef38484711a9a685e0dc', class: controlClass('mrd-date-field', !!this.error), type: "date", name: this.name, value: this.value, required: this.required, disabled: this.disabled, onChange: this.handleChange, onBlur: this.handleBlur }), index.h(FieldError, { key: 'f16ffb7e14f9ac9af4a34a96361a25dd4d738d68', base: "mrd-date-field", error: this.error }))));
|
|
809
849
|
}
|
|
810
850
|
};
|
|
811
851
|
MrdDateField.style = mrdDateFieldCss();
|
|
@@ -862,7 +902,7 @@ const MrdDatetimeField = class {
|
|
|
862
902
|
return d.toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
863
903
|
}
|
|
864
904
|
render() {
|
|
865
|
-
return (index.h(index.Host, { key: '
|
|
905
|
+
return (index.h(index.Host, { key: '0ee285553f3d5e1a9984619795543d67d581c76f' }, index.h("div", { key: '2c93dffe3701da9099f4b34a9d7c1d0619fa824e', class: "mrd-datetime-field" }, index.h(FieldLabel, { key: 'ebda087fdcb2a956933758e6250a8e4dc0484ef9', base: "mrd-datetime-field", label: this.label, required: this.required }), index.h("input", { key: '06b012fc78c76e3b08ef24af5e134aa691975285', class: controlClass('mrd-datetime-field', !!this.error), type: "datetime-local", name: this.name, value: this.localValue, required: this.required, disabled: this.disabled, onChange: this.handleChange, onBlur: this.handleBlur }), index.h(FieldError, { key: '54e7acdd051c00893eb17cbf4911917fceddb54f', base: "mrd-datetime-field", error: this.error }))));
|
|
866
906
|
}
|
|
867
907
|
static get watchers() { return {
|
|
868
908
|
"value": [{
|
|
@@ -872,7 +912,7 @@ const MrdDatetimeField = class {
|
|
|
872
912
|
};
|
|
873
913
|
MrdDatetimeField.style = mrdDatetimeFieldCss();
|
|
874
914
|
|
|
875
|
-
const mrdDocumentContainerCss = () => `.sc-mrd-document-container-h{display:block}.mrd-document-container__toolbar.sc-mrd-document-container{display:flex;align-items:center;justify-content:flex-end;gap:var(--mrd-space-2);padding:var(--mrd-space-2) var(--mrd-
|
|
915
|
+
const mrdDocumentContainerCss = () => `.sc-mrd-document-container-h{display:block}.mrd-document-container__toolbar.sc-mrd-document-container{display:flex;align-items:center;justify-content:flex-end;gap:var(--mrd-space-2);padding:var(--mrd-space-2) 0;border-bottom:1px solid var(--mrd-color-neutral-100)}.mrd-document-container__body--tree.sc-mrd-document-container{border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow:hidden}.mrd-document-container__action.sc-mrd-document-container{display:inline-flex;align-items:center;gap:var(--mrd-space-2);height:1.625rem;padding:0 var(--mrd-space-3);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-700);background:var(--mrd-color-white);border:1px solid var(--mrd-color-neutral-200);border-radius:var(--mrd-border-radius);cursor:pointer;transition:background var(--mrd-transition-fast), border-color var(--mrd-transition-fast)}.mrd-document-container__action.sc-mrd-document-container svg.sc-mrd-document-container{width:1rem;height:1rem;color:var(--mrd-color-folder)}.mrd-document-container__action.sc-mrd-document-container:hover:not(:disabled){background:var(--mrd-color-neutral-50);border-color:var(--mrd-color-neutral-300)}.mrd-document-container__action.sc-mrd-document-container:disabled{opacity:0.5;cursor:not-allowed}.mrd-document-container__seg.sc-mrd-document-container{display:inline-flex;gap:2px;padding:2px;background:var(--mrd-color-neutral-100);border-radius:var(--mrd-border-radius)}.mrd-document-container__seg-btn.sc-mrd-document-container{width:1.875rem;height:1.625rem;display:grid;place-items:center;border:none;background:none;border-radius:var(--mrd-border-radius-sm);color:var(--mrd-color-neutral-500);cursor:pointer;transition:color var(--mrd-transition-fast), background var(--mrd-transition-fast)}.mrd-document-container__seg-btn.sc-mrd-document-container:hover{color:var(--mrd-color-neutral-800)}.mrd-document-container__seg-btn[aria-pressed=true].sc-mrd-document-container{background:var(--mrd-color-white);color:var(--mrd-color-primary-dark);box-shadow:var(--mrd-shadow-sm)}.mrd-document-container__seg-btn.sc-mrd-document-container svg.sc-mrd-document-container{width:1rem;height:1rem}`;
|
|
876
916
|
|
|
877
917
|
const MrdDocumentContainer = class {
|
|
878
918
|
constructor(hostRef) {
|
|
@@ -943,7 +983,7 @@ const MrdDocumentContainer = class {
|
|
|
943
983
|
this.mrdLoadPage.emit(e.detail);
|
|
944
984
|
}, onMrdNavigate: (e) => {
|
|
945
985
|
e.stopPropagation();
|
|
946
|
-
this.mrdNavigate.emit(e.detail);
|
|
986
|
+
this.mrdNavigate.emit(Object.assign(Object.assign({}, e.detail), { navigateBehaviour: index$1.ClientLayoutNavigateBehaviour.OVERLAY_PAGE }));
|
|
947
987
|
}, onMrdCanCreate: (e) => {
|
|
948
988
|
e.stopPropagation();
|
|
949
989
|
this.canCreate = e.detail;
|
|
@@ -969,7 +1009,11 @@ const MrdDocumentContainer = class {
|
|
|
969
1009
|
var _a, _b, _c;
|
|
970
1010
|
e.stopPropagation();
|
|
971
1011
|
const row = e.detail;
|
|
972
|
-
this.mrdNavigate.emit({
|
|
1012
|
+
this.mrdNavigate.emit({
|
|
1013
|
+
href: (_b = (_a = row === null || row === void 0 ? void 0 : row._links) === null || _a === void 0 ? void 0 : _a.self) === null || _b === void 0 ? void 0 : _b.href,
|
|
1014
|
+
label: (_c = row === null || row === void 0 ? void 0 : row.name) !== null && _c !== void 0 ? _c : '',
|
|
1015
|
+
navigateBehaviour: index$1.ClientLayoutNavigateBehaviour.OVERLAY_PAGE,
|
|
1016
|
+
});
|
|
973
1017
|
}, onMrdAction: (e) => {
|
|
974
1018
|
e.stopPropagation();
|
|
975
1019
|
this.mrdAction.emit(e.detail);
|
|
@@ -977,7 +1021,10 @@ const MrdDocumentContainer = class {
|
|
|
977
1021
|
}
|
|
978
1022
|
render() {
|
|
979
1023
|
const treeMode = this.mode === 'tree';
|
|
980
|
-
return (index.h(index.Host, { key: '
|
|
1024
|
+
return (index.h(index.Host, { key: 'e8d37d2f818b9b2260fb2ccd3d784393a28385c4' }, this.renderToolbar(), index.h("div", { key: 'fa80a1343e9b2f1e74f30317bfbfbab78ea63e5d', class: {
|
|
1025
|
+
'mrd-document-container__body': true,
|
|
1026
|
+
'mrd-document-container__body--tree': treeMode,
|
|
1027
|
+
}, style: treeMode ? { height: `${this.height}px`, overflowY: 'auto' } : {} }, treeMode ? this.renderTree() : this.renderList())));
|
|
981
1028
|
}
|
|
982
1029
|
get el() { return index.getElement(this); }
|
|
983
1030
|
};
|
|
@@ -1149,9 +1196,21 @@ function folderIcon() {
|
|
|
1149
1196
|
function docIcon() {
|
|
1150
1197
|
return (index.h("svg", { class: "mrd-document-list__icon mrd-document-list__icon--doc", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, index.h("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), index.h("path", { d: "M14 2v6h6" })));
|
|
1151
1198
|
}
|
|
1199
|
+
/** Depth 0 renders no indent spacer at all — like Finder, the top-level
|
|
1200
|
+
* disclosure triangle sits in the row's own left margin instead of adding
|
|
1201
|
+
* an extra indent column before it. Nested levels still step in 18px each. */
|
|
1152
1202
|
function indent(depth) {
|
|
1203
|
+
if (depth === 0)
|
|
1204
|
+
return null;
|
|
1153
1205
|
return index.h("span", { class: "mrd-document-list__indent", style: { width: `${depth * 18}px` } });
|
|
1154
1206
|
}
|
|
1207
|
+
/** Pixel offset from the row's left edge to where the label text starts,
|
|
1208
|
+
* used to align the inline folder-name-error text under the label above it.
|
|
1209
|
+
* Mirrors the row's padding + (indent) + chevron + icon + gaps in tree-view.scss. */
|
|
1210
|
+
function labelOffset(depth) {
|
|
1211
|
+
const chevronAndIcon = 4 /* gap */ + 14 /* chevron */ + 4 /* gap */ + 17 /* icon */ + 4 /* gap */;
|
|
1212
|
+
return depth === 0 ? 8 + chevronAndIcon : 8 + depth * 18 + chevronAndIcon;
|
|
1213
|
+
}
|
|
1155
1214
|
function renderLoadingRow(ctx, depth) {
|
|
1156
1215
|
return (index.h("div", { class: "mrd-document-list__loading", key: "loading" }, indent(depth), index.h("span", { class: "mrd-document-list__spinner" }), t('loading', ctx.locale)));
|
|
1157
1216
|
}
|
|
@@ -1166,7 +1225,7 @@ function renderDocRow(ctx, doc, node, container, depth) {
|
|
|
1166
1225
|
return (index.h("div", { class: "mrd-document-list__row mrd-document-list__row--doc", key: (_e = (_d = (_c = doc === null || doc === void 0 ? void 0 : doc._links) === null || _c === void 0 ? void 0 : _c.self) === null || _d === void 0 ? void 0 : _d.href) !== null && _e !== void 0 ? _e : label, draggable: true, onClick: () => ctx.on.openDoc(doc), onDragStart: (e) => ctx.on.docDragStart(e, doc, node), onDragEnd: ctx.on.docDragEnd, onDragOver: (e) => ctx.on.nodeDragOver(e, node), onDragLeave: () => ctx.on.nodeDragLeave(node), onDrop: (e) => ctx.on.nodeDrop(e, node, container) }, indent(depth), chevron(false, true), docIcon(), index.h("span", { class: "mrd-document-list__label" }, label), date && index.h("span", { class: "mrd-document-list__date" }, date)));
|
|
1167
1226
|
}
|
|
1168
1227
|
function renderFolderEditRow(ctx, node, depth) {
|
|
1169
|
-
return (index.h("div", { class: "mrd-document-list__node", key: node.id }, index.h("div", { class: "mrd-document-list__row mrd-document-list__row--edit" }, indent(depth), chevron(false, true), folderIcon(), index.h("input", { class: "mrd-document-list__name-input", type: "text", placeholder: t('folder_name_placeholder', ctx.locale), ref: el => ctx.on.setPendingInputEl(el), onInput: ctx.on.pendingInput, onKeyDown: ctx.on.pendingKeyDown, onBlur: () => ctx.on.cancelFolder() })), node.error && (index.h("div", { class: "mrd-document-list__error", style: { paddingLeft: `${depth
|
|
1228
|
+
return (index.h("div", { class: "mrd-document-list__node", key: node.id }, index.h("div", { class: "mrd-document-list__row mrd-document-list__row--edit" }, indent(depth), chevron(false, true), folderIcon(), index.h("input", { class: "mrd-document-list__name-input", type: "text", placeholder: t('folder_name_placeholder', ctx.locale), ref: el => ctx.on.setPendingInputEl(el), onInput: ctx.on.pendingInput, onKeyDown: ctx.on.pendingKeyDown, onBlur: () => ctx.on.cancelFolder() })), node.error && (index.h("div", { class: "mrd-document-list__error", style: { paddingLeft: `${labelOffset(depth)}px` } }, node.error))));
|
|
1170
1229
|
}
|
|
1171
1230
|
function renderNodeChildren(ctx, container, node, depth) {
|
|
1172
1231
|
const out = [];
|
|
@@ -1210,7 +1269,7 @@ function renderContainerNode(ctx, node, depth) {
|
|
|
1210
1269
|
: renderNodeChildren(ctx, node, node, depth + 1)))));
|
|
1211
1270
|
}
|
|
1212
1271
|
|
|
1213
|
-
const mrdDocumentListCss = () => `@charset "UTF-8";.sc-mrd-document-list-h{display:block;height:100%}.mrd-document-list.sc-mrd-document-list{padding:var(--mrd-space-2) 0;min-height:100%;box-sizing:border-box}.mrd-document-list--drop-active.sc-mrd-document-list{outline:2px dashed var(--mrd-color-primary);outline-offset:-4px;background:var(--mrd-color-primary-50, rgba(22, 163, 74, 0.06))}.mrd-document-list__row.sc-mrd-document-list{display:flex;align-items:center;gap:var(--mrd-space-
|
|
1272
|
+
const mrdDocumentListCss = () => `@charset "UTF-8";.sc-mrd-document-list-h{display:block;height:100%}.mrd-document-list.sc-mrd-document-list{padding:var(--mrd-space-2) 0;min-height:100%;box-sizing:border-box}.mrd-document-list--drop-active.sc-mrd-document-list{outline:2px dashed var(--mrd-color-primary);outline-offset:-4px;background:var(--mrd-color-primary-50, rgba(22, 163, 74, 0.06))}.mrd-document-list__row.sc-mrd-document-list{display:flex;align-items:center;gap:var(--mrd-space-1);height:2.125rem;padding:0 var(--mrd-space-4) 0 var(--mrd-space-2);cursor:pointer;user-select:none;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-800)}.mrd-document-list__row.sc-mrd-document-list:hover{background:var(--mrd-color-neutral-50)}.mrd-document-list__row--selected.sc-mrd-document-list{background:var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1))}.mrd-document-list__row--selected.sc-mrd-document-list:hover{background:var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1))}.mrd-document-list__row--pending.sc-mrd-document-list .mrd-document-list__label.sc-mrd-document-list{font-style:italic;color:var(--mrd-color-neutral-500)}.mrd-document-list__row--doc.sc-mrd-document-list{cursor:grab}.mrd-document-list__row--doc.sc-mrd-document-list:active{cursor:grabbing}.mrd-document-list__row--drop.sc-mrd-document-list{background:var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1));box-shadow:inset 0 0 0 1px var(--mrd-color-primary)}.mrd-document-list__row--drop.sc-mrd-document-list:hover{background:var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1))}.mrd-document-list__row--edit.sc-mrd-document-list{cursor:default}.mrd-document-list__name-input.sc-mrd-document-list{flex:1;min-width:0;height:1.625rem;padding:0 var(--mrd-space-2);font-size:var(--mrd-font-size-sm);font-family:inherit;color:var(--mrd-color-neutral-800);border:1px solid var(--mrd-color-primary);border-radius:var(--mrd-border-radius);outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-document-list__error.sc-mrd-document-list{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-danger, #dc2626);padding-top:0.125rem;padding-bottom:0.25rem}.mrd-document-list__row--dossier.sc-mrd-document-list .mrd-document-list__label.sc-mrd-document-list{font-weight:var(--mrd-font-weight-semibold)}.mrd-document-list__indent.sc-mrd-document-list{flex:none}.mrd-document-list__chev.sc-mrd-document-list{width:0.875rem;height:1rem;flex:none;display:grid;place-items:center;color:var(--mrd-color-neutral-400);transition:transform var(--mrd-transition-fast)}.mrd-document-list__chev.sc-mrd-document-list svg.sc-mrd-document-list{width:0.6875rem;height:0.6875rem}.mrd-document-list__chev--open.sc-mrd-document-list{transform:rotate(90deg)}.mrd-document-list__chev--leaf.sc-mrd-document-list{visibility:hidden}.mrd-document-list__icon.sc-mrd-document-list{width:1.0625rem;height:1.0625rem;flex:none}.mrd-document-list__icon--dossier.sc-mrd-document-list{color:var(--mrd-color-primary)}.mrd-document-list__icon--folder.sc-mrd-document-list{color:var(--mrd-color-folder)}.mrd-document-list__icon--doc.sc-mrd-document-list{color:var(--mrd-color-neutral-400)}.mrd-document-list__label.sc-mrd-document-list{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mrd-document-list__count.sc-mrd-document-list{flex:none;font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);background:var(--mrd-color-neutral-100);border-radius:var(--mrd-border-radius-full);padding:0.0625rem 0.5rem}.mrd-document-list__date.sc-mrd-document-list{flex:none;font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-400);font-variant-numeric:tabular-nums}.mrd-document-list__loading.sc-mrd-document-list{display:flex;align-items:center;gap:var(--mrd-space-1);height:1.875rem;padding:0 var(--mrd-space-4) 0 var(--mrd-space-2);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-400)}.mrd-document-list__spinner.sc-mrd-document-list{width:0.75rem;height:0.75rem;border:2px solid var(--mrd-color-neutral-300);border-top-color:var(--mrd-color-primary);border-radius:50%;animation:mrd-document-list-spin 0.7s linear infinite}@keyframes mrd-document-list-spin{to{transform:rotate(360deg)}}.mrd-document-list__empty.sc-mrd-document-list{padding:var(--mrd-space-8) var(--mrd-space-4);text-align:center;color:var(--mrd-color-neutral-400);font-size:var(--mrd-font-size-sm)}`;
|
|
1214
1273
|
|
|
1215
1274
|
const MrdDocumentList = class {
|
|
1216
1275
|
constructor(hostRef) {
|
|
@@ -1863,16 +1922,43 @@ const MrdDocumentList = class {
|
|
|
1863
1922
|
MrdDocumentList.ROOT = '__root__';
|
|
1864
1923
|
MrdDocumentList.style = mrdDocumentListCss();
|
|
1865
1924
|
|
|
1866
|
-
const mrdDocumentViewCss = () => `.sc-mrd-document-view-h{display:block}.mrd-document-view.sc-mrd-document-view{max-width:
|
|
1925
|
+
const mrdDocumentViewCss = () => `.sc-mrd-document-view-h{display:block;container-type:inline-size;container-name:mrd-document-view}.mrd-document-view.sc-mrd-document-view{max-width:1200px}.mrd-document-view__body.sc-mrd-document-view{display:grid;grid-template-columns:1fr;gap:var(--mrd-space-6)}@container mrd-document-view (min-width: 640px){.mrd-document-view__body{grid-template-columns:minmax(220px, 320px) 1fr !important;align-items:stretch !important}.mrd-document-view__crumb{margin-bottom:var(--mrd-space-2) !important}}.mrd-document-view__crumb.sc-mrd-document-view{display:inline-flex;align-items:center;gap:var(--mrd-space-2);margin-bottom:var(--mrd-space-4);padding:var(--mrd-space-1) var(--mrd-space-3);background:var(--mrd-color-primary-light);border:1px solid transparent;border-radius:var(--mrd-border-radius);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-primary-dark);cursor:pointer}.mrd-document-view__crumb.sc-mrd-document-view:hover{border-color:var(--mrd-color-primary)}.mrd-document-view__crumb-icon.sc-mrd-document-view{width:0.875rem;height:0.875rem;flex-shrink:0}.mrd-document-view__title.sc-mrd-document-view{font-size:var(--mrd-font-size-2xl);font-weight:var(--mrd-font-weight-bold);color:var(--mrd-color-neutral-900);letter-spacing:-0.02em;margin:0 0 var(--mrd-space-1) 0}.mrd-document-view__date.sc-mrd-document-view{font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-400);font-variant-numeric:tabular-nums;margin:0 0 var(--mrd-space-6) 0}.mrd-document-view__file-meta.sc-mrd-document-view{display:flex;align-items:center;gap:var(--mrd-space-4);margin-bottom:var(--mrd-space-2)}.mrd-document-view__file-name.sc-mrd-document-view{flex:1;min-width:0;font-weight:var(--mrd-font-weight-semibold);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-800);word-break:break-word}.mrd-document-view__preview.sc-mrd-document-view{width:100%;overflow:hidden;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-md);background:var(--mrd-color-neutral-50)}.mrd-document-view__preview-loading.sc-mrd-document-view{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm)}.mrd-document-view__download.sc-mrd-document-view{display:inline-flex;align-items:center;gap:var(--mrd-space-2);flex-shrink:0;height:2rem;padding:0 var(--mrd-space-3);background:var(--mrd-color-white);border:1px solid var(--mrd-color-neutral-300);border-radius:var(--mrd-border-radius);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-700);cursor:pointer}.mrd-document-view__download.sc-mrd-document-view:hover{background:var(--mrd-color-neutral-100);color:var(--mrd-color-neutral-900)}.mrd-document-view__download.sc-mrd-document-view svg.sc-mrd-document-view{width:0.9375rem;height:0.9375rem}.mrd-document-view__summary-body.sc-mrd-document-view{font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-700);line-height:var(--mrd-line-height-relaxed)}`;
|
|
1867
1926
|
|
|
1868
1927
|
const MrdDocumentView = class {
|
|
1869
1928
|
constructor(hostRef) {
|
|
1870
1929
|
index.registerInstance(this, hostRef);
|
|
1871
1930
|
this.mrdNavigate = index.createEvent(this, "mrdNavigate");
|
|
1872
1931
|
this.mrdDownload = index.createEvent(this, "mrdDownload");
|
|
1932
|
+
this.mrdLoadPreview = index.createEvent(this, "mrdLoadPreview");
|
|
1873
1933
|
/** The data record from the /data endpoint. Fields keyed by name; relations under `_links`. */
|
|
1874
1934
|
this.data = {};
|
|
1875
1935
|
this.locale = navigator.language;
|
|
1936
|
+
/** Signed URL for the file's inline preview (mrd-file-preview), resolved by
|
|
1937
|
+
* the host in response to mrdLoadPreview. Empty while unresolved — the
|
|
1938
|
+
* preview area shows a loading state until the host injects a value. */
|
|
1939
|
+
this.previewUrl = '';
|
|
1940
|
+
/** Minimum height (px) of the inline preview area — it stretches to fill the
|
|
1941
|
+
* available row height in the wide side-by-side layout (see mrd-document-view.scss),
|
|
1942
|
+
* and falls back to this height when stacked. Overlay hosts typically pass a
|
|
1943
|
+
* smaller value than the full-page default to fit available chrome. */
|
|
1944
|
+
this.previewHeight = 640;
|
|
1945
|
+
/** Tracks the href a preview was last requested for, so componentDidLoad and
|
|
1946
|
+
* the data watcher don't emit duplicate requests for the same file. */
|
|
1947
|
+
this.lastPreviewHref = null;
|
|
1948
|
+
}
|
|
1949
|
+
componentDidLoad() {
|
|
1950
|
+
this.requestPreviewIfNeeded();
|
|
1951
|
+
}
|
|
1952
|
+
dataChanged() {
|
|
1953
|
+
this.requestPreviewIfNeeded();
|
|
1954
|
+
}
|
|
1955
|
+
requestPreviewIfNeeded() {
|
|
1956
|
+
var _a, _b;
|
|
1957
|
+
const href = (_b = (_a = this.slotValue('file')) === null || _a === void 0 ? void 0 : _a.href) !== null && _b !== void 0 ? _b : null;
|
|
1958
|
+
if (href && href !== this.lastPreviewHref) {
|
|
1959
|
+
this.lastPreviewHref = href;
|
|
1960
|
+
this.mrdLoadPreview.emit({ href });
|
|
1961
|
+
}
|
|
1876
1962
|
}
|
|
1877
1963
|
/** Value of a value-slot: reads data[field] via the slot→field map. */
|
|
1878
1964
|
slotValue(slot) {
|
|
@@ -1897,24 +1983,43 @@ const MrdDocumentView = class {
|
|
|
1897
1983
|
return null;
|
|
1898
1984
|
return (index.h("button", { class: "mrd-document-view__crumb", onClick: () => this.mrdNavigate.emit({ href: link.href, label: link.name }) }, index.h("svg", { class: "mrd-document-view__crumb-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, index.h("path", { d: "M19 12H5M12 19l-7-7 7-7" })), link.name));
|
|
1899
1985
|
}
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1986
|
+
/** Filename + download button — part of the metadata column, not the preview
|
|
1987
|
+
* panel, so it stays next to the title/summary in the wide side-by-side layout. */
|
|
1988
|
+
renderFileMeta(fileName, href) {
|
|
1989
|
+
return (index.h("div", { class: "mrd-document-view__file-meta" }, index.h("span", { class: "mrd-document-view__file-name" }, fileName), href && (index.h("button", { type: "button", class: "mrd-document-view__download", onClick: () => this.mrdDownload.emit({ href, fileName }) }, index.h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, index.h("path", { d: "M12 3v12m0 0l-4-4m4 4l4-4M4 21h16" })), t('download', this.locale)))));
|
|
1990
|
+
}
|
|
1991
|
+
/** The preview panel itself (iframe/image/loading state) — its own grid
|
|
1992
|
+
* column in the wide layout, so it can take the full available height. */
|
|
1993
|
+
renderPreviewPanel(fileName, href, mimeType) {
|
|
1994
|
+
if (!href)
|
|
1904
1995
|
return null;
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1996
|
+
return (index.h("div", { class: "mrd-document-view__preview", style: { minHeight: `${this.previewHeight}px` } }, this.previewUrl ? (index.h("mrd-file-preview", { src: this.previewUrl, mimeType: mimeType, fileName: fileName, href: href, locale: this.locale, onMrdDownload: (e) => {
|
|
1997
|
+
e.stopPropagation();
|
|
1998
|
+
this.mrdDownload.emit(e.detail);
|
|
1999
|
+
}, onMrdPreviewReload: (e) => {
|
|
2000
|
+
e.stopPropagation();
|
|
2001
|
+
this.mrdLoadPreview.emit({ href });
|
|
2002
|
+
} })) : (index.h("div", { class: "mrd-document-view__preview-loading" }, t('loading', this.locale)))));
|
|
1908
2003
|
}
|
|
1909
2004
|
render() {
|
|
2005
|
+
var _a, _b, _c, _d;
|
|
1910
2006
|
const titleRaw = this.slotValue('title');
|
|
1911
2007
|
const title = titleRaw != null && titleRaw !== '' ? String(titleRaw) : null;
|
|
1912
2008
|
const dateRaw = this.slotValue('date');
|
|
1913
2009
|
const date = dateRaw != null && dateRaw !== '' ? formatDate(dateRaw, this.locale) : null;
|
|
1914
2010
|
const summaryRaw = this.slotValue('summary');
|
|
1915
2011
|
const summary = summaryRaw != null && summaryRaw !== '' ? String(summaryRaw) : null;
|
|
1916
|
-
|
|
2012
|
+
const fileRaw = this.slotValue('file');
|
|
2013
|
+
const fileHref = (_a = fileRaw === null || fileRaw === void 0 ? void 0 : fileRaw.href) !== null && _a !== void 0 ? _a : '';
|
|
2014
|
+
const fileName = (_b = fileRaw === null || fileRaw === void 0 ? void 0 : fileRaw.fileName) !== null && _b !== void 0 ? _b : (fileRaw ? String(fileRaw) : '');
|
|
2015
|
+
const mimeType = (_d = (_c = fileRaw === null || fileRaw === void 0 ? void 0 : fileRaw.mimeType) !== null && _c !== void 0 ? _c : fileRaw === null || fileRaw === void 0 ? void 0 : fileRaw.contentType) !== null && _d !== void 0 ? _d : '';
|
|
2016
|
+
return (index.h(index.Host, { key: '6023c8c6ca3d780fd4a9cca41189cb05a151221e' }, index.h("div", { key: 'd7d39d62964583da0ca6c1494e75321e6bab9ac8', class: "mrd-document-view" }, index.h("div", { key: '9aa14569c9ffc785ffb4f2b3d5930cf3e822e246', class: "mrd-document-view__body" }, index.h("div", { key: 'e00f3b55551429d8522fb97e7ccb43d56e98042d', class: "mrd-document-view__meta" }, this.renderContainer(), title && index.h("h1", { key: '9860273878b245fc757eb690c6cd7006b13045c4', class: "mrd-document-view__title" }, title), date && index.h("p", { key: '84c60b0b6feb6678d661000c26050e42eaaa8399', class: "mrd-document-view__date" }, date), fileRaw && this.renderFileMeta(fileName, fileHref), summary && (index.h("div", { key: 'd1cff0cc1b9376409c8e04a785deba93c986ba47', class: "mrd-document-view__summary" }, index.h("div", { key: 'fc9c4b986afc8c4f50486caf85bf58860d641a2b', class: "mrd-document-view__summary-body", innerHTML: summary })))), fileRaw && this.renderPreviewPanel(fileName, fileHref, mimeType)))));
|
|
1917
2017
|
}
|
|
2018
|
+
static get watchers() { return {
|
|
2019
|
+
"data": [{
|
|
2020
|
+
"dataChanged": 0
|
|
2021
|
+
}]
|
|
2022
|
+
}; }
|
|
1918
2023
|
};
|
|
1919
2024
|
MrdDocumentView.style = mrdDocumentViewCss();
|
|
1920
2025
|
|
|
@@ -1945,7 +2050,7 @@ const MrdEmailField = class {
|
|
|
1945
2050
|
};
|
|
1946
2051
|
}
|
|
1947
2052
|
render() {
|
|
1948
|
-
return (index.h(index.Host, { key: '
|
|
2053
|
+
return (index.h(index.Host, { key: 'e113fb3958c06ee4d4e870b6005e07b1793835a1' }, index.h("div", { key: '9393b859167f1474d944575f464e1523f1dcf469', class: "mrd-email-field" }, index.h(FieldLabel, { key: '57c134921adb7f941c19d2fa36cce213bc12ae1e', base: "mrd-email-field", label: this.label, required: this.required }), index.h("input", { key: '67496689526d2fa96a087b00a9436e9de4d69415', 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 }), index.h(FieldError, { key: '5a151c2995db77771fe8f98a24c627b0060f655a', base: "mrd-email-field", error: this.error }))));
|
|
1949
2054
|
}
|
|
1950
2055
|
};
|
|
1951
2056
|
MrdEmailField.style = mrdEmailFieldCss();
|
|
@@ -2253,7 +2358,7 @@ const MrdFileField = class {
|
|
|
2253
2358
|
error: hasError,
|
|
2254
2359
|
disabled: this.disabled || this.uploading,
|
|
2255
2360
|
});
|
|
2256
|
-
return (index.h(index.Host, { key: '
|
|
2361
|
+
return (index.h(index.Host, { key: '6410e945bb873a05d0a1b3be45bc879b5e153a05' }, index.h("div", { key: '4d1d69d768b383f0d9190f88a50a87de8679d3d2', class: "mrd-file-field" }, index.h(FieldLabel, { key: '7e0009908fb4c087de16cf08251ab398199dae60', base: "mrd-file-field", label: this.label, required: this.required }), index.h("div", { key: '88dfc0d1c34670f7de8f3cf2dea4c95b0ae66f4c', class: zoneClass, onClick: this.handleZoneClick, onDragOver: this.drag.onDragOver, onDragLeave: this.drag.onDragLeave, onDrop: this.drag.onDrop }, index.h("input", { key: 'b6d678b5582a58721c928cef47dd8d6645b26a86', ref: el => (this.fileInputRef = el), class: "mrd-file-field__input", type: "file", name: this.name, accept: this.accept, disabled: this.disabled || this.uploading, required: this.required && !hasFile, onChange: this.handleInputChange }), hasFile ? (index.h("div", { class: "mrd-file-field__selected" }, this.uploading ? (index.h("span", { class: "mrd-file-field__spinner", "aria-label": t('loading', this.locale) })) : (index.h("svg", { class: "mrd-file-field__icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), index.h("polyline", { points: "14 2 14 8 20 8" }))), index.h("span", { class: "mrd-file-field__filename" }, this.fileName), !this.uploading && (index.h("button", { class: "mrd-file-field__clear", type: "button", onClick: this.handleClear, "aria-label": t('clear', this.locale) }, "\u2715")))) : (index.h("div", { class: "mrd-file-field__prompt" }, index.h("svg", { class: "mrd-file-field__upload-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("polyline", { points: "16 16 12 12 8 16" }), index.h("line", { x1: "12", y1: "12", x2: "12", y2: "21" }), index.h("path", { d: "M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3" })), index.h("span", null, t('drop_file_here', this.locale), ' ', index.h("span", { class: "mrd-file-field__browse" }, t('browse', this.locale)))))), index.h(FieldError, { key: '80f1698819c60b15476b953f5f3216f195430b84', base: "mrd-file-field", error: this.error }))));
|
|
2257
2362
|
}
|
|
2258
2363
|
static get watchers() { return {
|
|
2259
2364
|
"value": [{
|
|
@@ -2263,6 +2368,90 @@ const MrdFileField = class {
|
|
|
2263
2368
|
};
|
|
2264
2369
|
MrdFileField.style = mrdFileFieldCss();
|
|
2265
2370
|
|
|
2371
|
+
/** Pure classification logic for mrd-file-preview — no Stencil dependency. */
|
|
2372
|
+
const IMAGE_EXTENSIONS = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg', 'bmp']);
|
|
2373
|
+
function extensionOf(fileName) {
|
|
2374
|
+
if (!fileName)
|
|
2375
|
+
return null;
|
|
2376
|
+
const match = /\.([a-z0-9]+)$/i.exec(fileName);
|
|
2377
|
+
return match ? match[1].toLowerCase() : null;
|
|
2378
|
+
}
|
|
2379
|
+
/**
|
|
2380
|
+
* Decide how to render a file given its declared mime type and/or file name.
|
|
2381
|
+
* A declared mime type is authoritative when present (a mismatched file name
|
|
2382
|
+
* extension is ignored); the file name extension is only consulted as a
|
|
2383
|
+
* fallback when no mime type is known.
|
|
2384
|
+
*/
|
|
2385
|
+
function detectPreviewKind(mimeType, fileName) {
|
|
2386
|
+
const mime = (mimeType !== null && mimeType !== void 0 ? mimeType : '').toLowerCase().trim();
|
|
2387
|
+
if (mime) {
|
|
2388
|
+
if (mime === 'application/pdf')
|
|
2389
|
+
return 'pdf';
|
|
2390
|
+
if (mime.startsWith('image/'))
|
|
2391
|
+
return 'image';
|
|
2392
|
+
return 'unsupported';
|
|
2393
|
+
}
|
|
2394
|
+
const ext = extensionOf(fileName);
|
|
2395
|
+
if (ext === 'pdf')
|
|
2396
|
+
return 'pdf';
|
|
2397
|
+
if (ext && IMAGE_EXTENSIONS.has(ext))
|
|
2398
|
+
return 'image';
|
|
2399
|
+
return 'unsupported';
|
|
2400
|
+
}
|
|
2401
|
+
|
|
2402
|
+
const mrdFilePreviewCss = () => `.sc-mrd-file-preview-h{display:block;width:100%;height:100%}.mrd-file-preview__frame.sc-mrd-file-preview{display:block;width:100%;height:100%;border:none}.mrd-file-preview__image.sc-mrd-file-preview{display:block;max-width:100%;max-height:100%;margin:0 auto;object-fit:contain}.mrd-file-preview__error.sc-mrd-file-preview,.mrd-file-preview__unsupported.sc-mrd-file-preview{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--mrd-space-3);width:100%;height:100%;min-height:8rem;padding:var(--mrd-space-6);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center}.mrd-file-preview__error-text.sc-mrd-file-preview{color:var(--mrd-color-danger)}.mrd-file-preview__retry.sc-mrd-file-preview,.mrd-file-preview__download.sc-mrd-file-preview{display:inline-flex;align-items:center;gap:var(--mrd-space-2);height:2rem;padding:0 var(--mrd-space-3);border:var(--mrd-border-width) solid var(--mrd-color-neutral-300);border-radius:var(--mrd-border-radius);background:var(--mrd-color-white);color:var(--mrd-color-neutral-700);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);cursor:pointer}.mrd-file-preview__retry.sc-mrd-file-preview:hover,.mrd-file-preview__download.sc-mrd-file-preview:hover{background:var(--mrd-color-neutral-100);color:var(--mrd-color-neutral-900)}.mrd-file-preview__download.sc-mrd-file-preview svg.sc-mrd-file-preview{width:0.9375rem;height:0.9375rem}`;
|
|
2403
|
+
|
|
2404
|
+
const MrdFilePreview = class {
|
|
2405
|
+
constructor(hostRef) {
|
|
2406
|
+
index.registerInstance(this, hostRef);
|
|
2407
|
+
this.mrdPreviewReload = index.createEvent(this, "mrdPreviewReload");
|
|
2408
|
+
this.mrdDownload = index.createEvent(this, "mrdDownload");
|
|
2409
|
+
/** Signed URL to render. */
|
|
2410
|
+
this.src = '';
|
|
2411
|
+
/** Declared mime type (e.g. 'application/pdf', 'image/png'), when known.
|
|
2412
|
+
* Authoritative over `fileName` when present. */
|
|
2413
|
+
this.mimeType = '';
|
|
2414
|
+
/** Original file name — used for extension-based detection when `mimeType`
|
|
2415
|
+
* is absent, and as alt/title text. */
|
|
2416
|
+
this.fileName = '';
|
|
2417
|
+
/** The file's own reference href (not the signed preview URL in `src`).
|
|
2418
|
+
* When set, an unsupported type falls back to the same download button
|
|
2419
|
+
* used elsewhere in the library, so hosts need no new wiring. */
|
|
2420
|
+
this.href = '';
|
|
2421
|
+
this.locale = navigator.language;
|
|
2422
|
+
this.imageFailed = false;
|
|
2423
|
+
this.onImageError = () => {
|
|
2424
|
+
this.imageFailed = true;
|
|
2425
|
+
};
|
|
2426
|
+
this.retry = () => {
|
|
2427
|
+
this.imageFailed = false;
|
|
2428
|
+
this.mrdPreviewReload.emit();
|
|
2429
|
+
};
|
|
2430
|
+
}
|
|
2431
|
+
srcChanged() {
|
|
2432
|
+
this.imageFailed = false;
|
|
2433
|
+
}
|
|
2434
|
+
render() {
|
|
2435
|
+
const kind = detectPreviewKind(this.mimeType, this.fileName);
|
|
2436
|
+
if (kind === 'pdf') {
|
|
2437
|
+
return (index.h(index.Host, null, index.h("iframe", { class: "mrd-file-preview__frame", src: this.src, title: this.fileName || 'preview' })));
|
|
2438
|
+
}
|
|
2439
|
+
if (kind === 'image') {
|
|
2440
|
+
if (this.imageFailed) {
|
|
2441
|
+
return (index.h(index.Host, null, index.h("div", { class: "mrd-file-preview__error" }, index.h("span", { class: "mrd-file-preview__error-text" }, t('preview_error', this.locale)), index.h("button", { type: "button", class: "mrd-file-preview__retry", onClick: this.retry }, t('retry', this.locale)))));
|
|
2442
|
+
}
|
|
2443
|
+
return (index.h(index.Host, null, index.h("img", { class: "mrd-file-preview__image", src: this.src, alt: this.fileName || '', onError: this.onImageError })));
|
|
2444
|
+
}
|
|
2445
|
+
return (index.h(index.Host, null, index.h("div", { class: "mrd-file-preview__unsupported" }, index.h("span", null, t('preview_unsupported', this.locale)), this.href && (index.h("button", { type: "button", class: "mrd-file-preview__download", onClick: () => this.mrdDownload.emit({ href: this.href, fileName: this.fileName }) }, index.h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round", "aria-hidden": "true" }, index.h("path", { d: "M12 3v12m0 0l-4-4m4 4l4-4M4 21h16" })), t('download', this.locale))))));
|
|
2446
|
+
}
|
|
2447
|
+
static get watchers() { return {
|
|
2448
|
+
"src": [{
|
|
2449
|
+
"srcChanged": 0
|
|
2450
|
+
}]
|
|
2451
|
+
}; }
|
|
2452
|
+
};
|
|
2453
|
+
MrdFilePreview.style = mrdFilePreviewCss();
|
|
2454
|
+
|
|
2266
2455
|
const mrdFormCss = () => `.sc-mrd-form-h{display:block}.mrd-form.sc-mrd-form{font-family:var(--mrd-font-family);width:100%}.mrd-form__title.sc-mrd-form{font-size:var(--mrd-font-size-2xl);font-weight:var(--mrd-font-weight-bold);color:var(--mrd-color-neutral-900);margin:0 0 var(--mrd-space-6) 0}.mrd-form__body.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-5)}.mrd-form__field.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-1)}.mrd-form__field-error.sc-mrd-form{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}.mrd-form__section.sc-mrd-form{border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-md);padding:var(--mrd-space-4) var(--mrd-space-5);margin:0}.mrd-form__section-legend.sc-mrd-form{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-700);padding:0 var(--mrd-space-2)}.mrd-form__section-body.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-4);margin-top:var(--mrd-space-2)}.mrd-form__group.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-2)}.mrd-form__group-label.sc-mrd-form{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-500);text-transform:uppercase;letter-spacing:0.05em}.mrd-form__group-body.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-4);padding-left:var(--mrd-space-4);border-left:3px solid var(--mrd-color-neutral-200)}.mrd-form__footer.sc-mrd-form{margin-top:var(--mrd-space-8);padding-top:var(--mrd-space-5);border-top:var(--mrd-border-width) solid var(--mrd-border-color);display:flex;justify-content:flex-end;gap:var(--mrd-space-3)}.mrd-form__submit.sc-mrd-form{display:inline-flex;align-items:center;justify-content:center;height:var(--mrd-input-height);padding:0 var(--mrd-space-6);background-color:var(--mrd-color-primary);color:var(--mrd-color-white);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);border:none;border-radius:var(--mrd-border-radius);cursor:pointer;transition:background-color var(--mrd-transition)}.mrd-form__submit.sc-mrd-form:hover{background-color:var(--mrd-color-primary-hover)}.mrd-form__submit.sc-mrd-form:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-form__submit.sc-mrd-form:active{background-color:var(--mrd-color-primary-dark)}.mrd-form__cancel.sc-mrd-form{display:inline-flex;align-items:center;justify-content:center;height:var(--mrd-input-height);padding:0 var(--mrd-space-6);background-color:transparent;color:var(--mrd-color-neutral-600);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);cursor:pointer;transition:background-color var(--mrd-transition), color var(--mrd-transition)}.mrd-form__cancel.sc-mrd-form:hover{background-color:var(--mrd-color-neutral-100);color:var(--mrd-color-neutral-800)}.mrd-form__cancel.sc-mrd-form:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-form__cancel.sc-mrd-form:active{background-color:var(--mrd-color-neutral-200)}`;
|
|
2267
2456
|
|
|
2268
2457
|
const MrdForm = class {
|
|
@@ -2790,7 +2979,7 @@ const MrdImageField = class {
|
|
|
2790
2979
|
error: hasError,
|
|
2791
2980
|
disabled: this.disabled || this.uploading,
|
|
2792
2981
|
});
|
|
2793
|
-
return (index.h(index.Host, { key: '
|
|
2982
|
+
return (index.h(index.Host, { key: '700310af716dcc167f98bc7ae7024bb44e1285b6' }, index.h("div", { key: '95d29a82751249e560404488fb279138eee0c1be', class: "mrd-image-field" }, index.h(FieldLabel, { key: 'f53f040257a4b65d8435c836846adab137b91a5e', base: "mrd-image-field", label: this.label, required: this.required }), index.h("div", { key: 'a9cc7a0861b1457d8e4abb11b380b6eeb519a863', class: zoneClass, onClick: this.handleZoneClick, onDragOver: this.drag.onDragOver, onDragLeave: this.drag.onDragLeave, onDrop: this.drag.onDrop }, index.h("input", { key: '7112030bc2b80b4c3b31a4421656da4c926a2fe1', ref: el => (this.fileInputRef = el), class: "mrd-image-field__input", type: "file", name: this.name, accept: this.accept, disabled: this.disabled || this.uploading, required: this.required && !this.previewUrl, onChange: this.handleInputChange }), this.previewUrl ? (index.h("div", { class: "mrd-image-field__preview-container" }, index.h("div", { class: "mrd-image-field__preview-thumb" }, index.h("img", { class: "mrd-image-field__preview", src: this.previewUrl, alt: this.fileName }), this.uploading && index.h("div", { class: "mrd-image-field__preview-overlay" }, index.h("span", { class: "mrd-image-field__spinner" }))), index.h("div", { class: "mrd-image-field__preview-info" }, index.h("span", { class: "mrd-image-field__preview-name" }, this.fileName), this.uploading && (index.h("span", { class: "mrd-image-field__upload-status" }, t('loading', this.locale)))), !this.uploading && (index.h("button", { class: "mrd-image-field__clear", type: "button", onClick: this.handleClear, "aria-label": t('clear', this.locale) }, t('remove', this.locale))))) : (index.h("div", { class: "mrd-image-field__prompt" }, index.h("svg", { class: "mrd-image-field__upload-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, index.h("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", ry: "2" }), index.h("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), index.h("polyline", { points: "21 15 16 10 5 21" })), index.h("span", null, t('drop_file_here', this.locale), ' ', index.h("span", { class: "mrd-image-field__browse" }, t('browse', this.locale)))))), index.h(FieldError, { key: '0cf5346ecb1a5d110822b087081b4b5f05255381', base: "mrd-image-field", error: this.error }))));
|
|
2794
2983
|
}
|
|
2795
2984
|
static get watchers() { return {
|
|
2796
2985
|
"value": [{
|
|
@@ -3040,7 +3229,7 @@ function renderField(ctx, item) {
|
|
|
3040
3229
|
return (index.h("div", { class: `mrd-layout-section__field${isBlock ? ' mrd-layout-section__field--block' : ''}`, key: item.name }, index.h("span", { class: "mrd-layout-section__field-label" }, item.label), index.h("span", { class: "mrd-layout-section__field-value" }, renderedValue, renderHistoryBadge(ctx, item, raw))));
|
|
3041
3230
|
}
|
|
3042
3231
|
|
|
3043
|
-
const mrdLayoutSectionCss = () => `.mrd-layout-section.sc-mrd-layout-section{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-800)}.mrd-layout-section__field.sc-mrd-layout-section{display:grid;grid-template-columns:200px 1fr;align-items:baseline;gap:0 var(--mrd-space-2);padding:var(--mrd-space-1) 0}.mrd-layout-section__field-label.sc-mrd-layout-section{font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-normal);color:var(--mrd-color-neutral-500);padding-top:1px}.mrd-layout-section__field-value.sc-mrd-layout-section{font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-800);word-break:break-word;display:inline-flex;align-items:center;gap:var(--mrd-space-1)}.mrd-layout-section__history-wrap.sc-mrd-layout-section{position:relative;display:inline-flex;align-items:center}.mrd-layout-section__history-btn.sc-mrd-layout-section{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;background:transparent;border:none;border-radius:var(--mrd-border-radius-sm);color:var(--mrd-color-neutral-400);cursor:pointer;flex-shrink:0;transition:color var(--mrd-transition-fast), background-color var(--mrd-transition-fast)}.mrd-layout-section__history-btn.sc-mrd-layout-section:hover{color:var(--mrd-color-neutral-700);background-color:var(--mrd-color-neutral-100)}.mrd-layout-section__history-btn.sc-mrd-layout-section:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-layout-section__history-icon.sc-mrd-layout-section{width:0.875rem;height:0.875rem}.mrd-layout-section__history-popover.sc-mrd-layout-section{position:absolute;top:calc(100% + 0.25rem);left:0;min-width:24rem;max-width:24rem;background-color:var(--mrd-color-white);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-md);box-shadow:var(--mrd-shadow-md);padding:var(--mrd-space-1) 0;z-index:var(--mrd-z-dropdown)}.mrd-layout-section__history-entry.sc-mrd-layout-section{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-normal);color:var(--mrd-color-neutral-700);padding:var(--mrd-space-2) var(--mrd-space-3);line-height:var(--mrd-line-height-normal)}.mrd-layout-section__history-entry.sc-mrd-layout-section:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-layout-section__field-header.sc-mrd-layout-section{font-size:var(--mrd-font-size-2xl);font-weight:var(--mrd-font-weight-bold);color:var(--mrd-color-neutral-900);margin:0 0 var(--mrd-space-4) 0;padding:0}.mrd-layout-section__header.sc-mrd-layout-section{font-size:var(--mrd-font-size-xl);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-800);margin:var(--mrd-space-4) 0 var(--mrd-space-2) 0;padding:0}.mrd-layout-section__text.sc-mrd-layout-section{font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-700);line-height:var(--mrd-line-height-relaxed);margin:var(--mrd-space-2) 0}.mrd-layout-section__navigate.sc-mrd-layout-section{display:inline-flex;align-items:center;gap:var(--mrd-space-2);padding:var(--mrd-space-2) var(--mrd-space-3);background:none;border:1px solid var(--mrd-color-neutral-300);border-radius:var(--mrd-border-radius);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-primary);cursor:pointer;margin:var(--mrd-space-2) 0}.mrd-layout-section__navigate.sc-mrd-layout-section:hover{background-color:var(--mrd-color-primary-light);border-color:var(--mrd-color-primary)}.mrd-layout-section__link.sc-mrd-layout-section{color:var(--mrd-color-primary);text-decoration:none}.mrd-layout-section__link.sc-mrd-layout-section:hover{text-decoration:underline}.mrd-layout-section__relation-link.sc-mrd-layout-section{background:none;border:none;padding:0;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-primary);cursor:pointer;text-align:left}.mrd-layout-section__relation-link.sc-mrd-layout-section:hover{text-decoration:underline}.mrd-layout-section__download-link.sc-mrd-layout-section{display:inline-flex;align-items:center;gap:var(--mrd-space-1);background:none;border:none;padding:0;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-primary);cursor:pointer;text-align:left}.mrd-layout-section__download-link.sc-mrd-layout-section:hover{text-decoration:underline;color:var(--mrd-color-primary-dark)}.mrd-layout-section__file-icon.sc-mrd-layout-section{flex-shrink:0;width:1rem;height:1rem}.mrd-layout-section__boolean--true.sc-mrd-layout-section{color:var(--mrd-color-success);font-weight:var(--mrd-font-weight-semibold)}.mrd-layout-section__boolean--false.sc-mrd-layout-section{color:var(--mrd-color-neutral-400)}.mrd-layout-section__field--block.sc-mrd-layout-section{grid-template-columns:1fr}.mrd-layout-section__badge.sc-mrd-layout-section{display:inline-block;font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-medium);padding:2px var(--mrd-space-3);border-radius:10px}.mrd-layout-section__badge-dot-row.sc-mrd-layout-section{display:inline-flex;align-items:center;gap:var(--mrd-space-2)}.mrd-layout-section__badge-dot.sc-mrd-layout-section{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0}.mrd-layout-section__secret-masked.sc-mrd-layout-section{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-label-color);letter-spacing:0.15em;user-select:none;pointer-events:none}.mrd-layout-section__pre.sc-mrd-layout-section{font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);background-color:var(--mrd-color-neutral-50);border:1px solid var(--mrd-color-neutral-200);border-radius:var(--mrd-border-radius);padding:var(--mrd-space-3);margin:0;max-height:calc(15 * var(--mrd-font-size-xs));overflow-x:auto;overflow-y:auto;white-space:pre-wrap;word-break:break-word}.mrd-layout-section__group.sc-mrd-layout-section{margin:var(--mrd-space-4) 0}.mrd-layout-section__group-title.sc-mrd-layout-section{font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-500);margin:0 0 var(--mrd-space-2) 0;padding-bottom:0;letter-spacing:0.01em}.mrd-layout-section__related-view.sc-mrd-layout-section{margin:var(--mrd-space-4) 0}.mrd-layout-section__related-view-title.sc-mrd-layout-section{font-size:var(--mrd-font-size-lg);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-800);margin:0 0 var(--mrd-space-3) 0}.mrd-layout-section__search.sc-mrd-layout-section{position:relative;margin:var(--mrd-space-2) 0}.mrd-layout-section__search-wrap.sc-mrd-layout-section{position:relative}.mrd-layout-section__search-icon.sc-mrd-layout-section{position:absolute;left:var(--mrd-input-padding-x);top:50%;transform:translateY(-50%);width:1rem;height:1rem;color:var(--mrd-color-neutral-400);pointer-events:none}.mrd-layout-section__search-input.sc-mrd-layout-section{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x) var(--mrd-input-padding-y) calc(var(--mrd-input-padding-x) + 1rem + var(--mrd-space-2));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);outline:none;appearance:none;box-sizing:border-box}.mrd-layout-section__search-input.sc-mrd-layout-section:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-layout-section__search-input.sc-mrd-layout-section::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-layout-section__search-results.sc-mrd-layout-section{position:absolute;top:100%;left:0;right:0;background-color:var(--mrd-color-white);border:1px solid var(--mrd-color-neutral-300);border-top:none;border-radius:0 0 var(--mrd-border-radius) var(--mrd-border-radius);box-shadow:var(--mrd-shadow-sm);z-index:100;max-height:300px;overflow-y:auto;list-style:none;margin:0;padding:var(--mrd-space-1) 0}.mrd-layout-section__search-result.sc-mrd-layout-section{margin:0;padding:0}.mrd-layout-section__search-result-btn.sc-mrd-layout-section{display:flex;flex-direction:column;width:100%;padding:var(--mrd-space-2) var(--mrd-space-3);background:none;border:none;text-align:left;cursor:pointer;font-family:var(--mrd-font-family)}.mrd-layout-section__search-result-btn.sc-mrd-layout-section:hover{background-color:var(--mrd-color-primary-light)}.mrd-layout-section__search-result-label.sc-mrd-layout-section{font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-800)}.mrd-layout-section__search-result-desc.sc-mrd-layout-section{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-top:var(--mrd-space-1)}.mrd-layout-section__image-thumb-btn.sc-mrd-layout-section{background:none;border:none;padding:0;cursor:pointer;display:inline-block;border-radius:var(--mrd-border-radius);overflow:hidden;line-height:0}.mrd-layout-section__image-thumb-btn.sc-mrd-layout-section:hover .mrd-layout-section__image-thumb.sc-mrd-layout-section{opacity:0.85}.mrd-layout-section__image-thumb.sc-mrd-layout-section{display:block;max-width:160px;max-height:100px;border-radius:var(--mrd-border-radius);object-fit:cover;transition:opacity 0.15s}.mrd-layout-section__modal-backdrop.sc-mrd-layout-section{position:fixed;inset:0;background:rgba(0, 0, 0, 0.6);z-index:300;display:flex;align-items:center;justify-content:center}.mrd-layout-section__modal.sc-mrd-layout-section{position:relative;background:var(--mrd-color-white);border-radius:var(--mrd-border-radius);padding:var(--mrd-space-3);max-width:min(90vw, 900px);max-height:90vh;display:flex;align-items:center;justify-content:center;box-shadow:var(--mrd-shadow-lg)}.mrd-layout-section__modal-close.sc-mrd-layout-section{position:absolute;top:var(--mrd-space-2);right:var(--mrd-space-2);background:rgba(0, 0, 0, 0.5);border:none;border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--mrd-color-white);cursor:pointer;font-size:var(--mrd-font-size-sm);line-height:1;z-index:1}.mrd-layout-section__modal-close.sc-mrd-layout-section:hover{background:rgba(0, 0, 0, 0.8)}.mrd-layout-section__modal-image.sc-mrd-layout-section{display:block;max-width:100%;max-height:calc(90vh - 2rem);border-radius:var(--mrd-border-radius);object-fit:contain}`;
|
|
3232
|
+
const mrdLayoutSectionCss = () => `.sc-mrd-layout-section-h{display:block;width:100%}.mrd-layout-section.sc-mrd-layout-section{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-800)}.mrd-layout-section__field.sc-mrd-layout-section{display:grid;grid-template-columns:200px 1fr;align-items:baseline;gap:0 var(--mrd-space-2);padding:var(--mrd-space-1) 0}.mrd-layout-section__field-label.sc-mrd-layout-section{font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-normal);color:var(--mrd-color-neutral-500);padding-top:1px}.mrd-layout-section__field-value.sc-mrd-layout-section{font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-800);word-break:break-word;display:inline-flex;align-items:center;gap:var(--mrd-space-1)}.mrd-layout-section__history-wrap.sc-mrd-layout-section{position:relative;display:inline-flex;align-items:center}.mrd-layout-section__history-btn.sc-mrd-layout-section{display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;padding:0;background:transparent;border:none;border-radius:var(--mrd-border-radius-sm);color:var(--mrd-color-neutral-400);cursor:pointer;flex-shrink:0;transition:color var(--mrd-transition-fast), background-color var(--mrd-transition-fast)}.mrd-layout-section__history-btn.sc-mrd-layout-section:hover{color:var(--mrd-color-neutral-700);background-color:var(--mrd-color-neutral-100)}.mrd-layout-section__history-btn.sc-mrd-layout-section:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-layout-section__history-icon.sc-mrd-layout-section{width:0.875rem;height:0.875rem}.mrd-layout-section__history-popover.sc-mrd-layout-section{position:absolute;top:calc(100% + 0.25rem);left:0;min-width:24rem;max-width:24rem;background-color:var(--mrd-color-white);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-md);box-shadow:var(--mrd-shadow-md);padding:var(--mrd-space-1) 0;z-index:var(--mrd-z-dropdown)}.mrd-layout-section__history-entry.sc-mrd-layout-section{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-normal);color:var(--mrd-color-neutral-700);padding:var(--mrd-space-2) var(--mrd-space-3);line-height:var(--mrd-line-height-normal)}.mrd-layout-section__history-entry.sc-mrd-layout-section:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-layout-section__field-header.sc-mrd-layout-section{font-size:var(--mrd-font-size-2xl);font-weight:var(--mrd-font-weight-bold);color:var(--mrd-color-neutral-900);margin:0 0 var(--mrd-space-4) 0;padding:0}.mrd-layout-section__header.sc-mrd-layout-section{font-size:var(--mrd-font-size-xl);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-800);margin:var(--mrd-space-4) 0 var(--mrd-space-2) 0;padding:0}.mrd-layout-section__text.sc-mrd-layout-section{font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-700);line-height:var(--mrd-line-height-relaxed);margin:var(--mrd-space-2) 0}.mrd-layout-section__navigate.sc-mrd-layout-section{display:inline-flex;align-items:center;gap:var(--mrd-space-2);padding:var(--mrd-space-2) var(--mrd-space-3);background:none;border:1px solid var(--mrd-color-neutral-300);border-radius:var(--mrd-border-radius);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-primary);cursor:pointer;margin:var(--mrd-space-2) 0}.mrd-layout-section__navigate.sc-mrd-layout-section:hover{background-color:var(--mrd-color-primary-light);border-color:var(--mrd-color-primary)}.mrd-layout-section__link.sc-mrd-layout-section{color:var(--mrd-color-primary);text-decoration:none}.mrd-layout-section__link.sc-mrd-layout-section:hover{text-decoration:underline}.mrd-layout-section__relation-link.sc-mrd-layout-section{background:none;border:none;padding:0;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-primary);cursor:pointer;text-align:left}.mrd-layout-section__relation-link.sc-mrd-layout-section:hover{text-decoration:underline}.mrd-layout-section__download-link.sc-mrd-layout-section{display:inline-flex;align-items:center;gap:var(--mrd-space-1);background:none;border:none;padding:0;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-primary);cursor:pointer;text-align:left}.mrd-layout-section__download-link.sc-mrd-layout-section:hover{text-decoration:underline;color:var(--mrd-color-primary-dark)}.mrd-layout-section__file-icon.sc-mrd-layout-section{flex-shrink:0;width:1rem;height:1rem}.mrd-layout-section__boolean--true.sc-mrd-layout-section{color:var(--mrd-color-success);font-weight:var(--mrd-font-weight-semibold)}.mrd-layout-section__boolean--false.sc-mrd-layout-section{color:var(--mrd-color-neutral-400)}.mrd-layout-section__field--block.sc-mrd-layout-section{grid-template-columns:1fr}.mrd-layout-section__badge.sc-mrd-layout-section{display:inline-block;font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-medium);padding:2px var(--mrd-space-3);border-radius:10px}.mrd-layout-section__badge-dot-row.sc-mrd-layout-section{display:inline-flex;align-items:center;gap:var(--mrd-space-2)}.mrd-layout-section__badge-dot.sc-mrd-layout-section{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0}.mrd-layout-section__secret-masked.sc-mrd-layout-section{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-label-color);letter-spacing:0.15em;user-select:none;pointer-events:none}.mrd-layout-section__pre.sc-mrd-layout-section{font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);background-color:var(--mrd-color-neutral-50);border:1px solid var(--mrd-color-neutral-200);border-radius:var(--mrd-border-radius);padding:var(--mrd-space-3);margin:0;max-height:calc(15 * var(--mrd-font-size-xs));overflow-x:auto;overflow-y:auto;white-space:pre-wrap;word-break:break-word}.mrd-layout-section__group.sc-mrd-layout-section{margin:var(--mrd-space-4) 0}.mrd-layout-section__group-title.sc-mrd-layout-section{font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-500);margin:0 0 var(--mrd-space-2) 0;padding-bottom:0;letter-spacing:0.01em}.mrd-layout-section__related-view.sc-mrd-layout-section{margin:var(--mrd-space-4) 0}.mrd-layout-section__related-view-title.sc-mrd-layout-section{font-size:var(--mrd-font-size-lg);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-800);margin:0 0 var(--mrd-space-3) 0}.mrd-layout-section__search.sc-mrd-layout-section{position:relative;margin:var(--mrd-space-2) 0}.mrd-layout-section__search-wrap.sc-mrd-layout-section{position:relative}.mrd-layout-section__search-icon.sc-mrd-layout-section{position:absolute;left:var(--mrd-input-padding-x);top:50%;transform:translateY(-50%);width:1rem;height:1rem;color:var(--mrd-color-neutral-400);pointer-events:none}.mrd-layout-section__search-input.sc-mrd-layout-section{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x) var(--mrd-input-padding-y) calc(var(--mrd-input-padding-x) + 1rem + var(--mrd-space-2));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);outline:none;appearance:none;box-sizing:border-box}.mrd-layout-section__search-input.sc-mrd-layout-section:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-layout-section__search-input.sc-mrd-layout-section::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-layout-section__search-results.sc-mrd-layout-section{position:absolute;top:100%;left:0;right:0;background-color:var(--mrd-color-white);border:1px solid var(--mrd-color-neutral-300);border-top:none;border-radius:0 0 var(--mrd-border-radius) var(--mrd-border-radius);box-shadow:var(--mrd-shadow-sm);z-index:100;max-height:300px;overflow-y:auto;list-style:none;margin:0;padding:var(--mrd-space-1) 0}.mrd-layout-section__search-result.sc-mrd-layout-section{margin:0;padding:0}.mrd-layout-section__search-result-btn.sc-mrd-layout-section{display:flex;flex-direction:column;width:100%;padding:var(--mrd-space-2) var(--mrd-space-3);background:none;border:none;text-align:left;cursor:pointer;font-family:var(--mrd-font-family)}.mrd-layout-section__search-result-btn.sc-mrd-layout-section:hover{background-color:var(--mrd-color-primary-light)}.mrd-layout-section__search-result-label.sc-mrd-layout-section{font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-800)}.mrd-layout-section__search-result-desc.sc-mrd-layout-section{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-top:var(--mrd-space-1)}.mrd-layout-section__image-thumb-btn.sc-mrd-layout-section{background:none;border:none;padding:0;cursor:pointer;display:inline-block;border-radius:var(--mrd-border-radius);overflow:hidden;line-height:0}.mrd-layout-section__image-thumb-btn.sc-mrd-layout-section:hover .mrd-layout-section__image-thumb.sc-mrd-layout-section{opacity:0.85}.mrd-layout-section__image-thumb.sc-mrd-layout-section{display:block;max-width:160px;max-height:100px;border-radius:var(--mrd-border-radius);object-fit:cover;transition:opacity 0.15s}.mrd-layout-section__modal-backdrop.sc-mrd-layout-section{position:fixed;inset:0;background:rgba(0, 0, 0, 0.6);z-index:300;display:flex;align-items:center;justify-content:center}.mrd-layout-section__modal.sc-mrd-layout-section{position:relative;background:var(--mrd-color-white);border-radius:var(--mrd-border-radius);padding:var(--mrd-space-3);max-width:min(90vw, 900px);max-height:90vh;display:flex;align-items:center;justify-content:center;box-shadow:var(--mrd-shadow-lg)}.mrd-layout-section__modal-close.sc-mrd-layout-section{position:absolute;top:var(--mrd-space-2);right:var(--mrd-space-2);background:rgba(0, 0, 0, 0.5);border:none;border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--mrd-color-white);cursor:pointer;font-size:var(--mrd-font-size-sm);line-height:1;z-index:1}.mrd-layout-section__modal-close.sc-mrd-layout-section:hover{background:rgba(0, 0, 0, 0.8)}.mrd-layout-section__modal-image.sc-mrd-layout-section{display:block;max-width:100%;max-height:calc(90vh - 2rem);border-radius:var(--mrd-border-radius);object-fit:contain}`;
|
|
3044
3233
|
|
|
3045
3234
|
const MrdLayoutSection = class {
|
|
3046
3235
|
constructor(hostRef) {
|
|
@@ -3050,6 +3239,7 @@ const MrdLayoutSection = class {
|
|
|
3050
3239
|
this.mrdDownload = index.createEvent(this, "mrdDownload");
|
|
3051
3240
|
this.mrdLoadViewPage = index.createEvent(this, "mrdLoadViewPage");
|
|
3052
3241
|
this.mrdLoadImage = index.createEvent(this, "mrdLoadImage");
|
|
3242
|
+
this.mrdLoadDocumentPreview = index.createEvent(this, "mrdLoadDocumentPreview");
|
|
3053
3243
|
this.mrdViewAction = index.createEvent(this, "mrdViewAction");
|
|
3054
3244
|
this.mrdLoadViewAggregations = index.createEvent(this, "mrdLoadViewAggregations");
|
|
3055
3245
|
this.mrdLoadViewDistinct = index.createEvent(this, "mrdLoadViewDistinct");
|
|
@@ -3068,11 +3258,17 @@ const MrdLayoutSection = class {
|
|
|
3068
3258
|
/** Top-level archetypes on the object dashboard. When it contains commons.document,
|
|
3069
3259
|
* the record is rendered as a single-document view instead of generic fields. */
|
|
3070
3260
|
this.archetypes = [];
|
|
3261
|
+
/** Minimum height (px) of the commons.document inline file preview — it
|
|
3262
|
+
* stretches taller in the wide side-by-side layout. Pass a smaller value
|
|
3263
|
+
* when embedding the record in an overlay with limited height. */
|
|
3264
|
+
this.documentPreviewHeight = 640;
|
|
3071
3265
|
this.searchQueryMap = {};
|
|
3072
3266
|
this.searchResultsMap = {};
|
|
3073
3267
|
this.imagePreviewUrl = null;
|
|
3074
3268
|
this.imagePreviews = {};
|
|
3075
3269
|
this.openHistoryField = null;
|
|
3270
|
+
/** Signed URL for the commons.document archetype's inline file preview. */
|
|
3271
|
+
this.documentPreviewUrl = null;
|
|
3076
3272
|
this.historyClickOutside = null;
|
|
3077
3273
|
this.searchTimers = {};
|
|
3078
3274
|
this.handleViewLoadPage = (e, name) => {
|
|
@@ -3196,6 +3392,11 @@ const MrdLayoutSection = class {
|
|
|
3196
3392
|
async openImagePreview(url) {
|
|
3197
3393
|
this.imagePreviewUrl = url;
|
|
3198
3394
|
}
|
|
3395
|
+
/** Provide a resolved signed URL for the commons.document archetype's inline
|
|
3396
|
+
* file preview, in response to mrdLoadDocumentPreview. */
|
|
3397
|
+
async setDocumentPreviewUrl(url) {
|
|
3398
|
+
this.documentPreviewUrl = url;
|
|
3399
|
+
}
|
|
3199
3400
|
resolveSearchKey() {
|
|
3200
3401
|
var _a;
|
|
3201
3402
|
const items = flattenItems(this.items).filter(i => i.type === index$1.ClientLayoutItemType.SEARCH);
|
|
@@ -3285,6 +3486,10 @@ const MrdLayoutSection = class {
|
|
|
3285
3486
|
e.stopPropagation();
|
|
3286
3487
|
this.mrdLoadViewAggregations.emit(Object.assign({ name: key, dataClass: (_a = item.dataClass) !== null && _a !== void 0 ? _a : key }, e.detail));
|
|
3287
3488
|
}, onMrdNavigate: (e) => {
|
|
3489
|
+
// mrd-document-container already hardcodes navigateBehaviour to
|
|
3490
|
+
// OVERLAY_PAGE (documents are always the quick-look use case) —
|
|
3491
|
+
// relay as-is, unlike the generic table path below which takes it
|
|
3492
|
+
// from the item's configuration.
|
|
3288
3493
|
e.stopPropagation();
|
|
3289
3494
|
this.mrdNavigate.emit(e.detail);
|
|
3290
3495
|
}, onMrdAction: (e) => {
|
|
@@ -3308,10 +3513,14 @@ const MrdLayoutSection = class {
|
|
|
3308
3513
|
e.stopPropagation();
|
|
3309
3514
|
this.mrdLoadViewAggregations.emit(Object.assign({ name: key, dataClass: (_a = item.dataClass) !== null && _a !== void 0 ? _a : key }, e.detail));
|
|
3310
3515
|
}, onMrdRowClick: (e) => {
|
|
3311
|
-
var _a, _b, _c;
|
|
3516
|
+
var _a, _b, _c, _d;
|
|
3312
3517
|
e.stopPropagation();
|
|
3313
3518
|
const row = e.detail;
|
|
3314
|
-
this.mrdNavigate.emit({
|
|
3519
|
+
this.mrdNavigate.emit({
|
|
3520
|
+
href: (_b = (_a = row === null || row === void 0 ? void 0 : row._links) === null || _a === void 0 ? void 0 : _a.self) === null || _b === void 0 ? void 0 : _b.href,
|
|
3521
|
+
label: (_c = row === null || row === void 0 ? void 0 : row.name) !== null && _c !== void 0 ? _c : '',
|
|
3522
|
+
navigateBehaviour: (_d = item.navigateBehaviour) !== null && _d !== void 0 ? _d : index$1.ClientLayoutNavigateBehaviour.PAGE,
|
|
3523
|
+
});
|
|
3315
3524
|
}, onMrdAction: (e) => {
|
|
3316
3525
|
var _a;
|
|
3317
3526
|
e.stopPropagation();
|
|
@@ -3360,17 +3569,18 @@ const MrdLayoutSection = class {
|
|
|
3360
3569
|
* a recognisable document instead of generic fields, keeping any related views/
|
|
3361
3570
|
* searches below it. */
|
|
3362
3571
|
renderDocumentObject(archetype) {
|
|
3572
|
+
var _a;
|
|
3363
3573
|
const related = this.items.filter(it => it.type === index$1.ClientLayoutItemType.VIEW ||
|
|
3364
3574
|
it.type === index$1.ClientLayoutItemType.RELATED_VIEW ||
|
|
3365
3575
|
it.type === index$1.ClientLayoutItemType.SEARCH);
|
|
3366
3576
|
return [
|
|
3367
|
-
index.h("mrd-document-view", { archetype: archetype, data: this.data, locale: this.locale, onMrdNavigate: (e) => { e.stopPropagation(); this.mrdNavigate.emit(e.detail); }, onMrdDownload: (e) => { e.stopPropagation(); this.mrdDownload.emit(e.detail); } }),
|
|
3577
|
+
index.h("mrd-document-view", { archetype: archetype, data: this.data, locale: this.locale, previewUrl: (_a = this.documentPreviewUrl) !== null && _a !== void 0 ? _a : '', previewHeight: this.documentPreviewHeight, onMrdNavigate: (e) => { e.stopPropagation(); this.mrdNavigate.emit(e.detail); }, onMrdDownload: (e) => { e.stopPropagation(); this.mrdDownload.emit(e.detail); }, onMrdLoadPreview: (e) => { e.stopPropagation(); this.mrdLoadDocumentPreview.emit(e.detail); } }),
|
|
3368
3578
|
...related.map(it => this.renderItem(it)),
|
|
3369
3579
|
];
|
|
3370
3580
|
}
|
|
3371
3581
|
render() {
|
|
3372
3582
|
const docArchetype = index$1.resolveArchetype(this.archetypes, index$1.ARCHETYPE_DOCUMENT);
|
|
3373
|
-
return (index.h(index.Host, { key: '
|
|
3583
|
+
return (index.h(index.Host, { key: 'd73b44ed5d3529c5b01a87ddfd9a7ebe202ff3b8' }, index.h("div", { key: '1e80e202ec7c23afbca8f6a02376f0a4a4a6ba31', class: "mrd-layout-section" }, docArchetype
|
|
3374
3584
|
? this.renderDocumentObject(docArchetype)
|
|
3375
3585
|
: this.items.map(item => this.renderItem(item))), this.renderImageModal()));
|
|
3376
3586
|
}
|
|
@@ -3491,7 +3701,7 @@ const MrdLongtextField = class {
|
|
|
3491
3701
|
};
|
|
3492
3702
|
}
|
|
3493
3703
|
render() {
|
|
3494
|
-
return (index.h(index.Host, { key: '
|
|
3704
|
+
return (index.h(index.Host, { key: 'b27d14772f5184d41c178606629a9945120296ef' }, index.h("div", { key: '206b1b9ee1d37e05680e31bf8b324455867fd93b', class: "mrd-longtext-field" }, index.h(FieldLabel, { key: '0b6f4959f32a097907965753ed8708d7580aee53', base: "mrd-longtext-field", label: this.label, required: this.required }), this.disabled ? (index.h("pre", { class: "mrd-longtext-field__content" }, this.value)) : (index.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)), index.h(FieldError, { key: '0803cf0c1b6409e6c8a65121efef97d28d870119', base: "mrd-longtext-field", error: this.error }))));
|
|
3495
3705
|
}
|
|
3496
3706
|
};
|
|
3497
3707
|
MrdLongtextField.style = mrdLongtextFieldCss();
|
|
@@ -3567,7 +3777,7 @@ const MrdNumberField = class {
|
|
|
3567
3777
|
const hasError = !!this.error;
|
|
3568
3778
|
const suffix = this.dataType === index$1.ClientLayoutItemFieldDataType.PERCENTAGE ? '%' :
|
|
3569
3779
|
this.dataType === index$1.ClientLayoutItemFieldDataType.DECIMAL ? '' : '';
|
|
3570
|
-
return (index.h(index.Host, { key: '
|
|
3780
|
+
return (index.h(index.Host, { key: '90cae99b332f9554bc80d4044fce892ae37a48cf' }, index.h("div", { key: '26a9cfcc662eaeb571d17785f10f74269cf78537', class: "mrd-number-field" }, index.h(FieldLabel, { key: '0d9e70c1591f309ad2875d9e9fe6dbb8aa910323', base: "mrd-number-field", label: this.label, required: this.required }), index.h("div", { key: '95e9b53fa73c452491f65355915bf04912900ded', class: "mrd-number-field__input-wrapper" }, index.h("input", { key: '1d341c270a21b1a10c51757e90257e48e741abd7', 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 })), index.h(FieldError, { key: '0dba75e0f7355b71bfa71dab16cd1a6fcc36922f', base: "mrd-number-field", error: this.error }))));
|
|
3571
3781
|
}
|
|
3572
3782
|
};
|
|
3573
3783
|
MrdNumberField.style = mrdNumberFieldCss();
|
|
@@ -3845,9 +4055,9 @@ const MrdSecretField = class {
|
|
|
3845
4055
|
};
|
|
3846
4056
|
}
|
|
3847
4057
|
render() {
|
|
3848
|
-
return (index.h(index.Host, { key: '
|
|
4058
|
+
return (index.h(index.Host, { key: '9883a87b7fcc840aa4bbe0a3cde163cc58bda65d' }, index.h("div", { key: '3c7ec45d59a1a17863daa39b7c115db5c58815ee', class: "mrd-secret-field" }, index.h(FieldLabel, { key: '2dda66c7e6d4946661bff5a5a46589a7e17f569a', base: "mrd-secret-field", label: this.label, required: this.required }), this.disabled
|
|
3849
4059
|
? (index.h("span", { class: "mrd-secret-field__masked", "aria-label": this.label }, this.value ? '••••••••' : ''))
|
|
3850
|
-
: (index.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 })), index.h(FieldError, { key: '
|
|
4060
|
+
: (index.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 })), index.h(FieldError, { key: 'ad8f54a7c76c59591fee77e11a12bbd62c392d91', base: "mrd-secret-field", error: this.error }))));
|
|
3851
4061
|
}
|
|
3852
4062
|
};
|
|
3853
4063
|
MrdSecretField.style = mrdSecretFieldCss();
|
|
@@ -4228,6 +4438,10 @@ const BUFFER = 10;
|
|
|
4228
4438
|
/** Wait this long (ms) after the last scroll event before requesting pages,
|
|
4229
4439
|
* so pages the user quickly scrolls past are skipped. */
|
|
4230
4440
|
const REQUEST_DEBOUNCE_MS = 150;
|
|
4441
|
+
/** Default time (ms) to wait for setPage() before treating a request as stale and retrying. */
|
|
4442
|
+
const REQUEST_TIMEOUT_MS = 15000;
|
|
4443
|
+
/** Max retries for a stale page request before giving up and showing a retry row. */
|
|
4444
|
+
const MAX_RETRY_ATTEMPTS = 3;
|
|
4231
4445
|
function visibleCount(tableHeight, rowHeight) {
|
|
4232
4446
|
return Math.ceil(tableHeight / rowHeight);
|
|
4233
4447
|
}
|
|
@@ -4268,15 +4482,28 @@ function isTotalKnownFromPages(loadedPages, pageSize) {
|
|
|
4268
4482
|
}
|
|
4269
4483
|
return false;
|
|
4270
4484
|
}
|
|
4485
|
+
/** Pages whose request timestamp is older than timeoutMs — candidates for retry or failure.
|
|
4486
|
+
* Caller is expected to already exclude pages present in loadedPages. */
|
|
4487
|
+
function getStalePages(requestedAt, now, timeoutMs) {
|
|
4488
|
+
const stale = [];
|
|
4489
|
+
for (const [page, ts] of requestedAt) {
|
|
4490
|
+
if (now - ts >= timeoutMs)
|
|
4491
|
+
stale.push(page);
|
|
4492
|
+
}
|
|
4493
|
+
return stale;
|
|
4494
|
+
}
|
|
4271
4495
|
|
|
4272
|
-
const mrdTableCss = () => `@charset "UTF-8";.sc-mrd-table-h{display:block;width:100%}.mrd-table__scroll.sc-mrd-table{overflow-y:auto;overflow-x:auto;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow-anchor:none}.mrd-table.sc-mrd-table{overflow-x:auto}.mrd-table__table.sc-mrd-table{width:auto;min-width:100%;border-collapse:collapse;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-table__scroll.sc-mrd-table .mrd-table__table.sc-mrd-table{min-width:max-content}.mrd-table__header.sc-mrd-table{position:sticky;top:0;z-index:1;background:var(--mrd-color-white);text-align:left;padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:2px solid var(--mrd-border-color);color:var(--mrd-color-neutral-600);font-weight:var(--mrd-font-weight-medium);white-space:nowrap;font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em}.mrd-table__header--sortable.sc-mrd-table{cursor:pointer;user-select:none}.mrd-table__header--sortable.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-800)}.mrd-table__header--sorted-asc.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__header-label.sc-mrd-table{margin-right:var(--mrd-space-1)}.mrd-table__sort-icon.sc-mrd-table{font-size:0.85rem;opacity:0.4;vertical-align:middle}.mrd-table__header--sorted-asc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table{opacity:1;color:var(--mrd-color-primary)}.mrd-table__filter-icon.sc-mrd-table{display:inline-flex;align-items:center;vertical-align:middle;margin-left:var(--mrd-space-1);color:var(--mrd-color-primary)}.mrd-table__row.sc-mrd-table{border-bottom:1px solid var(--mrd-border-color)}.mrd-table__row.sc-mrd-table:hover{background:var(--mrd-color-neutral-200) !important}.mrd-table__row--clickable.sc-mrd-table{cursor:pointer}.mrd-table__spacer.sc-mrd-table{border:none}.mrd-table__spacer.sc-mrd-table td.sc-mrd-table{padding:0;border:none}.mrd-table__cell.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);vertical-align:top;white-space:nowrap}.mrd-table__cell--numeric.sc-mrd-table{text-align:right;font-variant-numeric:tabular-nums}.mrd-table__row--loading.sc-mrd-table{background:transparent}.mrd-table__cell--placeholder.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__placeholder-bar.sc-mrd-table{display:block;height:0.75rem;width:55%;border-radius:var(--mrd-border-radius-sm);background:linear-gradient(90deg, var(--mrd-color-neutral-200) 25%, var(--mrd-color-neutral-100) 50%, var(--mrd-color-neutral-200) 75%);background-size:200% 100%;animation:mrd-shimmer 1.4s ease infinite}@keyframes mrd-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.mrd-table__toolbar.sc-mrd-table{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--mrd-space-2)}.mrd-table__toolbar-left.sc-mrd-table,.mrd-table__toolbar-right.sc-mrd-table{display:flex;gap:var(--mrd-space-2);align-items:center}.mrd-table__toolbar-center.sc-mrd-table{flex:1;display:flex;justify-content:center;align-items:center;gap:var(--mrd-space-1)}.mrd-table__view-switcher.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1)}.mrd-table__view-arrow.sc-mrd-table{background:none;border:none;cursor:pointer;padding:0 var(--mrd-space-1);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-xs);line-height:1}.mrd-table__view-arrow.sc-mrd-table:hover{color:var(--mrd-color-neutral-800)}.mrd-table__view-title-wrap.sc-mrd-table{position:relative}.mrd-table__view-title.sc-mrd-table{font-size:var(--mrd-font-size-sm);font-weight:600;color:var(--mrd-color-neutral-800);font-family:var(--mrd-font-family);background:none;border:none;outline:none;cursor:pointer;padding:0 var(--mrd-space-1);max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mrd-table__view-title.sc-mrd-table:hover{color:var(--mrd-color-primary)}.mrd-table__view-popover.sc-mrd-table{position:absolute;top:calc(100% + var(--mrd-space-1));left:50%;transform:translateX(-50%);background:var(--mrd-color-white);border:1px solid var(--mrd-color-neutral-200);border-radius:var(--mrd-radius-md);box-shadow:var(--mrd-shadow-md);z-index:100;min-width:160px;padding:var(--mrd-space-1) 0}.mrd-table__view-popover-item.sc-mrd-table{display:block;width:100%;text-align:left;background:none;border:none;cursor:pointer;padding:var(--mrd-space-2) var(--mrd-space-3);font-size:var(--mrd-font-size-sm);font-family:var(--mrd-font-family);color:var(--mrd-color-neutral-700);white-space:nowrap}.mrd-table__view-popover-item.sc-mrd-table:hover{background:var(--mrd-color-neutral-50)}.mrd-table__view-popover-item--active.sc-mrd-table{font-weight:600;color:var(--mrd-color-primary)}.mrd-table__action.sc-mrd-table{position:relative;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;background:transparent;border:1px solid transparent;border-radius:var(--mrd-border-radius);cursor:pointer;color:var(--mrd-color-neutral-400);transition:background-color 0.15s, border-color 0.15s, color 0.15s}.mrd-table__action.sc-mrd-table:hover{background-color:var(--mrd-color-neutral-100);border-color:var(--mrd-color-neutral-300);color:var(--mrd-color-neutral-700)}.mrd-table__action.sc-mrd-table:disabled{opacity:0.4;cursor:not-allowed}.mrd-table__action--primary.sc-mrd-table{color:var(--mrd-color-neutral-500)}.mrd-table__action--primary.sc-mrd-table:hover{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__action--danger.sc-mrd-table{color:var(--mrd-color-error)}.mrd-table__action--danger.sc-mrd-table:hover{background-color:var(--mrd-color-error-light, #fef2f2);border-color:var(--mrd-color-error)}.mrd-table__action-icon.sc-mrd-table{width:1.25rem;height:1.25rem;pointer-events:none;fill:currentColor}.mrd-table__action-tooltip.sc-mrd-table{display:none;position:absolute;bottom:calc(100% + 6px);right:0;padding:var(--mrd-space-1) var(--mrd-space-2);font-size:var(--mrd-font-size-xs);white-space:nowrap;background:var(--mrd-color-tooltip, #fffce1);color:var(--mrd-color-neutral-900);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-sm, var(--mrd-border-radius));pointer-events:none;z-index:10}.mrd-table__action.sc-mrd-table:hover .mrd-table__action-tooltip.sc-mrd-table{display:block}.mrd-table__create-picker-wrap.sc-mrd-table{position:relative}.mrd-table__create-picker.sc-mrd-table{position:absolute;right:0;top:calc(100% + 4px);background:var(--mrd-color-white, #fff);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));z-index:10;min-width:10rem;padding:var(--mrd-space-1) 0}.mrd-table__create-picker-item.sc-mrd-table{display:block;width:100%;text-align:left;padding:var(--mrd-space-2) var(--mrd-space-3);background:none;border:none;cursor:pointer;font-size:var(--mrd-font-size-sm);font-family:var(--mrd-font-family);color:var(--mrd-color-neutral-800)}.mrd-table__create-picker-item.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-900)}.mrd-table__filter-toggle--active.sc-mrd-table{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__filter-toggle--active.sc-mrd-table:hover{background:var(--mrd-color-primary-dark, var(--mrd-color-primary));border-color:var(--mrd-color-primary-dark, var(--mrd-color-primary));color:var(--mrd-color-white)}.mrd-table__filter-badge.sc-mrd-table{position:absolute;top:-6px;right:-6px;min-width:1.25rem;height:1.25rem;padding:0 3px;background:var(--mrd-color-error, #e53e3e);color:var(--mrd-color-white);border-radius:9999px;font-size:0.65rem;font-weight:var(--mrd-font-weight-medium);line-height:1.25rem;text-align:center;pointer-events:none}.mrd-table__header--filtered.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__filter-popup.sc-mrd-table{position:fixed;width:280px;background:var(--mrd-color-white);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));z-index:var(--mrd-z-dropdown, 200);font-size:var(--mrd-font-size-sm)}.mrd-table__filter-popup-header.sc-mrd-table{display:flex;align-items:center;justify-content:space-between;padding:var(--mrd-space-2) var(--mrd-space-3);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__filter-popup-title.sc-mrd-table{font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-800);font-size:var(--mrd-font-size-sm)}.mrd-table__filter-close.sc-mrd-table{background:transparent;border:none;cursor:pointer;color:var(--mrd-color-neutral-500);font-size:0.9rem;padding:2px 4px;border-radius:3px;line-height:1}.mrd-table__filter-close.sc-mrd-table:hover{background:var(--mrd-color-neutral-100);color:var(--mrd-color-neutral-800)}.mrd-table__filter-section.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-3)}.mrd-table__filter-section-label.sc-mrd-table{font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-medium);text-transform:uppercase;letter-spacing:0.04em;color:var(--mrd-color-neutral-500);margin-bottom:var(--mrd-space-2)}.mrd-table__filter-sort-buttons.sc-mrd-table{display:flex;gap:var(--mrd-space-2)}.mrd-table__filter-sort-btn.sc-mrd-table{flex:1;padding:var(--mrd-space-1) var(--mrd-space-2);background:transparent;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);cursor:pointer;font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-700)}.mrd-table__filter-sort-btn.sc-mrd-table:hover{background:var(--mrd-color-neutral-100)}.mrd-table__filter-sort-btn--active.sc-mrd-table{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__filter-divider.sc-mrd-table{height:1px;background:var(--mrd-border-color);margin:0}.mrd-table__filter-editor.sc-mrd-table{display:flex;flex-direction:column;gap:var(--mrd-space-2)}.mrd-table__filter-select.sc-mrd-table,.mrd-table__filter-input.sc-mrd-table{width:100%;padding:var(--mrd-space-1) var(--mrd-space-2);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900);background:var(--mrd-color-white);box-sizing:border-box}.mrd-table__filter-select.sc-mrd-table:focus,.mrd-table__filter-input.sc-mrd-table:focus{outline:none;border-color:var(--mrd-color-primary);box-shadow:0 0 0 2px rgba(0, 0, 0, 0.06)}.mrd-table__filter-range.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1)}.mrd-table__filter-range.sc-mrd-table .mrd-table__filter-input.sc-mrd-table{flex:1;min-width:0}.mrd-table__filter-range-sep.sc-mrd-table{color:var(--mrd-color-neutral-400);flex-shrink:0}.mrd-table__filter-range--stacked.sc-mrd-table{flex-direction:column;align-items:stretch;gap:var(--mrd-space-2)}.mrd-table__filter-range-label.sc-mrd-table{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-bottom:2px}.mrd-table__filter-radio-group.sc-mrd-table{display:flex;flex-direction:column;gap:var(--mrd-space-1)}.mrd-table__filter-radio-group--inline.sc-mrd-table{flex-direction:row;gap:var(--mrd-space-3)}.mrd-table__filter-radio-label.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1);cursor:pointer;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-800)}.mrd-table__filter-list.sc-mrd-table{display:flex;flex-direction:column;gap:var(--mrd-space-1);max-height:180px;overflow-y:auto}.mrd-table__filter-list-controls.sc-mrd-table{display:flex;gap:var(--mrd-space-2);margin-bottom:var(--mrd-space-1)}.mrd-table__filter-list-btn.sc-mrd-table{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-primary);background:transparent;border:none;cursor:pointer;padding:0;text-decoration:underline}.mrd-table__filter-checkbox-label.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1);cursor:pointer;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-800)}.mrd-table__filter-no-support.sc-mrd-table{font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-500);margin:0;font-style:italic}.mrd-table__filter-popup-footer.sc-mrd-table{display:flex;justify-content:flex-end;gap:var(--mrd-space-2);padding:var(--mrd-space-2) var(--mrd-space-3);border-top:1px solid var(--mrd-border-color)}.mrd-table__filter-btn.sc-mrd-table{padding:var(--mrd-space-1) var(--mrd-space-3);border-radius:var(--mrd-border-radius);border:1px solid var(--mrd-border-color);font-size:var(--mrd-font-size-sm);cursor:pointer}.mrd-table__filter-btn--clear.sc-mrd-table{background:transparent;color:var(--mrd-color-neutral-600)}.mrd-table__filter-btn--clear.sc-mrd-table:hover{background:var(--mrd-color-neutral-100)}.mrd-table__filter-btn--apply.sc-mrd-table{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__filter-btn--apply.sc-mrd-table:hover{background:var(--mrd-color-primary-dark, var(--mrd-color-primary));border-color:var(--mrd-color-primary-dark, var(--mrd-color-primary))}.mrd-table__totals-row.sc-mrd-table{border-top:2px solid var(--mrd-border-color)}.mrd-table__totals-cell.sc-mrd-table{position:sticky;bottom:0;z-index:2;padding:var(--mrd-space-2) var(--mrd-space-4);background:var(--mrd-color-white);font-weight:var(--mrd-font-weight-medium);font-variant-numeric:tabular-nums;white-space:nowrap;border-top:2px solid var(--mrd-border-color)}.mrd-table__totals-cell--numeric.sc-mrd-table{text-align:right}.mrd-table__footer.sc-mrd-table{padding:var(--mrd-space-1) var(--mrd-space-2);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);text-align:right}.mrd-table__empty.sc-mrd-table{padding:var(--mrd-space-4) var(--mrd-space-3);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center;margin:0}.mrd-table__file-btn.sc-mrd-table{display:inline-flex;align-items:center;gap:var(--mrd-space-1);background:none;border:none;padding:0;cursor:pointer;color:var(--mrd-color-primary);font-size:var(--mrd-font-size-sm);font-family:inherit;max-width:100%;overflow:hidden}.mrd-table__file-btn.sc-mrd-table:hover{text-decoration:underline;color:var(--mrd-color-primary-dark)}.mrd-table__file-icon.sc-mrd-table{flex-shrink:0;width:1rem;height:1rem}.mrd-table__textblock-btn.sc-mrd-table{display:inline;background:none;border:none;padding:0 0 0 var(--mrd-space-1);cursor:pointer;color:var(--mrd-color-primary);font-size:var(--mrd-font-size-sm);font-family:inherit;line-height:inherit;vertical-align:middle}.mrd-table__textblock-btn.sc-mrd-table:hover{color:var(--mrd-color-primary-dark)}.mrd-table__modal-backdrop.sc-mrd-table{position:fixed;inset:0;background:rgba(0, 0, 0, 0.4);z-index:var(--mrd-z-modal, 300);display:flex;align-items:center;justify-content:center}.mrd-table__modal.sc-mrd-table{background:#fff;border-radius:var(--mrd-radius-md, 0.5rem);padding:var(--mrd-space-6);max-width:min(600px, 90vw);max-height:70vh;overflow-y:auto;position:relative;box-shadow:var(--mrd-shadow-lg)}.mrd-table__modal-close.sc-mrd-table{position:absolute;top:var(--mrd-space-3);right:var(--mrd-space-3);background:none;border:none;cursor:pointer;font-size:1.25rem;line-height:1;color:var(--mrd-color-text-muted, #6b7280);padding:0}.mrd-table__modal-close.sc-mrd-table:hover{color:var(--mrd-color-text, #111827)}.mrd-table__modal-text.sc-mrd-table{margin:0;padding-right:var(--mrd-space-6);white-space:pre-wrap;word-break:break-word;font-size:var(--mrd-font-size-sm);line-height:1.6}.mrd-table__json-preview.sc-mrd-table{font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:inline-block;max-width:calc(100% - 1.5rem);vertical-align:middle}.mrd-table__modal-json.sc-mrd-table{margin:0;padding-right:var(--mrd-space-6);font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);white-space:pre-wrap;word-break:break-word;line-height:1.6;background:none;border:none}`;
|
|
4496
|
+
const mrdTableCss = () => `@charset "UTF-8";.sc-mrd-table-h{display:block;width:100%}.mrd-table__scroll.sc-mrd-table{overflow-y:auto;overflow-x:auto;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow-anchor:none}.mrd-table.sc-mrd-table{overflow-x:auto}.mrd-table__table.sc-mrd-table{width:auto;min-width:100%;border-collapse:collapse;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-table__scroll.sc-mrd-table .mrd-table__table.sc-mrd-table{min-width:max-content}.mrd-table__header.sc-mrd-table{position:sticky;top:0;z-index:1;background:var(--mrd-color-white);text-align:left;padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:2px solid var(--mrd-border-color);color:var(--mrd-color-neutral-600);font-weight:var(--mrd-font-weight-medium);white-space:nowrap;font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em}.mrd-table__header--sortable.sc-mrd-table{cursor:pointer;user-select:none}.mrd-table__header--sortable.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-800)}.mrd-table__header--sorted-asc.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__header-label.sc-mrd-table{margin-right:var(--mrd-space-1)}.mrd-table__sort-icon.sc-mrd-table{font-size:0.85rem;opacity:0.4;vertical-align:middle}.mrd-table__header--sorted-asc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table{opacity:1;color:var(--mrd-color-primary)}.mrd-table__filter-icon.sc-mrd-table{display:inline-flex;align-items:center;vertical-align:middle;margin-left:var(--mrd-space-1);color:var(--mrd-color-primary)}.mrd-table__row.sc-mrd-table{border-bottom:1px solid var(--mrd-border-color)}.mrd-table__row.sc-mrd-table:hover{background:var(--mrd-color-neutral-200) !important}.mrd-table__row--clickable.sc-mrd-table{cursor:pointer}.mrd-table__spacer.sc-mrd-table{border:none}.mrd-table__spacer.sc-mrd-table td.sc-mrd-table{padding:0;border:none}.mrd-table__cell.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);vertical-align:top;white-space:nowrap}.mrd-table__cell--numeric.sc-mrd-table{text-align:right;font-variant-numeric:tabular-nums}.mrd-table__row--loading.sc-mrd-table{background:transparent}.mrd-table__cell--placeholder.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__placeholder-bar.sc-mrd-table{display:block;height:0.75rem;width:55%;border-radius:var(--mrd-border-radius-sm);background:linear-gradient(90deg, var(--mrd-color-neutral-200) 25%, var(--mrd-color-neutral-100) 50%, var(--mrd-color-neutral-200) 75%);background-size:200% 100%;animation:mrd-shimmer 1.4s ease infinite}@keyframes mrd-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.mrd-table__row--failed.sc-mrd-table{background:transparent}.mrd-table__cell--failed.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__retry-button.sc-mrd-table{border:none;background:none;padding:0;color:var(--mrd-color-danger);font-size:inherit;cursor:pointer;text-decoration:underline}.mrd-table__toolbar.sc-mrd-table{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--mrd-space-2)}.mrd-table__toolbar-left.sc-mrd-table,.mrd-table__toolbar-right.sc-mrd-table{display:flex;gap:var(--mrd-space-2);align-items:center}.mrd-table__toolbar-center.sc-mrd-table{flex:1;display:flex;justify-content:center;align-items:center;gap:var(--mrd-space-1)}.mrd-table__view-switcher.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1)}.mrd-table__view-arrow.sc-mrd-table{background:none;border:none;cursor:pointer;padding:0 var(--mrd-space-1);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-xs);line-height:1}.mrd-table__view-arrow.sc-mrd-table:hover{color:var(--mrd-color-neutral-800)}.mrd-table__view-title-wrap.sc-mrd-table{position:relative}.mrd-table__view-title.sc-mrd-table{font-size:var(--mrd-font-size-sm);font-weight:600;color:var(--mrd-color-neutral-800);font-family:var(--mrd-font-family);background:none;border:none;outline:none;cursor:pointer;padding:0 var(--mrd-space-1);max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mrd-table__view-title.sc-mrd-table:hover{color:var(--mrd-color-primary)}.mrd-table__view-popover.sc-mrd-table{position:absolute;top:calc(100% + var(--mrd-space-1));left:50%;transform:translateX(-50%);background:var(--mrd-color-white);border:1px solid var(--mrd-color-neutral-200);border-radius:var(--mrd-radius-md);box-shadow:var(--mrd-shadow-md);z-index:100;min-width:160px;padding:var(--mrd-space-1) 0}.mrd-table__view-popover-item.sc-mrd-table{display:block;width:100%;text-align:left;background:none;border:none;cursor:pointer;padding:var(--mrd-space-2) var(--mrd-space-3);font-size:var(--mrd-font-size-sm);font-family:var(--mrd-font-family);color:var(--mrd-color-neutral-700);white-space:nowrap}.mrd-table__view-popover-item.sc-mrd-table:hover{background:var(--mrd-color-neutral-50)}.mrd-table__view-popover-item--active.sc-mrd-table{font-weight:600;color:var(--mrd-color-primary)}.mrd-table__action.sc-mrd-table{position:relative;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;background:transparent;border:1px solid transparent;border-radius:var(--mrd-border-radius);cursor:pointer;color:var(--mrd-color-neutral-400);transition:background-color 0.15s, border-color 0.15s, color 0.15s}.mrd-table__action.sc-mrd-table:hover{background-color:var(--mrd-color-neutral-100);border-color:var(--mrd-color-neutral-300);color:var(--mrd-color-neutral-700)}.mrd-table__action.sc-mrd-table:disabled{opacity:0.4;cursor:not-allowed}.mrd-table__action--primary.sc-mrd-table{color:var(--mrd-color-neutral-500)}.mrd-table__action--primary.sc-mrd-table:hover{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__action--danger.sc-mrd-table{color:var(--mrd-color-error)}.mrd-table__action--danger.sc-mrd-table:hover{background-color:var(--mrd-color-error-light, #fef2f2);border-color:var(--mrd-color-error)}.mrd-table__action-icon.sc-mrd-table{width:1.25rem;height:1.25rem;pointer-events:none;fill:currentColor}.mrd-table__action-tooltip.sc-mrd-table{display:none;position:absolute;bottom:calc(100% + 6px);right:0;padding:var(--mrd-space-1) var(--mrd-space-2);font-size:var(--mrd-font-size-xs);white-space:nowrap;background:var(--mrd-color-tooltip, #fffce1);color:var(--mrd-color-neutral-900);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-sm, var(--mrd-border-radius));pointer-events:none;z-index:10}.mrd-table__action.sc-mrd-table:hover .mrd-table__action-tooltip.sc-mrd-table{display:block}.mrd-table__create-picker-wrap.sc-mrd-table{position:relative}.mrd-table__create-picker.sc-mrd-table{position:absolute;right:0;top:calc(100% + 4px);background:var(--mrd-color-white, #fff);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));z-index:10;min-width:10rem;padding:var(--mrd-space-1) 0}.mrd-table__create-picker-item.sc-mrd-table{display:block;width:100%;text-align:left;padding:var(--mrd-space-2) var(--mrd-space-3);background:none;border:none;cursor:pointer;font-size:var(--mrd-font-size-sm);font-family:var(--mrd-font-family);color:var(--mrd-color-neutral-800)}.mrd-table__create-picker-item.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-900)}.mrd-table__filter-toggle--active.sc-mrd-table{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__filter-toggle--active.sc-mrd-table:hover{background:var(--mrd-color-primary-dark, var(--mrd-color-primary));border-color:var(--mrd-color-primary-dark, var(--mrd-color-primary));color:var(--mrd-color-white)}.mrd-table__filter-badge.sc-mrd-table{position:absolute;top:-6px;right:-6px;min-width:1.25rem;height:1.25rem;padding:0 3px;background:var(--mrd-color-error, #e53e3e);color:var(--mrd-color-white);border-radius:9999px;font-size:0.65rem;font-weight:var(--mrd-font-weight-medium);line-height:1.25rem;text-align:center;pointer-events:none}.mrd-table__header--filtered.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__filter-popup.sc-mrd-table{position:fixed;width:280px;background:var(--mrd-color-white);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));z-index:var(--mrd-z-dropdown, 200);font-size:var(--mrd-font-size-sm)}.mrd-table__filter-popup-header.sc-mrd-table{display:flex;align-items:center;justify-content:space-between;padding:var(--mrd-space-2) var(--mrd-space-3);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__filter-popup-title.sc-mrd-table{font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-800);font-size:var(--mrd-font-size-sm)}.mrd-table__filter-close.sc-mrd-table{background:transparent;border:none;cursor:pointer;color:var(--mrd-color-neutral-500);font-size:0.9rem;padding:2px 4px;border-radius:3px;line-height:1}.mrd-table__filter-close.sc-mrd-table:hover{background:var(--mrd-color-neutral-100);color:var(--mrd-color-neutral-800)}.mrd-table__filter-section.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-3)}.mrd-table__filter-section-label.sc-mrd-table{font-size:var(--mrd-font-size-xs);font-weight:var(--mrd-font-weight-medium);text-transform:uppercase;letter-spacing:0.04em;color:var(--mrd-color-neutral-500);margin-bottom:var(--mrd-space-2)}.mrd-table__filter-sort-buttons.sc-mrd-table{display:flex;gap:var(--mrd-space-2)}.mrd-table__filter-sort-btn.sc-mrd-table{flex:1;padding:var(--mrd-space-1) var(--mrd-space-2);background:transparent;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);cursor:pointer;font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-700)}.mrd-table__filter-sort-btn.sc-mrd-table:hover{background:var(--mrd-color-neutral-100)}.mrd-table__filter-sort-btn--active.sc-mrd-table{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__filter-divider.sc-mrd-table{height:1px;background:var(--mrd-border-color);margin:0}.mrd-table__filter-editor.sc-mrd-table{display:flex;flex-direction:column;gap:var(--mrd-space-2)}.mrd-table__filter-select.sc-mrd-table,.mrd-table__filter-input.sc-mrd-table{width:100%;padding:var(--mrd-space-1) var(--mrd-space-2);border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900);background:var(--mrd-color-white);box-sizing:border-box}.mrd-table__filter-select.sc-mrd-table:focus,.mrd-table__filter-input.sc-mrd-table:focus{outline:none;border-color:var(--mrd-color-primary);box-shadow:0 0 0 2px rgba(0, 0, 0, 0.06)}.mrd-table__filter-range.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1)}.mrd-table__filter-range.sc-mrd-table .mrd-table__filter-input.sc-mrd-table{flex:1;min-width:0}.mrd-table__filter-range-sep.sc-mrd-table{color:var(--mrd-color-neutral-400);flex-shrink:0}.mrd-table__filter-range--stacked.sc-mrd-table{flex-direction:column;align-items:stretch;gap:var(--mrd-space-2)}.mrd-table__filter-range-label.sc-mrd-table{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-bottom:2px}.mrd-table__filter-radio-group.sc-mrd-table{display:flex;flex-direction:column;gap:var(--mrd-space-1)}.mrd-table__filter-radio-group--inline.sc-mrd-table{flex-direction:row;gap:var(--mrd-space-3)}.mrd-table__filter-radio-label.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1);cursor:pointer;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-800)}.mrd-table__filter-list.sc-mrd-table{display:flex;flex-direction:column;gap:var(--mrd-space-1);max-height:180px;overflow-y:auto}.mrd-table__filter-list-controls.sc-mrd-table{display:flex;gap:var(--mrd-space-2);margin-bottom:var(--mrd-space-1)}.mrd-table__filter-list-btn.sc-mrd-table{font-size:var(--mrd-font-size-xs);color:var(--mrd-color-primary);background:transparent;border:none;cursor:pointer;padding:0;text-decoration:underline}.mrd-table__filter-checkbox-label.sc-mrd-table{display:flex;align-items:center;gap:var(--mrd-space-1);cursor:pointer;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-800)}.mrd-table__filter-no-support.sc-mrd-table{font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-500);margin:0;font-style:italic}.mrd-table__filter-popup-footer.sc-mrd-table{display:flex;justify-content:flex-end;gap:var(--mrd-space-2);padding:var(--mrd-space-2) var(--mrd-space-3);border-top:1px solid var(--mrd-border-color)}.mrd-table__filter-btn.sc-mrd-table{padding:var(--mrd-space-1) var(--mrd-space-3);border-radius:var(--mrd-border-radius);border:1px solid var(--mrd-border-color);font-size:var(--mrd-font-size-sm);cursor:pointer}.mrd-table__filter-btn--clear.sc-mrd-table{background:transparent;color:var(--mrd-color-neutral-600)}.mrd-table__filter-btn--clear.sc-mrd-table:hover{background:var(--mrd-color-neutral-100)}.mrd-table__filter-btn--apply.sc-mrd-table{background:var(--mrd-color-primary);border-color:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-table__filter-btn--apply.sc-mrd-table:hover{background:var(--mrd-color-primary-dark, var(--mrd-color-primary));border-color:var(--mrd-color-primary-dark, var(--mrd-color-primary))}.mrd-table__totals-row.sc-mrd-table{border-top:2px solid var(--mrd-border-color)}.mrd-table__totals-cell.sc-mrd-table{position:sticky;bottom:0;z-index:2;padding:var(--mrd-space-2) var(--mrd-space-4);background:var(--mrd-color-white);font-weight:var(--mrd-font-weight-medium);font-variant-numeric:tabular-nums;white-space:nowrap;border-top:2px solid var(--mrd-border-color)}.mrd-table__totals-cell--numeric.sc-mrd-table{text-align:right}.mrd-table__footer.sc-mrd-table{padding:var(--mrd-space-1) var(--mrd-space-2);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);text-align:right}.mrd-table__empty.sc-mrd-table{padding:var(--mrd-space-4) var(--mrd-space-3);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center;margin:0}.mrd-table__file-btn.sc-mrd-table{display:inline-flex;align-items:center;gap:var(--mrd-space-1);background:none;border:none;padding:0;cursor:pointer;color:var(--mrd-color-primary);font-size:var(--mrd-font-size-sm);font-family:inherit;max-width:100%;overflow:hidden}.mrd-table__file-btn.sc-mrd-table:hover{text-decoration:underline;color:var(--mrd-color-primary-dark)}.mrd-table__file-icon.sc-mrd-table{flex-shrink:0;width:1rem;height:1rem}.mrd-table__textblock-btn.sc-mrd-table{display:inline;background:none;border:none;padding:0 0 0 var(--mrd-space-1);cursor:pointer;color:var(--mrd-color-primary);font-size:var(--mrd-font-size-sm);font-family:inherit;line-height:inherit;vertical-align:middle}.mrd-table__textblock-btn.sc-mrd-table:hover{color:var(--mrd-color-primary-dark)}.mrd-table__modal-backdrop.sc-mrd-table{position:fixed;inset:0;background:rgba(0, 0, 0, 0.4);z-index:var(--mrd-z-modal, 300);display:flex;align-items:center;justify-content:center}.mrd-table__modal.sc-mrd-table{background:#fff;border-radius:var(--mrd-radius-md, 0.5rem);padding:var(--mrd-space-6);max-width:min(600px, 90vw);max-height:70vh;overflow-y:auto;position:relative;box-shadow:var(--mrd-shadow-lg)}.mrd-table__modal-close.sc-mrd-table{position:absolute;top:var(--mrd-space-3);right:var(--mrd-space-3);background:none;border:none;cursor:pointer;font-size:1.25rem;line-height:1;color:var(--mrd-color-text-muted, #6b7280);padding:0}.mrd-table__modal-close.sc-mrd-table:hover{color:var(--mrd-color-text, #111827)}.mrd-table__modal-text.sc-mrd-table{margin:0;padding-right:var(--mrd-space-6);white-space:pre-wrap;word-break:break-word;font-size:var(--mrd-font-size-sm);line-height:1.6}.mrd-table__json-preview.sc-mrd-table{font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:inline-block;max-width:calc(100% - 1.5rem);vertical-align:middle}.mrd-table__modal-json.sc-mrd-table{margin:0;padding-right:var(--mrd-space-6);font-family:var(--mrd-font-family-mono);font-size:var(--mrd-font-size-xs);white-space:pre-wrap;word-break:break-word;line-height:1.6;background:none;border:none}`;
|
|
4273
4497
|
|
|
4498
|
+
/** How often (ms) to scan outstanding page requests for staleness. */
|
|
4499
|
+
const STALE_CHECK_INTERVAL_MS = 2000;
|
|
4274
4500
|
/** Breedte van de filterpopup in px — voor overflow-correctie. */
|
|
4275
4501
|
const POPUP_WIDTH = 280;
|
|
4276
4502
|
const MrdTable = class {
|
|
4277
4503
|
constructor(hostRef) {
|
|
4278
4504
|
index.registerInstance(this, hostRef);
|
|
4279
4505
|
this.mrdLoadPage = index.createEvent(this, "mrdLoadPage");
|
|
4506
|
+
this.mrdPageError = index.createEvent(this, "mrdPageError");
|
|
4280
4507
|
this.mrdRowClick = index.createEvent(this, "mrdRowClick");
|
|
4281
4508
|
this.mrdAction = index.createEvent(this, "mrdAction");
|
|
4282
4509
|
this.mrdDownload = index.createEvent(this, "mrdDownload");
|
|
@@ -4284,6 +4511,11 @@ const MrdTable = class {
|
|
|
4284
4511
|
// ── Non-state internals ────────────────────────────────────────────────────
|
|
4285
4512
|
this.pendingPages = new Set();
|
|
4286
4513
|
this.debounceTimer = null;
|
|
4514
|
+
/** Timestamp of the last mrdLoadPage emission per outstanding page — drives stale-request detection. */
|
|
4515
|
+
this.requestedAt = new Map();
|
|
4516
|
+
/** Retry count per page since it first became stale. */
|
|
4517
|
+
this.retryAttempts = new Map();
|
|
4518
|
+
this.staleCheckTimer = null;
|
|
4287
4519
|
this.outsideClickHandler = null;
|
|
4288
4520
|
this.keydownHandler = null;
|
|
4289
4521
|
this.createPickerClickHandler = null;
|
|
@@ -4306,11 +4538,16 @@ const MrdTable = class {
|
|
|
4306
4538
|
this.rowHeight = 36;
|
|
4307
4539
|
/** Height of the scroll container in px. */
|
|
4308
4540
|
this.tableHeight = 500;
|
|
4541
|
+
/** Time (ms) to wait for setPage() before retrying a page request; after
|
|
4542
|
+
* MAX_RETRY_ATTEMPTS retries the page is marked failed (see failedPages). */
|
|
4543
|
+
this.requestTimeoutMs = REQUEST_TIMEOUT_MS;
|
|
4309
4544
|
// ── Internal state ─────────────────────────────────────────────────────────
|
|
4310
4545
|
/** Index into allViews[] for the currently displayed view. 0 = primary, 1+ = alternatives. */
|
|
4311
4546
|
this.activeViewIdx = 0;
|
|
4312
4547
|
this.loadedPages = new Map();
|
|
4313
4548
|
this.requestedPages = new Set();
|
|
4549
|
+
/** Pages that timed out MAX_RETRY_ATTEMPTS times — rendered as a retry row instead of shimmer. */
|
|
4550
|
+
this.failedPages = new Set();
|
|
4314
4551
|
this.renderStart = 0;
|
|
4315
4552
|
this.renderEnd = 0;
|
|
4316
4553
|
this.colWidths = [];
|
|
@@ -4369,6 +4606,9 @@ const MrdTable = class {
|
|
|
4369
4606
|
var _a, _b, _c;
|
|
4370
4607
|
this.applyDefaultSort((_c = (_b = (_a = this.item) === null || _a === void 0 ? void 0 : _a.view) === null || _b === void 0 ? void 0 : _b.defaultSort) !== null && _c !== void 0 ? _c : '');
|
|
4371
4608
|
}
|
|
4609
|
+
componentDidLoad() {
|
|
4610
|
+
this.staleCheckTimer = setInterval(() => this.checkStalePages(), STALE_CHECK_INTERVAL_MS);
|
|
4611
|
+
}
|
|
4372
4612
|
// ── Helpers ────────────────────────────────────────────────────────────────
|
|
4373
4613
|
applyDefaultSort(defaultSort) {
|
|
4374
4614
|
const { field, dir } = parseDefaultSort(defaultSort);
|
|
@@ -4389,6 +4629,9 @@ const MrdTable = class {
|
|
|
4389
4629
|
this.pendingPages.clear();
|
|
4390
4630
|
this.loadedPages = new Map();
|
|
4391
4631
|
this.requestedPages = new Set();
|
|
4632
|
+
this.failedPages = new Set();
|
|
4633
|
+
this.requestedAt.clear();
|
|
4634
|
+
this.retryAttempts.clear();
|
|
4392
4635
|
this.colWidths = [];
|
|
4393
4636
|
this.colWidthMeasureScheduled = false;
|
|
4394
4637
|
this.scrollTop = 0;
|
|
@@ -4404,7 +4647,7 @@ const MrdTable = class {
|
|
|
4404
4647
|
this.aggregationsPending = true;
|
|
4405
4648
|
this.minKnownTotal = 0;
|
|
4406
4649
|
// Always request page 0 — totalElements may be unknown (0) on first load.
|
|
4407
|
-
this.
|
|
4650
|
+
this.emitLoadPage(0);
|
|
4408
4651
|
this.requestedPages = new Set([0]);
|
|
4409
4652
|
}
|
|
4410
4653
|
/**
|
|
@@ -4435,6 +4678,13 @@ const MrdTable = class {
|
|
|
4435
4678
|
const next = new Map(this.loadedPages);
|
|
4436
4679
|
next.set(pageNumber, rows);
|
|
4437
4680
|
this.loadedPages = next;
|
|
4681
|
+
this.requestedAt.delete(pageNumber);
|
|
4682
|
+
this.retryAttempts.delete(pageNumber);
|
|
4683
|
+
if (this.failedPages.has(pageNumber)) {
|
|
4684
|
+
const nextFailed = new Set(this.failedPages);
|
|
4685
|
+
nextFailed.delete(pageNumber);
|
|
4686
|
+
this.failedPages = nextFailed;
|
|
4687
|
+
}
|
|
4438
4688
|
if (pageNumber === 0 && this.aggregationsPending) {
|
|
4439
4689
|
this.aggregationsPending = false;
|
|
4440
4690
|
const hasAggColumns = this.columns.some(c => c.type === 'FIELD' && c.aggregate);
|
|
@@ -4453,6 +4703,10 @@ const MrdTable = class {
|
|
|
4453
4703
|
}
|
|
4454
4704
|
// ── Lifecycle ──────────────────────────────────────────────────────────────
|
|
4455
4705
|
disconnectedCallback() {
|
|
4706
|
+
if (this.staleCheckTimer !== null) {
|
|
4707
|
+
clearInterval(this.staleCheckTimer);
|
|
4708
|
+
this.staleCheckTimer = null;
|
|
4709
|
+
}
|
|
4456
4710
|
if (this.outsideClickHandler) {
|
|
4457
4711
|
document.removeEventListener('click', this.outsideClickHandler);
|
|
4458
4712
|
this.outsideClickHandler = null;
|
|
@@ -4654,6 +4908,9 @@ const MrdTable = class {
|
|
|
4654
4908
|
this.pendingPages.clear();
|
|
4655
4909
|
this.loadedPages = new Map();
|
|
4656
4910
|
this.requestedPages = new Set();
|
|
4911
|
+
this.failedPages = new Set();
|
|
4912
|
+
this.requestedAt.clear();
|
|
4913
|
+
this.retryAttempts.clear();
|
|
4657
4914
|
this.colWidths = [];
|
|
4658
4915
|
this.colWidthMeasureScheduled = false;
|
|
4659
4916
|
this.scrollTop = 0;
|
|
@@ -4684,6 +4941,11 @@ const MrdTable = class {
|
|
|
4684
4941
|
this.resetPages();
|
|
4685
4942
|
this.emitPagesForWindow(this.renderStart, this.renderEnd);
|
|
4686
4943
|
}
|
|
4944
|
+
/** Emits mrdLoadPage for a page and records the request timestamp for stale-request detection. */
|
|
4945
|
+
emitLoadPage(page) {
|
|
4946
|
+
this.mrdLoadPage.emit({ page, sort: this.sortParam(), path: this.buildDataPath(), qs: this.buildQueryParams(page) });
|
|
4947
|
+
this.requestedAt.set(page, Date.now());
|
|
4948
|
+
}
|
|
4687
4949
|
emitPagesForWindow(start, end) {
|
|
4688
4950
|
const { firstPage, lastPage } = pageRange(start, end, this.pageSize);
|
|
4689
4951
|
const next = new Set(this.requestedPages);
|
|
@@ -4691,7 +4953,7 @@ const MrdTable = class {
|
|
|
4691
4953
|
for (let p = firstPage; p <= lastPage; p++) {
|
|
4692
4954
|
if (!this.loadedPages.has(p) && !next.has(p)) {
|
|
4693
4955
|
next.add(p);
|
|
4694
|
-
this.
|
|
4956
|
+
this.emitLoadPage(p);
|
|
4695
4957
|
changed = true;
|
|
4696
4958
|
}
|
|
4697
4959
|
}
|
|
@@ -4730,13 +4992,53 @@ const MrdTable = class {
|
|
|
4730
4992
|
if (pageEnd < this.renderStart || pageStart > this.renderEnd)
|
|
4731
4993
|
continue;
|
|
4732
4994
|
next.add(page);
|
|
4733
|
-
this.
|
|
4995
|
+
this.emitLoadPage(page);
|
|
4734
4996
|
changed = true;
|
|
4735
4997
|
}
|
|
4736
4998
|
this.pendingPages.clear();
|
|
4737
4999
|
if (changed)
|
|
4738
5000
|
this.requestedPages = next;
|
|
4739
5001
|
}
|
|
5002
|
+
/** Scans outstanding requests for staleness: retries up to MAX_RETRY_ATTEMPTS times,
|
|
5003
|
+
* then gives up and marks the page as failed (rendered as a retry row). */
|
|
5004
|
+
checkStalePages() {
|
|
5005
|
+
var _a;
|
|
5006
|
+
if (this.requestedAt.size === 0)
|
|
5007
|
+
return;
|
|
5008
|
+
const stale = getStalePages(this.requestedAt, Date.now(), this.requestTimeoutMs)
|
|
5009
|
+
.filter(p => !this.loadedPages.has(p));
|
|
5010
|
+
if (stale.length === 0)
|
|
5011
|
+
return;
|
|
5012
|
+
let nextFailed = null;
|
|
5013
|
+
for (const page of stale) {
|
|
5014
|
+
const attempts = (_a = this.retryAttempts.get(page)) !== null && _a !== void 0 ? _a : 0;
|
|
5015
|
+
if (attempts < MAX_RETRY_ATTEMPTS) {
|
|
5016
|
+
this.retryAttempts.set(page, attempts + 1);
|
|
5017
|
+
this.emitLoadPage(page);
|
|
5018
|
+
}
|
|
5019
|
+
else {
|
|
5020
|
+
this.requestedAt.delete(page);
|
|
5021
|
+
this.retryAttempts.delete(page);
|
|
5022
|
+
if (!nextFailed)
|
|
5023
|
+
nextFailed = new Set(this.failedPages);
|
|
5024
|
+
nextFailed.add(page);
|
|
5025
|
+
this.mrdPageError.emit({ page });
|
|
5026
|
+
}
|
|
5027
|
+
}
|
|
5028
|
+
if (nextFailed)
|
|
5029
|
+
this.failedPages = nextFailed;
|
|
5030
|
+
}
|
|
5031
|
+
/** Manually retry a page the user gave up on (clicked the retry row). */
|
|
5032
|
+
retryPage(page) {
|
|
5033
|
+
const next = new Set(this.failedPages);
|
|
5034
|
+
next.delete(page);
|
|
5035
|
+
this.failedPages = next;
|
|
5036
|
+
this.retryAttempts.delete(page);
|
|
5037
|
+
this.emitLoadPage(page);
|
|
5038
|
+
const requested = new Set(this.requestedPages);
|
|
5039
|
+
requested.add(page);
|
|
5040
|
+
this.requestedPages = requested;
|
|
5041
|
+
}
|
|
4740
5042
|
// ── Filter helpers ─────────────────────────────────────────────────────────
|
|
4741
5043
|
handleFilterToggle() {
|
|
4742
5044
|
this.filterMode = !this.filterMode;
|
|
@@ -5009,7 +5311,13 @@ const MrdTable = class {
|
|
|
5009
5311
|
for (let i = this.renderStart; i <= clampedEnd; i++) {
|
|
5010
5312
|
const row = this.getRow(i);
|
|
5011
5313
|
if (row === null) {
|
|
5012
|
-
|
|
5314
|
+
const page = Math.floor(i / this.pageSize);
|
|
5315
|
+
if (this.failedPages.has(page)) {
|
|
5316
|
+
renderedRows.push(index.h("tr", { class: "mrd-table__row mrd-table__row--failed" }, index.h("td", { class: "mrd-table__cell--failed", colSpan: colCount }, index.h("button", { type: "button", class: "mrd-table__retry-button", onClick: () => this.retryPage(page) }, t('load_failed_retry', this.locale)))));
|
|
5317
|
+
}
|
|
5318
|
+
else {
|
|
5319
|
+
renderedRows.push(index.h("tr", { class: "mrd-table__row mrd-table__row--loading" }, index.h("td", { class: "mrd-table__cell--placeholder", colSpan: colCount }, index.h("span", { class: "mrd-table__placeholder-bar" }))));
|
|
5320
|
+
}
|
|
5013
5321
|
}
|
|
5014
5322
|
else {
|
|
5015
5323
|
renderedRows.push(index.h("tr", { class: "mrd-table__row mrd-table__row--clickable", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }, onClick: () => this.mrdRowClick.emit(row) }, this.columns.map(col => this.renderCell(col, row))));
|
|
@@ -5074,7 +5382,7 @@ const MrdTextField = class {
|
|
|
5074
5382
|
};
|
|
5075
5383
|
}
|
|
5076
5384
|
render() {
|
|
5077
|
-
return (index.h(index.Host, { key: '
|
|
5385
|
+
return (index.h(index.Host, { key: 'd2a6fb5735a3a01887cc467274a0ff9d71312124' }, index.h("div", { key: '7864bf852d43f93ebd0120a3ec1b72e54837d1ba', class: "mrd-text-field" }, index.h(FieldLabel, { key: 'bdad112197b44a643a58dd79c4648e284311199d', base: "mrd-text-field", label: this.label, required: this.required }), index.h("input", { key: '1d3e1cf3374ea2e5a83794b5110205964fff86e1', 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 }), index.h(FieldError, { key: 'bb4ec51de7b6d360fdb3d46dd53e85a5d497bcce', base: "mrd-text-field", error: this.error }))));
|
|
5078
5386
|
}
|
|
5079
5387
|
};
|
|
5080
5388
|
MrdTextField.style = mrdTextFieldCss();
|
|
@@ -5143,7 +5451,7 @@ const MrdTextareaField = class {
|
|
|
5143
5451
|
}
|
|
5144
5452
|
}
|
|
5145
5453
|
render() {
|
|
5146
|
-
return (index.h(index.Host, { key: '
|
|
5454
|
+
return (index.h(index.Host, { key: 'de39890fc23146b880e69be7a8f04c91786ae9c9' }, index.h("div", { key: '0ccc855f3ee44553559a9ea8a70690466789f76d', class: "mrd-textarea-field" }, index.h(FieldLabel, { key: '2a16dcbeedbba8b5d8d1e8e8c0f021f14813f609', base: "mrd-textarea-field", label: this.label, required: this.required }), index.h("div", { key: '979ecb0ed163e3f753d75635452eea49d76edf29', class: controlClass('mrd-textarea-field', !!this.error, 'container') }, index.h("div", { key: '8ea96a080086b68df55017a1464f6bce502f9a58', class: "mrd-textarea-field__editor" })), index.h(FieldError, { key: 'd6ac1a12f7be3594ed8cdb6d94b304c46dc8285b', base: "mrd-textarea-field", error: this.error }))));
|
|
5147
5455
|
}
|
|
5148
5456
|
get el() { return index.getElement(this); }
|
|
5149
5457
|
};
|
|
@@ -5174,7 +5482,7 @@ const MrdTimeField = class {
|
|
|
5174
5482
|
};
|
|
5175
5483
|
}
|
|
5176
5484
|
render() {
|
|
5177
|
-
return (index.h(index.Host, { key: '
|
|
5485
|
+
return (index.h(index.Host, { key: '588e298c4f52aa4e65d87bfdc6918282ed97b3ae' }, index.h("div", { key: 'eed7332ca78747d4ff8b6c8d06ad4674e1c37e69', class: "mrd-time-field" }, index.h(FieldLabel, { key: '6383beb79fd05dabdc408256e3326f9637e4c993', base: "mrd-time-field", label: this.label, required: this.required }), index.h("input", { key: 'b372d8b5dd523ee6182fe302450ce904ac17cc3c', 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 }), index.h(FieldError, { key: '7d8ce1e557bf583c0409e8f02893a15fadeab634', base: "mrd-time-field", error: this.error }))));
|
|
5178
5486
|
}
|
|
5179
5487
|
};
|
|
5180
5488
|
MrdTimeField.style = mrdTimeFieldCss();
|
|
@@ -5189,6 +5497,7 @@ exports.mrd_document_view = MrdDocumentView;
|
|
|
5189
5497
|
exports.mrd_email_field = MrdEmailField;
|
|
5190
5498
|
exports.mrd_field = MrdField;
|
|
5191
5499
|
exports.mrd_file_field = MrdFileField;
|
|
5500
|
+
exports.mrd_file_preview = MrdFilePreview;
|
|
5192
5501
|
exports.mrd_form = MrdForm;
|
|
5193
5502
|
exports.mrd_hyperlink_field = MrdHyperlinkField;
|
|
5194
5503
|
exports.mrd_image_field = MrdImageField;
|