@mmlogic/components 0.5.3 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/cjs/{cell-renderer-7KX9Qbml.js → cell-renderer-Mx3pwONr.js} +261 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/mosterdcomponents.cjs.js +1 -1
  4. package/dist/cjs/mrd-boolean-field_25.cjs.entry.js +391 -77
  5. package/dist/cjs/mrd-merge-view.cjs.entry.js +3 -3
  6. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.css +3 -0
  7. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js +23 -3
  8. package/dist/collection/components/documents/mrd-document-list/mrd-document-list.js +76 -2
  9. package/dist/collection/components/fields/mrd-currency-field/mrd-currency-field.js +56 -5
  10. package/dist/collection/components/fields/mrd-date-field/mrd-date-field.css +55 -4
  11. package/dist/collection/components/fields/mrd-date-field/mrd-date-field.js +118 -8
  12. package/dist/collection/components/fields/mrd-datetime-field/mrd-datetime-field.css +55 -4
  13. package/dist/collection/components/fields/mrd-datetime-field/mrd-datetime-field.js +117 -15
  14. package/dist/collection/components/fields/mrd-email-field/mrd-email-field.js +1 -1
  15. package/dist/collection/components/fields/mrd-file-field/mrd-file-field.js +1 -1
  16. package/dist/collection/components/fields/mrd-image-field/mrd-image-field.js +1 -1
  17. package/dist/collection/components/fields/mrd-longtext-field/mrd-longtext-field.js +1 -1
  18. package/dist/collection/components/fields/mrd-number-field/mrd-number-field.js +33 -8
  19. package/dist/collection/components/fields/mrd-relation-field/mrd-relation-field.js +13 -3
  20. package/dist/collection/components/fields/mrd-secret-field/mrd-secret-field.js +2 -2
  21. package/dist/collection/components/fields/mrd-text-field/mrd-text-field.js +1 -1
  22. package/dist/collection/components/fields/mrd-textarea-field/mrd-textarea-field.js +1 -1
  23. package/dist/collection/components/fields/mrd-time-field/mrd-time-field.js +1 -1
  24. package/dist/collection/components/form/mrd-field/mrd-field.js +11 -11
  25. package/dist/collection/components/form/mrd-form/mrd-form.js +8 -4
  26. package/dist/collection/components/invoice/mrd-invoice-view/mrd-invoice-view.js +1 -1
  27. package/dist/collection/components/layout/mrd-layout-section/field-value.js +4 -2
  28. package/dist/collection/components/layout/mrd-layout-section/layout-helpers.js +6 -0
  29. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.css +4 -0
  30. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +8 -8
  31. package/dist/collection/components/merge/mrd-merge-view/mrd-merge-view.js +2 -2
  32. package/dist/collection/dev/app.js +58 -13
  33. package/dist/collection/dev/example-data.js +6 -1
  34. package/dist/collection/utils/format.js +160 -0
  35. package/dist/collection/utils/i18n.js +96 -0
  36. package/dist/components/cell-renderer.js +1 -1
  37. package/dist/components/format.js +1 -1
  38. package/dist/components/i18n.js +1 -1
  39. package/dist/components/mrd-currency-field2.js +1 -1
  40. package/dist/components/mrd-date-field2.js +1 -1
  41. package/dist/components/mrd-datetime-field2.js +1 -1
  42. package/dist/components/mrd-document-container2.js +1 -1
  43. package/dist/components/mrd-document-list2.js +1 -1
  44. package/dist/components/mrd-document-view2.js +1 -1
  45. package/dist/components/mrd-email-field2.js +1 -1
  46. package/dist/components/mrd-email-view2.js +1 -1
  47. package/dist/components/mrd-field2.js +1 -1
  48. package/dist/components/mrd-file-field2.js +1 -1
  49. package/dist/components/mrd-form.js +1 -1
  50. package/dist/components/mrd-image-field2.js +1 -1
  51. package/dist/components/mrd-invoice-view2.js +1 -1
  52. package/dist/components/mrd-layout-section.js +1 -1
  53. package/dist/components/mrd-longtext-field2.js +1 -1
  54. package/dist/components/mrd-merge-view.js +1 -1
  55. package/dist/components/mrd-number-field2.js +1 -1
  56. package/dist/components/mrd-relation-field2.js +1 -1
  57. package/dist/components/mrd-secret-field2.js +1 -1
  58. package/dist/components/mrd-table2.js +1 -1
  59. package/dist/components/mrd-text-field2.js +1 -1
  60. package/dist/components/mrd-textarea-field2.js +1 -1
  61. package/dist/components/mrd-time-field2.js +1 -1
  62. package/dist/esm/{cell-renderer-DIsNX9D7.js → cell-renderer-UQOYlDv7.js} +257 -1
  63. package/dist/esm/loader.js +1 -1
  64. package/dist/esm/mosterdcomponents.js +1 -1
  65. package/dist/esm/mrd-boolean-field_25.entry.js +391 -77
  66. package/dist/esm/mrd-merge-view.entry.js +3 -3
  67. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  68. package/dist/mosterdcomponents/p-8cc374e0.entry.js +3 -0
  69. package/dist/mosterdcomponents/p-CF--ScWr.js +1 -0
  70. package/dist/mosterdcomponents/{p-4e061416.entry.js → p-d31b71d9.entry.js} +1 -1
  71. package/dist/types/components/documents/mrd-document-container/mrd-document-container.d.ts +7 -0
  72. package/dist/types/components/documents/mrd-document-list/mrd-document-list.d.ts +17 -0
  73. package/dist/types/components/fields/mrd-currency-field/mrd-currency-field.d.ts +13 -0
  74. package/dist/types/components/fields/mrd-date-field/mrd-date-field.d.ts +22 -1
  75. package/dist/types/components/fields/mrd-datetime-field/mrd-datetime-field.d.ts +21 -2
  76. package/dist/types/components/fields/mrd-number-field/mrd-number-field.d.ts +6 -0
  77. package/dist/types/components/fields/mrd-relation-field/mrd-relation-field.d.ts +7 -0
  78. package/dist/types/components/form/mrd-form/mrd-form.d.ts +3 -2
  79. package/dist/types/components/layout/mrd-layout-section/layout-helpers.d.ts +3 -0
  80. package/dist/types/components.d.ts +35 -0
  81. package/dist/types/types/client-layout.d.ts +7 -0
  82. package/dist/types/utils/format.d.ts +34 -0
  83. package/package.json +1 -1
  84. package/dist/mosterdcomponents/p-910ebfee.entry.js +0 -3
  85. package/dist/mosterdcomponents/p-Ce2QDq0t.js +0 -1
@@ -0,0 +1 @@
1
+ import{a as e}from"./p-Bc42CfJB.js";function i(e,i,t){return null==e||isNaN(e)?"":new Intl.NumberFormat(i,t).format(e)}function t(e,i,t){return null==e||isNaN(e)?"":new Intl.NumberFormat(t,{style:"currency",currency:i,minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}function r(e,i,t=2){return null==e||isNaN(e)?"":new Intl.NumberFormat(i,{style:"percent",minimumFractionDigits:t,maximumFractionDigits:t}).format(e)}function a(e,i){if(!e)return"";const t="string"==typeof e?new Date(e):e;return isNaN(t.getTime())?"":new Intl.DateTimeFormat(i,{year:"numeric",month:"2-digit",day:"2-digit"}).format(t)}function l(e,i){if(!e)return"";const t="string"==typeof e?new Date(e):e;return isNaN(t.getTime())?"":new Intl.DateTimeFormat(i,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(t)}const n=new Date(2026,11,31,13,45,0);function o(e,i){const t={year:"numeric",month:"2-digit",day:"2-digit"};return i&&(t.hour="2-digit",t.minute="2-digit"),new Intl.DateTimeFormat(e,t).formatToParts(n)}function _(e){return e.replace(/[٠-٩۰-۹]/g,(e=>{const i=e.charCodeAt(0);return String(i>=1776?i-1776:i-1632)}))}function c(e,i=2){return String(e).padStart(i,"0")}function d(e,i,t){return!(e<1||i<1||i>12||t<1)&&t<=new Date(e,i,0).getDate()}function s(e,i){return o(e,!(!i.hour||!i.minute)).map((e=>{var t,r;switch(e.type){case"day":return i.day;case"month":return i.month;case"year":return i.year;case"hour":return null!==(t=i.hour)&&void 0!==t?t:"";case"minute":return null!==(r=i.minute)&&void 0!==r?r:"";case"dayPeriod":return"AM";case"literal":return e.value;default:return""}})).join("").trim()}function u(e,i){const t=function(e){const i=o(e,!1).filter((e=>"day"===e.type||"month"===e.type||"year"===e.type)).map((e=>e.type));return 3===i.length?i:["day","month","year"]}(i),r={};t.forEach(((i,t)=>r[i]=e[t]));const a=(l=Number(r.year),r.year.length>2?l:l<70?2e3+l:1900+l);var l;const n=Number(r.month),_=Number(r.day);return d(a,n,_)?{year:a,month:n,day:_}:null}function m(e,i){const t=_(String(null!=e?e:"")).trim();if(!t)return null;const r=t.match(/\d+/g);if(!r||r.length<3)return null;const a=/^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(t),l=a?d(+a[1],+a[2],+a[3])?{year:+a[1],month:+a[2],day:+a[3]}:null:u(r.slice(0,3),i);return l?`${c(l.year,4)}-${c(l.month)}-${c(l.day)}`:null}function f(e,i){const t=_(String(null!=e?e:"")).trim();if(!t)return null;const r=t.match(/\d+/g);if(!r||r.length<3)return null;const a=/^(\d{4})-(\d{1,2})-(\d{1,2})(?:[T ]|$)/.exec(t),l=a?d(+a[1],+a[2],+a[3])?{year:+a[1],month:+a[2],day:+a[3]}:null:u(r.slice(0,3),i);if(!l)return null;let n=r.length>3?Number(r[3]):0;const o=r.length>4?Number(r[4]):0,s=t.toLowerCase(),{am:m,pm:f}=function(e){const i=i=>{var t,r;return null!==(r=null===(t=new Intl.DateTimeFormat(e,{hour:"numeric",hour12:!0}).formatToParts(new Date(2026,0,1,i)).find((e=>"dayPeriod"===e.type)))||void 0===t?void 0:t.value)&&void 0!==r?r:""};return{am:i(9),pm:i(21)}}(i);return(/p\.?\s?m\.?/.test(s)||!!f&&s.includes(f.toLowerCase()))&&n<12&&(n+=12),(/a\.?\s?m\.?/.test(s)||!!m&&s.includes(m.toLowerCase()))&&12===n&&(n=0),n>23||o>59?null:`${c(l.year,4)}-${c(l.month)}-${c(l.day)}T${c(n)}:${c(o)}`}function g(e,i){const t=/^(\d{4})-(\d{2})-(\d{2})/.exec(String(null!=e?e:""));return t?a(new Date(+t[1],+t[2]-1,+t[3]),i):""}function h(e,i){const t=/^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/.exec(String(null!=e?e:""));return t?l(new Date(+t[1],+t[2]-1,+t[3],+t[4],+t[5]),i):""}function v(e,i){var t,r,a,l;if(!e||!e.trim())return null;const n=new Intl.NumberFormat(i).formatToParts(1234567.89),o=null!==(r=null===(t=n.find((e=>"group"===e.type)))||void 0===t?void 0:t.value)&&void 0!==r?r:",",_=null!==(l=null===(a=n.find((e=>"decimal"===e.type)))||void 0===a?void 0:a.value)&&void 0!==l?l:".",c=e.replace(new RegExp(`\\${o}`,"g"),"").replace(new RegExp(`\\${_}`),".").replace("%","").trim(),d=parseFloat(c);return isNaN(d)?null:d}const p={nl:{required:"Dit veld is verplicht",select_placeholder:"Selecteer een optie",search_placeholder:"Zoeken...",upload_file:"Bestand uploaden",choose_file:"Bestand kiezen",clear:"Wissen",today:"Vandaag",invalid_email:"Voer een geldig e-mailadres in",invalid_url:"Voer een geldige URL in",invalid_number:"Voer een geldig getal in",invalid_date:"Voer een geldige datum in",invalid_datetime:"Voer een geldige datum en tijd in",date_token_day:"dd",date_token_month:"mm",date_token_year:"jjjj",time_token_hour:"uu",time_token_minute:"mm",open_calendar:"Kalender openen",drop_file_here:"Sleep bestand hierheen of",browse:"bladeren",file_too_large:"Bestand is te groot",invalid_image:"Selecteer een afbeeldingsbestand",search_results:"Zoekresultaten",no_results:"Geen resultaten gevonden",load_failed_retry:"Laden mislukt — opnieuw proberen",loading:"Laden...",submit:"Opslaan",cancel:"Annuleren",remove:"Verwijderen",add:"Toevoegen",yes:"Ja",no:"Nee",table_of:"van",download:"Downloaden",value_empty:"—",table_filter:"Filteren",table_filter_hide:"Filter verbergen",table_filter_active:"actief",table_filter_clear_all:"Alle filters wissen",table_new_record:"Nieuw record",table_export_excel:"Exporteer naar Excel",doc_view_switch:"Weergave wisselen",doc_view_tree:"Boomweergave",doc_upload:"Uploaden",doc_upload_to:"Uploaden naar",doc_view_list:"Lijstweergave",filter_sorting:"Sortering",filter_ascending:"Oplopend",filter_descending:"Aflopend",filter_section:"Filter",filter_apply:"Toepassen",filter_clear:"Wissen",filter_contains:"Bevat",filter_starts_with:"Begint met",filter_equals:"Gelijk aan",filter_has_value:"Heeft waarde",filter_is_empty:"Is leeg",filter_is_not_empty:"Is niet leeg",filter_exact:"Exact",filter_range:"Bereik",filter_from:"Van",filter_to:"Tot",filter_all:"Alle",filter_select_all:"Alles",filter_select_none:"Geen",filter_search_value:"Zoekwaarde...",filter_no_support:"Geen filtering beschikbaar voor dit veldtype.",textblock_show_more:"Meer tonen",close:"Sluiten",history_until:"tot",history_badge_tooltip:"Vorige waarden",hyperlink_name:"Linktekst (optioneel)",new_folder:"Nieuwe folder",folder_name_placeholder:"Foldernaam",folder_no_slash:"Een foldernaam mag geen '/' bevatten",folder_duplicate:"Er bestaat al een folder met deze naam",doc_empty_drop:"Nog geen documenten — sleep bestanden hierheen",merge_search_hint:"Zoek het duplicaat waarmee je wilt samenvoegen",merge_select:"Selecteer",merge_compare_heading:"Los conflicten op",merge_column_a:"Huidig (blijft behouden)",merge_column_b:"Kandidaat (wordt verwijderd)",merge_auto_heading:"Deze velden worden automatisch overgenomen van de kandidaat:",merge_no_conflicts:"Geen conflicterende velden gevonden",merge_continue:"Doorgaan",merge_back:"Terug",merge_confirm_heading:"Bevestig samenvoegen",merge_confirm_warning:"Dit kan niet ongedaan worden gemaakt: de kandidaat wordt definitief verwijderd.",merge_confirm_button:"Samenvoegen bevestigen",invoice_title:"Factuur",invoice_date:"Factuurdatum",invoice_due_date:"Vervaldatum",invoice_subtotal:"Subtotaal",invoice_tax:"BTW",invoice_total:"Totaal",invoice_customer:"Klant",invoice_supplier:"Leverancier",email_from:"Van",email_to:"Aan",email_cc:"Cc",email_date:"Datum",email_show_headers:"Toon technische headers"},en:{required:"This field is required",select_placeholder:"Select an option",search_placeholder:"Search...",upload_file:"Upload file",choose_file:"Choose file",clear:"Clear",today:"Today",invalid_email:"Please enter a valid email address",invalid_url:"Please enter a valid URL",invalid_number:"Please enter a valid number",invalid_date:"Please enter a valid date",invalid_datetime:"Please enter a valid date and time",date_token_day:"dd",date_token_month:"mm",date_token_year:"yyyy",time_token_hour:"hh",time_token_minute:"mm",open_calendar:"Open calendar",drop_file_here:"Drop file here or",browse:"browse",file_too_large:"File is too large",invalid_image:"Please select an image file",search_results:"Search results",no_results:"No results found",load_failed_retry:"Failed to load — retry",loading:"Loading...",submit:"Save",cancel:"Cancel",remove:"Remove",add:"Add",yes:"Yes",no:"No",table_of:"of",download:"Download",value_empty:"—",table_filter:"Filter",table_filter_hide:"Hide filter",table_filter_active:"active",table_filter_clear_all:"Clear all filters",table_new_record:"New record",table_export_excel:"Export to Excel",doc_view_switch:"Switch view",doc_view_tree:"Tree view",doc_upload:"Upload",doc_upload_to:"Upload to",doc_view_list:"List view",filter_sorting:"Sorting",filter_ascending:"Ascending",filter_descending:"Descending",filter_section:"Filter",filter_apply:"Apply",filter_clear:"Clear",filter_contains:"Contains",filter_starts_with:"Starts with",filter_equals:"Equals",filter_has_value:"Has value",filter_is_empty:"Is empty",filter_is_not_empty:"Is not empty",filter_exact:"Exact",filter_range:"Range",filter_from:"From",filter_to:"To",filter_all:"All",filter_select_all:"All",filter_select_none:"None",filter_search_value:"Search value...",filter_no_support:"Filtering is not available for this field type.",textblock_show_more:"Show more",close:"Close",history_until:"until",history_badge_tooltip:"Previous values",hyperlink_name:"Link text (optional)",new_folder:"New folder",folder_name_placeholder:"Folder name",folder_no_slash:"A folder name cannot contain '/'",folder_duplicate:"A folder with this name already exists",doc_empty_drop:"No documents yet — drop files here",merge_search_hint:"Search for the duplicate to merge with",merge_select:"Select",merge_compare_heading:"Resolve conflicts",merge_column_a:"Current (kept)",merge_column_b:"Candidate (will be deleted)",merge_auto_heading:"These fields will be taken from the candidate automatically:",merge_no_conflicts:"No conflicting fields found",merge_continue:"Continue",merge_back:"Back",merge_confirm_heading:"Confirm merge",merge_confirm_warning:"This cannot be undone: the candidate will be permanently deleted.",merge_confirm_button:"Confirm merge",invoice_title:"Invoice",invoice_date:"Invoice date",invoice_due_date:"Due date",invoice_subtotal:"Subtotal",invoice_tax:"Tax",invoice_total:"Total",invoice_customer:"Customer",invoice_supplier:"Supplier",email_from:"From",email_to:"To",email_cc:"Cc",email_date:"Date",email_show_headers:"Show technical headers"},ar:{required:"هذا الحقل مطلوب",select_placeholder:"اختر خياراً",search_placeholder:"بحث...",upload_file:"رفع ملف",choose_file:"اختر ملفاً",clear:"مسح",today:"اليوم",invalid_email:"يرجى إدخال عنوان بريد إلكتروني صحيح",invalid_url:"يرجى إدخال رابط صحيح",invalid_number:"يرجى إدخال رقم صحيح",invalid_date:"يرجى إدخال تاريخ صحيح",invalid_datetime:"يرجى إدخال تاريخ ووقت صحيحين",date_token_day:"يوم",date_token_month:"شهر",date_token_year:"سنة",time_token_hour:"ساعة",time_token_minute:"دقيقة",open_calendar:"فتح التقويم",drop_file_here:"اسحب الملف هنا أو",browse:"تصفح",file_too_large:"الملف كبير جداً",invalid_image:"يرجى اختيار ملف صورة",search_results:"نتائج البحث",no_results:"لم يتم العثور على نتائج",load_failed_retry:"فشل التحميل — إعادة المحاولة",loading:"جار التحميل...",submit:"حفظ",cancel:"إلغاء",remove:"إزالة",add:"إضافة",yes:"نعم",no:"لا",table_of:"من أصل",download:"تنزيل",value_empty:"—",table_filter:"تصفية",table_filter_hide:"إخفاء التصفية",table_filter_active:"نشط",table_filter_clear_all:"مسح جميع الفلاتر",table_new_record:"سجل جديد",table_export_excel:"تصدير إلى Excel",doc_view_switch:"تبديل العرض",doc_view_tree:"عرض شجري",doc_upload:"رفع",doc_upload_to:"رفع إلى",doc_view_list:"عرض القائمة",filter_sorting:"الترتيب",filter_ascending:"تصاعدي",filter_descending:"تنازلي",filter_section:"تصفية",filter_apply:"تطبيق",filter_clear:"مسح",filter_contains:"يحتوي على",filter_starts_with:"يبدأ بـ",filter_equals:"يساوي",filter_has_value:"له قيمة",filter_is_empty:"فارغ",filter_is_not_empty:"ليس فارغاً",filter_exact:"دقيق",filter_range:"نطاق",filter_from:"من",filter_to:"إلى",filter_all:"الكل",filter_select_all:"الكل",filter_select_none:"لا شيء",filter_search_value:"قيمة البحث...",filter_no_support:"التصفية غير متاحة لهذا النوع من الحقول.",textblock_show_more:"عرض المزيد",close:"إغلاق",history_until:"حتى",history_badge_tooltip:"القيم السابقة",hyperlink_name:"نص الرابط (اختياري)",merge_search_hint:"ابحث عن السجل المكرر للدمج معه",merge_select:"اختر",merge_compare_heading:"حل التعارضات",merge_column_a:"الحالي (سيتم الاحتفاظ به)",merge_column_b:"المرشح (سيتم حذفه)",merge_auto_heading:"سيتم أخذ هذه الحقول من المرشح تلقائياً:",merge_no_conflicts:"لم يتم العثور على حقول متعارضة",merge_continue:"متابعة",merge_back:"رجوع",merge_confirm_heading:"تأكيد الدمج",merge_confirm_warning:"لا يمكن التراجع عن هذا الإجراء: سيتم حذف المرشح نهائياً.",merge_confirm_button:"تأكيد الدمج",invoice_title:"فاتورة",invoice_date:"تاريخ الفاتورة",invoice_due_date:"تاريخ الاستحقاق",invoice_subtotal:"المجموع الفرعي",invoice_tax:"الضريبة",invoice_total:"الإجمالي",invoice_customer:"العميل",invoice_supplier:"المورد",email_from:"من",email_to:"إلى",email_cc:"نسخة",email_date:"التاريخ",email_show_headers:"إظهار الترويسات التقنية"},fr:{required:"Ce champ est obligatoire",select_placeholder:"Sélectionner une option",search_placeholder:"Rechercher...",upload_file:"Télécharger un fichier",choose_file:"Choisir un fichier",clear:"Effacer",today:"Aujourd'hui",invalid_email:"Veuillez saisir une adresse e-mail valide",invalid_url:"Veuillez saisir une URL valide",invalid_number:"Veuillez saisir un nombre valide",invalid_date:"Veuillez saisir une date valide",invalid_datetime:"Veuillez saisir une date et une heure valides",date_token_day:"jj",date_token_month:"mm",date_token_year:"aaaa",time_token_hour:"hh",time_token_minute:"mm",open_calendar:"Ouvrir le calendrier",drop_file_here:"Déposez le fichier ici ou",browse:"parcourir",file_too_large:"Le fichier est trop volumineux",invalid_image:"Veuillez sélectionner un fichier image",search_results:"Résultats de recherche",no_results:"Aucun résultat trouvé",load_failed_retry:"Échec du chargement — réessayer",loading:"Chargement...",submit:"Enregistrer",cancel:"Annuler",remove:"Supprimer",add:"Ajouter",yes:"Oui",no:"Non",table_of:"sur",download:"Télécharger",value_empty:"—",table_filter:"Filtrer",table_filter_hide:"Masquer le filtre",table_filter_active:"actif",table_filter_clear_all:"Effacer tous les filtres",table_new_record:"Nouvel enregistrement",table_export_excel:"Exporter vers Excel",doc_view_switch:"Changer de vue",doc_view_tree:"Vue arborescente",doc_upload:"Téléverser",doc_upload_to:"Téléverser vers",doc_view_list:"Vue liste",filter_sorting:"Tri",filter_ascending:"Croissant",filter_descending:"Décroissant",filter_section:"Filtre",filter_apply:"Appliquer",filter_clear:"Effacer",filter_contains:"Contient",filter_starts_with:"Commence par",filter_equals:"Égal à",filter_has_value:"A une valeur",filter_is_empty:"Est vide",filter_is_not_empty:"N'est pas vide",filter_exact:"Exact",filter_range:"Plage",filter_from:"De",filter_to:"À",filter_all:"Tous",filter_select_all:"Tous",filter_select_none:"Aucun",filter_search_value:"Valeur de recherche...",filter_no_support:"Le filtrage n'est pas disponible pour ce type de champ.",textblock_show_more:"Voir plus",close:"Fermer",history_until:"jusqu'au",history_badge_tooltip:"Valeurs précédentes",hyperlink_name:"Texte du lien (optionnel)",merge_search_hint:"Rechercher le doublon à fusionner",merge_select:"Sélectionner",merge_compare_heading:"Résoudre les conflits",merge_column_a:"Actuel (conservé)",merge_column_b:"Candidat (sera supprimé)",merge_auto_heading:"Ces champs seront repris automatiquement du candidat :",merge_no_conflicts:"Aucun champ en conflit trouvé",merge_continue:"Continuer",merge_back:"Retour",merge_confirm_heading:"Confirmer la fusion",merge_confirm_warning:"Cette action est irréversible : le candidat sera définitivement supprimé.",merge_confirm_button:"Confirmer la fusion",invoice_title:"Facture",invoice_date:"Date de facture",invoice_due_date:"Date d'échéance",invoice_subtotal:"Sous-total",invoice_tax:"TVA",invoice_total:"Total",invoice_customer:"Client",invoice_supplier:"Fournisseur",email_from:"De",email_to:"À",email_cc:"Cc",email_date:"Date",email_show_headers:"Afficher les en-têtes techniques"},de:{required:"Dieses Feld ist erforderlich",select_placeholder:"Option auswählen",search_placeholder:"Suchen...",upload_file:"Datei hochladen",choose_file:"Datei auswählen",clear:"Löschen",today:"Heute",invalid_email:"Bitte geben Sie eine gültige E-Mail-Adresse ein",invalid_url:"Bitte geben Sie eine gültige URL ein",invalid_number:"Bitte geben Sie eine gültige Zahl ein",invalid_date:"Bitte geben Sie ein gültiges Datum ein",invalid_datetime:"Bitte geben Sie ein gültiges Datum und eine gültige Uhrzeit ein",date_token_day:"TT",date_token_month:"MM",date_token_year:"JJJJ",time_token_hour:"hh",time_token_minute:"mm",open_calendar:"Kalender öffnen",drop_file_here:"Datei hier ablegen oder",browse:"durchsuchen",file_too_large:"Datei ist zu groß",invalid_image:"Bitte eine Bilddatei auswählen",search_results:"Suchergebnisse",no_results:"Keine Ergebnisse gefunden",load_failed_retry:"Laden fehlgeschlagen — erneut versuchen",loading:"Laden...",submit:"Speichern",cancel:"Abbrechen",remove:"Entfernen",add:"Hinzufügen",yes:"Ja",no:"Nein",table_of:"von",download:"Herunterladen",value_empty:"—",table_filter:"Filtern",table_filter_hide:"Filter ausblenden",table_filter_active:"aktiv",table_filter_clear_all:"Alle Filter löschen",table_new_record:"Neuer Eintrag",table_export_excel:"Als Excel exportieren",doc_view_switch:"Ansicht wechseln",doc_view_tree:"Baumansicht",doc_upload:"Hochladen",doc_upload_to:"Hochladen nach",doc_view_list:"Listenansicht",filter_sorting:"Sortierung",filter_ascending:"Aufsteigend",filter_descending:"Absteigend",filter_section:"Filter",filter_apply:"Anwenden",filter_clear:"Löschen",filter_contains:"Enthält",filter_starts_with:"Beginnt mit",filter_equals:"Gleich",filter_has_value:"Hat Wert",filter_is_empty:"Ist leer",filter_is_not_empty:"Ist nicht leer",filter_exact:"Genau",filter_range:"Bereich",filter_from:"Von",filter_to:"Bis",filter_all:"Alle",filter_select_all:"Alle",filter_select_none:"Keine",filter_search_value:"Suchwert...",filter_no_support:"Filterung ist für diesen Feldtyp nicht verfügbar.",textblock_show_more:"Mehr anzeigen",close:"Schließen",history_until:"bis",history_badge_tooltip:"Vorherige Werte",hyperlink_name:"Linktext (optional)",merge_search_hint:"Suchen Sie das Duplikat, mit dem zusammengeführt werden soll",merge_select:"Auswählen",merge_compare_heading:"Konflikte lösen",merge_column_a:"Aktuell (bleibt erhalten)",merge_column_b:"Kandidat (wird gelöscht)",merge_auto_heading:"Diese Felder werden automatisch vom Kandidaten übernommen:",merge_no_conflicts:"Keine widersprüchlichen Felder gefunden",merge_continue:"Weiter",merge_back:"Zurück",merge_confirm_heading:"Zusammenführung bestätigen",merge_confirm_warning:"Dies kann nicht rückgängig gemacht werden: der Kandidat wird endgültig gelöscht.",merge_confirm_button:"Zusammenführung bestätigen",invoice_title:"Rechnung",invoice_date:"Rechnungsdatum",invoice_due_date:"Fälligkeitsdatum",invoice_subtotal:"Zwischensumme",invoice_tax:"MwSt.",invoice_total:"Gesamt",invoice_customer:"Kunde",invoice_supplier:"Lieferant",email_from:"Von",email_to:"An",email_cc:"Cc",email_date:"Datum",email_show_headers:"Technische Header anzeigen"},es:{required:"Este campo es obligatorio",select_placeholder:"Seleccionar una opción",search_placeholder:"Buscar...",upload_file:"Subir archivo",choose_file:"Elegir archivo",clear:"Borrar",today:"Hoy",invalid_email:"Por favor, introduzca una dirección de correo electrónico válida",invalid_url:"Por favor, introduzca una URL válida",invalid_number:"Por favor, introduzca un número válido",invalid_date:"Por favor, introduzca una fecha válida",invalid_datetime:"Por favor, introduzca una fecha y hora válidas",date_token_day:"dd",date_token_month:"mm",date_token_year:"aaaa",time_token_hour:"hh",time_token_minute:"mm",open_calendar:"Abrir calendario",drop_file_here:"Suelte el archivo aquí o",browse:"explorar",file_too_large:"El archivo es demasiado grande",invalid_image:"Seleccione un archivo de imagen",search_results:"Resultados de búsqueda",no_results:"No se encontraron resultados",load_failed_retry:"Error al cargar — reintentar",loading:"Cargando...",submit:"Guardar",cancel:"Cancelar",remove:"Eliminar",add:"Añadir",yes:"Sí",no:"No",table_of:"de",download:"Descargar",value_empty:"—",table_filter:"Filtrar",table_filter_hide:"Ocultar filtro",table_filter_active:"activo",table_filter_clear_all:"Borrar todos los filtros",table_new_record:"Nuevo registro",table_export_excel:"Exportar a Excel",doc_view_switch:"Cambiar vista",doc_view_tree:"Vista de árbol",doc_upload:"Subir",doc_upload_to:"Subir a",doc_view_list:"Vista de lista",filter_sorting:"Ordenación",filter_ascending:"Ascendente",filter_descending:"Descendente",filter_section:"Filtro",filter_apply:"Aplicar",filter_clear:"Borrar",filter_contains:"Contiene",filter_starts_with:"Empieza por",filter_equals:"Igual a",filter_has_value:"Tiene valor",filter_is_empty:"Está vacío",filter_is_not_empty:"No está vacío",filter_exact:"Exacto",filter_range:"Rango",filter_from:"Desde",filter_to:"Hasta",filter_all:"Todos",filter_select_all:"Todos",filter_select_none:"Ninguno",filter_search_value:"Valor de búsqueda...",filter_no_support:"El filtrado no está disponible para este tipo de campo.",textblock_show_more:"Mostrar más",close:"Cerrar",history_until:"hasta",history_badge_tooltip:"Valores anteriores",hyperlink_name:"Texto del enlace (opcional)",merge_search_hint:"Busque el duplicado con el que fusionar",merge_select:"Seleccionar",merge_compare_heading:"Resolver conflictos",merge_column_a:"Actual (se conserva)",merge_column_b:"Candidato (se eliminará)",merge_auto_heading:"Estos campos se tomarán automáticamente del candidato:",merge_no_conflicts:"No se encontraron campos en conflicto",merge_continue:"Continuar",merge_back:"Atrás",merge_confirm_heading:"Confirmar fusión",merge_confirm_warning:"Esto no se puede deshacer: el candidato se eliminará permanentemente.",merge_confirm_button:"Confirmar fusión",invoice_title:"Factura",invoice_date:"Fecha de factura",invoice_due_date:"Fecha de vencimiento",invoice_subtotal:"Subtotal",invoice_tax:"Impuesto",invoice_total:"Total",invoice_customer:"Cliente",invoice_supplier:"Proveedor",email_from:"De",email_to:"Para",email_cc:"Cc",email_date:"Fecha",email_show_headers:"Mostrar encabezados técnicos"},it:{required:"Questo campo è obbligatorio",select_placeholder:"Seleziona un'opzione",search_placeholder:"Cerca...",upload_file:"Carica file",choose_file:"Scegli file",clear:"Cancella",today:"Oggi",invalid_email:"Inserisci un indirizzo email valido",invalid_url:"Inserisci un URL valido",invalid_number:"Inserisci un numero valido",invalid_date:"Inserisci una data valida",invalid_datetime:"Inserisci una data e un'ora valide",date_token_day:"gg",date_token_month:"mm",date_token_year:"aaaa",time_token_hour:"hh",time_token_minute:"mm",open_calendar:"Apri calendario",drop_file_here:"Trascina il file qui o",browse:"sfoglia",file_too_large:"Il file è troppo grande",invalid_image:"Seleziona un file immagine",search_results:"Risultati della ricerca",no_results:"Nessun risultato trovato",load_failed_retry:"Caricamento non riuscito — riprova",loading:"Caricamento...",submit:"Salva",cancel:"Annulla",remove:"Rimuovi",add:"Aggiungi",yes:"Sì",no:"No",table_of:"di",download:"Scarica",value_empty:"—",table_filter:"Filtra",table_filter_hide:"Nascondi filtro",table_filter_active:"attivo",table_filter_clear_all:"Cancella tutti i filtri",table_new_record:"Nuovo record",table_export_excel:"Esporta in Excel",doc_view_switch:"Cambia vista",doc_view_tree:"Vista ad albero",doc_upload:"Carica",doc_upload_to:"Carica in",doc_view_list:"Vista elenco",filter_sorting:"Ordinamento",filter_ascending:"Crescente",filter_descending:"Decrescente",filter_section:"Filtro",filter_apply:"Applica",filter_clear:"Cancella",filter_contains:"Contiene",filter_starts_with:"Inizia con",filter_equals:"Uguale a",filter_has_value:"Ha valore",filter_is_empty:"È vuoto",filter_is_not_empty:"Non è vuoto",filter_exact:"Esatto",filter_range:"Intervallo",filter_from:"Da",filter_to:"A",filter_all:"Tutti",filter_select_all:"Tutti",filter_select_none:"Nessuno",filter_search_value:"Valore di ricerca...",filter_no_support:"Il filtro non è disponibile per questo tipo di campo.",textblock_show_more:"Mostra altro",close:"Chiudi",history_until:"fino a",history_badge_tooltip:"Valori precedenti",hyperlink_name:"Testo del collegamento (opzionale)",merge_search_hint:"Cerca il duplicato con cui unire",merge_select:"Seleziona",merge_compare_heading:"Risolvi i conflitti",merge_column_a:"Attuale (viene mantenuto)",merge_column_b:"Candidato (verrà eliminato)",merge_auto_heading:"Questi campi verranno ripresi automaticamente dal candidato:",merge_no_conflicts:"Nessun campo in conflitto trovato",merge_continue:"Continua",merge_back:"Indietro",merge_confirm_heading:"Conferma unione",merge_confirm_warning:"Questa azione non può essere annullata: il candidato verrà eliminato definitivamente.",merge_confirm_button:"Conferma unione",invoice_title:"Fattura",invoice_date:"Data fattura",invoice_due_date:"Data di scadenza",invoice_subtotal:"Subtotale",invoice_tax:"IVA",invoice_total:"Totale",invoice_customer:"Cliente",invoice_supplier:"Fornitore",email_from:"Da",email_to:"A",email_cc:"Cc",email_date:"Data",email_show_headers:"Mostra intestazioni tecniche"},uk:{required:"Це поле обов'язкове",select_placeholder:"Виберіть варіант",search_placeholder:"Пошук...",upload_file:"Завантажити файл",choose_file:"Вибрати файл",clear:"Очистити",today:"Сьогодні",invalid_email:"Будь ласка, введіть дійсну адресу електронної пошти",invalid_url:"Будь ласка, введіть дійсну URL-адресу",invalid_number:"Будь ласка, введіть дійсне число",invalid_date:"Будь ласка, введіть дійсну дату",invalid_datetime:"Будь ласка, введіть дійсні дату та час",date_token_day:"дд",date_token_month:"мм",date_token_year:"рррр",time_token_hour:"гг",time_token_minute:"хв",open_calendar:"Відкрити календар",drop_file_here:"Перетягніть файл сюди або",browse:"огляд",file_too_large:"Файл занадто великий",invalid_image:"Будь ласка, виберіть файл зображення",search_results:"Результати пошуку",no_results:"Результатів не знайдено",load_failed_retry:"Не вдалося завантажити — повторити",loading:"Завантаження...",submit:"Зберегти",cancel:"Скасувати",remove:"Видалити",add:"Додати",yes:"Так",no:"Ні",table_of:"з",download:"Завантажити",value_empty:"—",table_filter:"Фільтрувати",table_filter_hide:"Сховати фільтр",table_filter_active:"активний",table_filter_clear_all:"Очистити всі фільтри",table_new_record:"Новий запис",table_export_excel:"Експортувати до Excel",doc_view_switch:"Змінити вигляд",doc_view_tree:"Деревоподібний вигляд",doc_upload:"Завантажити",doc_upload_to:"Завантажити до",doc_view_list:"Список",filter_sorting:"Сортування",filter_ascending:"За зростанням",filter_descending:"За спаданням",filter_section:"Фільтр",filter_apply:"Застосувати",filter_clear:"Очистити",filter_contains:"Містить",filter_starts_with:"Починається з",filter_equals:"Дорівнює",filter_has_value:"Має значення",filter_is_empty:"Порожнє",filter_is_not_empty:"Не порожнє",filter_exact:"Точно",filter_range:"Діапазон",filter_from:"Від",filter_to:"До",filter_all:"Всі",filter_select_all:"Всі",filter_select_none:"Жодного",filter_search_value:"Значення для пошуку...",filter_no_support:"Фільтрування недоступне для цього типу поля.",textblock_show_more:"Показати більше",close:"Закрити",history_until:"до",history_badge_tooltip:"Попередні значення",hyperlink_name:"Текст посилання (необов'язково)",merge_search_hint:"Знайдіть дублікат для об'єднання",merge_select:"Вибрати",merge_compare_heading:"Вирішити конфлікти",merge_column_a:"Поточний (залишається)",merge_column_b:"Кандидат (буде видалено)",merge_auto_heading:"Ці поля будуть автоматично взяті з кандидата:",merge_no_conflicts:"Конфліктних полів не знайдено",merge_continue:"Продовжити",merge_back:"Назад",merge_confirm_heading:"Підтвердити об'єднання",merge_confirm_warning:"Цю дію не можна скасувати: кандидат буде остаточно видалено.",merge_confirm_button:"Підтвердити об'єднання",invoice_title:"Рахунок-фактура",invoice_date:"Дата рахунку",invoice_due_date:"Термін оплати",invoice_subtotal:"Проміжний підсумок",invoice_tax:"ПДВ",invoice_total:"Разом",invoice_customer:"Клієнт",invoice_supplier:"Постачальник",email_from:"Від",email_to:"Кому",email_cc:"Копія",email_date:"Дата",email_show_headers:"Показати технічні заголовки"}};function b(e,i){var t,r,a;const l=(null!=i?i:"en").split("-")[0].toLowerCase();return null!==(a=null!==(r=(null!==(t=p[l])&&void 0!==t?t:p.en)[e])&&void 0!==r?r:p.en[e])&&void 0!==a?a:e}class w{static render(i,t,r){var a,l,n,o;if(i.type===e.RELATION){const e=null!==(a=i.name)&&void 0!==a?a:"",r=null===(l=null==t?void 0:t._links)||void 0===l?void 0:l[e];return r?Array.isArray(r)?r.map((e=>{var i;return null!==(i=e.name)&&void 0!==i?i:""})).filter(Boolean).join(", "):null!==(n=r.name)&&void 0!==n?n:"":""}if(i.type!==e.FIELD)return"";const _=null!==(o=i.name)&&void 0!==o?o:"",c=i.dataType,d=i.listItems;let s=null==t?void 0:t[_];return i.historyEnabled&&null!=s&&"object"==typeof s&&!Array.isArray(s)&&"current"in s&&(s=s.current),null==s||""===s?"":(Array.isArray(s)?s:[s]).map((e=>w.renderValue(null!=c?c:"TEXT",e,null!=d?d:[],r))).filter((e=>""!==e)).join(", ")}static renderValue(e,n,o,_){var c,d;switch(e){case"INTEGER":return i(Number(n),_,{maximumFractionDigits:0});case"DECIMAL":return i(Number(n),_);case"PERCENTAGE":return r(Number(n),_);case"CURRENCY":{const{amount:e,currency:r}="object"==typeof n&&null!==n?n:{amount:n,currency:""};return r?t(Number(e),r,_):i(Number(e),_)}case"DATE":return a(n,_);case"DATETIME":return l(n,_);case"TIME":return function(e,i){if(!e)return"";const[t,r]=e.split(":").map(Number),a=new Date;return a.setHours(t,r,0,0),new Intl.DateTimeFormat(i,{hour:"2-digit",minute:"2-digit"}).format(a)}(n,_);case"BOOLEAN":return n?"✓":"";case"FILE":case"IMAGE":return"object"==typeof n&&null!==n&&null!==(c=n.fileName)&&void 0!==c?c:"";case"LIST":{const e=o.find((e=>e.key===String(n)));return null!==(d=null==e?void 0:e.label)&&void 0!==d?d:String(n)}case"TEXTBLOCK":{const e=String(n).replace(/<[^>]*>/g,""),i=document.createElement("textarea");return i.innerHTML=e,i.value.trim()}case"LONGTEXT":return String(n).replace(/[\r\n]+/g," ").trim();case"JSON":return("object"==typeof n?JSON.stringify(n):String(n)).replace(/[\r\n]+/g," ").trim();case"SECRET":return n?"••••••••":"";default:return String(n)}}static formatJson(e,i=!1){try{const t="string"==typeof e?JSON.parse(e):e;return(i?JSON.stringify(t):JSON.stringify(t,null,2)).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(e=>{let i="color:#2aa198";return/^"/.test(e)?i=/:$/.test(e)?"color:#881391":"color:#268bd2":/true|false/.test(e)?i="color:#b58900":/null/.test(e)&&(i="color:#dc322f"),`<span style="${i}">${e}</span>`}))}catch(i){return String(e)}}}export{w as C,g as a,m as b,h as c,f as d,a as e,i as f,l as g,t as h,r as i,s as l,v as p,b as t}
@@ -1 +1 @@
1
- import{h as r,r as e,c as i,H as o,g as d}from"./p-CDiBvvJU.js";import{a as t}from"./p-Bc42CfJB.js";import{t as a,C as s,f as m}from"./p-Ce2QDq0t.js";function n(r){return r.type===t.FIELD||r.type===t.RELATION&&!r.multiple}function l(r,e){var i,o,d,a,s;const m=null!==(i=r.name)&&void 0!==i?i:"";return r.type===t.RELATION?null!==(a=null===(d=null===(o=null==e?void 0:e._links)||void 0===o?void 0:o[m])||void 0===d?void 0:d.href)&&void 0!==a?a:null:null!==(s=null==e?void 0:e[m])&&void 0!==s?s:null}function c(r,e){return r.historyEnabled&&null!=e&&"object"==typeof e&&!Array.isArray(e)&&"current"in e?e.current:e}function v(r){return void 0===r||""===r?null:r}function g(r,e){const i=v(r),o=v(e);return i===o||null!==i&&null!==o&&JSON.stringify(i)===JSON.stringify(o)}function u(r){return null===v(r)}function h(r,e,i){const o=[],d=[];for(const t of r.filter(n)){const r=l(t,e),a=l(t,i),s=c(t,r),m=c(t,a);g(s,m)||(u(s)&&!u(m)?d.push({item:t,aValue:r,bValue:a}):o.push({item:t,aValue:r,bValue:a}))}return{conflicts:o,autoFilled:d}}function _(r){var e,i,o,d,t;return null!==(t=null!==(i=null!==(e=null==r?void 0:r.name)&&void 0!==e?e:null==r?void 0:r.label)&&void 0!==i?i:null===(d=null===(o=null==r?void 0:r._links)||void 0===o?void 0:o.self)||void 0===d?void 0:d.href)&&void 0!==t?t:""}function w(r,e){var i,o;return r.historyEnabled&&r.name&&null!==(o=null===(i=null==e?void 0:e[r.name])||void 0===i?void 0:i.history)&&void 0!==o?o:[]}const p=({locale:e,history:i,isOpen:o,onToggle:d})=>{if(0===i.length)return null;const t=[...i].sort(((r,e)=>e.until.localeCompare(r.until)));return r("span",{class:"mrd-merge-view__history-wrap"},r("button",{type:"button",class:"mrd-merge-view__history-btn",title:a("history_badge_tooltip",e),"aria-label":a("history_badge_tooltip",e),onClick:r=>{r.stopPropagation(),d()}},r("svg",{class:"mrd-merge-view__history-icon",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},r("path",{"fill-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm.75-13a.75.75 0 00-1.5 0v5c0 .207.085.394.22.53l2.5 2.5a.75.75 0 101.06-1.06L10.75 9.69V5z","clip-rule":"evenodd"}))),o&&r("div",{class:"mrd-merge-view__history-popover",role:"listbox"},t.map(((i,o)=>r("div",{key:String(o),class:"mrd-merge-view__history-entry"},i.value," (",a("history_until",e)," ",m(i.until,e),")")))))},b=({locale:e,searchQuery:i,searchResults:o,isLoading:d,onSearchInput:t,onSelect:s})=>r("div",{class:"mrd-merge-view__search-step"},r("p",{class:"mrd-merge-view__hint"},a("merge_search_hint",e)),r("div",{class:"mrd-merge-view__search-wrapper"},r("input",{class:"mrd-merge-view__search",type:"text",value:i,placeholder:a("search_placeholder",e),onInput:r=>t(r.target.value)}),d&&r("span",{class:"mrd-merge-view__spinner","aria-label":a("loading",e)})),i.trim().length>=2&&!d&&r("div",{class:"mrd-merge-view__results"},0===o.length?r("div",{class:"mrd-merge-view__no-results"},a("no_results",e)):o.map((i=>{var o,d,t;return r("div",{key:null!==(t=null===(d=null===(o=null==i?void 0:i._links)||void 0===o?void 0:o.self)||void 0===d?void 0:d.href)&&void 0!==t?t:_(i),class:"mrd-merge-view__result-item"},r("span",{class:"mrd-merge-view__result-label"},_(i)),r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--secondary",onClick:()=>s(i)},a("merge_select",e)))})))),f=({locale:e,currentLabel:i,candidateLabel:o,conflicts:d,autoFilled:t,recordA:m,recordB:n,resolutions:l,openHistoryKey:c,onResolve:v,onToggleHistory:g,onChangeCandidate:u,onContinue:h})=>r("div",{class:"mrd-merge-view__compare-step"},r("h3",{class:"mrd-merge-view__heading"},a("merge_compare_heading",e)),0===d.length?r("p",{class:"mrd-merge-view__no-conflicts"},a("merge_no_conflicts",e)):r("table",{class:"mrd-merge-view__table"},r("thead",null,r("tr",null,r("th",{class:"mrd-merge-view__header"}),r("th",{class:"mrd-merge-view__header"},a("merge_column_a",e),r("span",{class:"mrd-merge-view__header-name"},i)),r("th",{class:"mrd-merge-view__header"},a("merge_column_b",e),r("span",{class:"mrd-merge-view__header-name"},o)))),r("tbody",null,d.map((({item:i})=>{var o,d,t;const a=null!==(o=i.name)&&void 0!==o?o:"",u=null!==(d=l[a])&&void 0!==d?d:"A",h=w(i,m),_=w(i,n),b=`${a}:A`,f=`${a}:B`;return r("tr",{key:a,class:"mrd-merge-view__row"},r("td",{class:"mrd-merge-view__cell mrd-merge-view__cell--label"},null!==(t=i.label)&&void 0!==t?t:a),r("td",{class:"mrd-merge-view__cell"},r("label",{class:"mrd-merge-view__option"},r("input",{type:"radio",name:`merge-${a}`,checked:"A"===u,onChange:()=>v(a,"A")}),r("span",null,s.render(i,m,e)||"—")),r(p,{locale:e,history:h,isOpen:c===b,onToggle:()=>g(c===b?null:b)})),r("td",{class:"mrd-merge-view__cell"},r("label",{class:"mrd-merge-view__option"},r("input",{type:"radio",name:`merge-${a}`,checked:"B"===u,onChange:()=>v(a,"B")}),r("span",null,s.render(i,n,e)||"—")),r(p,{locale:e,history:_,isOpen:c===f,onToggle:()=>g(c===f?null:f)})))})))),t.length>0&&r("div",{class:"mrd-merge-view__auto-note"},r("p",null,a("merge_auto_heading",e)),r("ul",null,t.map((({item:e})=>{var i;return r("li",{key:e.name},null!==(i=e.label)&&void 0!==i?i:e.name)})))),r("div",{class:"mrd-merge-view__actions"},r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--secondary",onClick:u},a("merge_back",e)),r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--primary",onClick:h},a("merge_continue",e)))),y=({locale:e,candidateLabel:i,conflicts:o,autoFilled:d,resolutions:t,recordB:m,openHistoryKey:n,onToggleHistory:l,onBack:c,onConfirm:v})=>{const g=[...d,...o.filter((({item:r})=>{var e;return"B"===t[null!==(e=r.name)&&void 0!==e?e:""]}))];return r("div",{class:"mrd-merge-view__confirm-step"},r("h3",{class:"mrd-merge-view__heading"},a("merge_confirm_heading",e)),0===g.length?r("p",{class:"mrd-merge-view__no-conflicts"},a("merge_no_conflicts",e)):r("ul",{class:"mrd-merge-view__summary-list"},g.map((({item:i})=>{var o;const d=`${i.name}:confirm`;return r("li",{key:i.name},null!==(o=i.label)&&void 0!==o?o:i.name,": ",s.render(i,m,e)||"—",r(p,{locale:e,history:w(i,m),isOpen:n===d,onToggle:()=>l(n===d?null:d)}))}))),r("p",{class:"mrd-merge-view__warning"},a("merge_confirm_warning",e)," (",i,")"),r("div",{class:"mrd-merge-view__actions"},r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--secondary",onClick:c},a("merge_back",e)),r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--danger",onClick:v},a("merge_confirm_button",e))))},k=class{constructor(r){e(this,r),this.mrdSearch=i(this,"mrdSearch"),this.mrdMerge=i(this,"mrdMerge"),this.locale=navigator.language,this.basicType="",this.mostSignificantClass="",this.fields=[],this.currentHref="",this.currentRecord={},this.currentLabel="",this.step="search",this.searchQuery="",this.searchResults=[],this.isLoading=!1,this.candidate=null,this.resolutions={},this.openHistoryKey=null,this.historyClickOutside=null,this.searchDebounce=null,this.handleSearchInput=r=>{this.searchQuery=r,this.searchDebounce&&clearTimeout(this.searchDebounce),r.trim().length>=2?(this.isLoading=!0,this.searchDebounce=setTimeout((()=>{this.mrdSearch.emit({query:r,basicType:this.basicType,mostSignificantClass:this.mostSignificantClass||void 0})}),300)):(this.searchResults=[],this.isLoading=!1)},this.handleSelect=r=>{this.candidate=r;const{conflicts:e}=h(this.fields,this.currentRecord,r),i={};e.forEach((({item:r})=>{var e;i[null!==(e=r.name)&&void 0!==e?e:""]="A"})),this.resolutions=i,this.openHistoryKey=null,this.step="compare"},this.handleChangeCandidate=()=>{this.candidate=null,this.resolutions={},this.openHistoryKey=null,this.step="search"},this.handleResolve=(r,e)=>{this.resolutions=Object.assign(Object.assign({},this.resolutions),{[r]:e})},this.handleToggleHistory=r=>{this.openHistoryKey=r},this.handleContinue=()=>{this.step="confirm"},this.handleBack=()=>{this.step="compare"},this.handleConfirm=()=>{var r,e,i,o;if(!this.candidate)return;const d=function(r,e){var i,o,d;const t={};for(const{item:e,bValue:o}of r.autoFilled)t[null!==(i=e.name)&&void 0!==i?i:""]=o;for(const{item:i,bValue:a}of r.conflicts)"B"===e[null!==(o=i.name)&&void 0!==o?o:""]&&(t[null!==(d=i.name)&&void 0!==d?d:""]=a);return t}(h(this.fields,this.currentRecord,this.candidate),this.resolutions),t=null!==(o=null===(i=null===(e=null===(r=this.candidate)||void 0===r?void 0:r._links)||void 0===e?void 0:e.self)||void 0===i?void 0:i.href)&&void 0!==o?o:"";this.mrdMerge.emit({winnerHref:this.currentHref,loserHref:t,patch:d})}}connectedCallback(){this.historyClickOutside=r=>{this.el.contains(r.target)||(this.openHistoryKey=null)},document.addEventListener("mousedown",this.historyClickOutside)}disconnectedCallback(){this.historyClickOutside&&(document.removeEventListener("mousedown",this.historyClickOutside),this.historyClickOutside=null)}async setSearchResults(r){this.searchResults=(null!=r?r:[]).filter((r=>{var e,i,o;return(null!==(o=null===(i=null===(e=null==r?void 0:r._links)||void 0===e?void 0:e.self)||void 0===i?void 0:i.href)&&void 0!==o?o:null)!==this.currentHref})),this.isLoading=!1}async setLoading(r){this.isLoading=r}render(){var e,i;let d;if("search"===this.step)d=r(b,{key:"3adb36fb46aa7260641a46a2cf27cc0ef320876f",locale:this.locale,searchQuery:this.searchQuery,searchResults:this.searchResults,isLoading:this.isLoading,onSearchInput:this.handleSearchInput,onSelect:this.handleSelect});else{const o=h(this.fields,this.currentRecord,this.candidate),t=_(this.candidate);d="compare"===this.step?r(f,{locale:this.locale,currentLabel:this.currentLabel,candidateLabel:t,conflicts:o.conflicts,autoFilled:o.autoFilled,recordA:this.currentRecord,recordB:null!==(e=this.candidate)&&void 0!==e?e:{},resolutions:this.resolutions,openHistoryKey:this.openHistoryKey,onResolve:this.handleResolve,onToggleHistory:this.handleToggleHistory,onChangeCandidate:this.handleChangeCandidate,onContinue:this.handleContinue}):r(y,{locale:this.locale,candidateLabel:t,conflicts:o.conflicts,autoFilled:o.autoFilled,resolutions:this.resolutions,recordB:null!==(i=this.candidate)&&void 0!==i?i:{},openHistoryKey:this.openHistoryKey,onToggleHistory:this.handleToggleHistory,onBack:this.handleBack,onConfirm:this.handleConfirm})}return r(o,{key:"e33a6d66a220b28cc9533da78dc274e2d7ec5c4a"},r("div",{key:"b5fb1390d86192f9f6f15e3ccb89e2d21d9c7c8b",class:"mrd-merge-view"},d))}get el(){return d(this)}};k.style=".sc-mrd-merge-view-h{display:block;width:100%}.mrd-merge-view.sc-mrd-merge-view{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-merge-view__hint.sc-mrd-merge-view{margin:0 0 var(--mrd-space-4);color:var(--mrd-color-neutral-600)}.mrd-merge-view__heading.sc-mrd-merge-view{margin:0 0 var(--mrd-space-4);font-size:var(--mrd-font-size-lg);font-weight:var(--mrd-font-weight-semibold)}.mrd-merge-view__search-wrapper.sc-mrd-merge-view{position:relative;display:flex;align-items:center}.mrd-merge-view__search.sc-mrd-merge-view{width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);background:var(--mrd-input-bg);color:var(--mrd-input-color);font-size:var(--mrd-font-size-sm)}.mrd-merge-view__search.sc-mrd-merge-view:focus{outline:none;border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-merge-view__spinner.sc-mrd-merge-view{position:absolute;right:var(--mrd-space-3);width:1rem;height:1rem;border:2px solid var(--mrd-color-neutral-300);border-top-color:var(--mrd-color-primary);border-radius:var(--mrd-border-radius-full);animation:mrd-merge-view-spin var(--mrd-transition-slow) linear infinite}.mrd-merge-view__results.sc-mrd-merge-view{margin-top:var(--mrd-space-2);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow:hidden}.mrd-merge-view__no-results.sc-mrd-merge-view{padding:var(--mrd-space-3) var(--mrd-space-4);color:var(--mrd-color-neutral-500)}.mrd-merge-view__result-item.sc-mrd-merge-view{display:flex;align-items:center;justify-content:space-between;gap:var(--mrd-space-3);padding:var(--mrd-space-2) var(--mrd-space-4)}.mrd-merge-view__result-item.sc-mrd-merge-view:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-border-color)}.mrd-merge-view__result-label.sc-mrd-merge-view{font-weight:var(--mrd-font-weight-medium)}.mrd-merge-view__no-conflicts.sc-mrd-merge-view{color:var(--mrd-color-neutral-600)}.mrd-merge-view__table.sc-mrd-merge-view{width:100%;border-collapse:collapse;margin-bottom:var(--mrd-space-4)}.mrd-merge-view__header.sc-mrd-merge-view{text-align:left;padding:var(--mrd-space-2) var(--mrd-space-3);border-bottom:2px solid var(--mrd-border-color);font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em;color:var(--mrd-color-neutral-600)}.mrd-merge-view__header-name.sc-mrd-merge-view{display:block;text-transform:none;letter-spacing:normal;font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-900);margin-top:var(--mrd-space-1)}.mrd-merge-view__row.sc-mrd-merge-view:nth-child(even){background:var(--mrd-color-neutral-50)}.mrd-merge-view__cell.sc-mrd-merge-view{padding:var(--mrd-space-2) var(--mrd-space-3);border-bottom:var(--mrd-border-width) solid var(--mrd-border-color);vertical-align:top}.mrd-merge-view__cell--label.sc-mrd-merge-view{font-weight:var(--mrd-font-weight-medium);white-space:nowrap}.mrd-merge-view__option.sc-mrd-merge-view{display:flex;align-items:flex-start;gap:var(--mrd-space-2);cursor:pointer}.mrd-merge-view__option.sc-mrd-merge-view input[type=radio].sc-mrd-merge-view{margin-top:0.2em}.mrd-merge-view__history-wrap.sc-mrd-merge-view{position:relative;display:inline-flex;align-items:center;margin-left:var(--mrd-space-1)}.mrd-merge-view__history-btn.sc-mrd-merge-view{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-merge-view__history-btn.sc-mrd-merge-view:hover{color:var(--mrd-color-neutral-700);background-color:var(--mrd-color-neutral-100)}.mrd-merge-view__history-btn.sc-mrd-merge-view:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-merge-view__history-icon.sc-mrd-merge-view{width:0.875rem;height:0.875rem}.mrd-merge-view__history-popover.sc-mrd-merge-view{position:absolute;top:calc(100% + 0.25rem);left:0;min-width:18rem;max-width:18rem;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-merge-view__history-entry.sc-mrd-merge-view{font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-700);padding:var(--mrd-space-2) var(--mrd-space-3);line-height:var(--mrd-line-height-normal)}.mrd-merge-view__history-entry.sc-mrd-merge-view:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-merge-view__auto-note.sc-mrd-merge-view{margin-bottom:var(--mrd-space-4);padding:var(--mrd-space-3) var(--mrd-space-4);background:var(--mrd-color-neutral-50);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);color:var(--mrd-color-neutral-700)}.mrd-merge-view__auto-note.sc-mrd-merge-view p.sc-mrd-merge-view{margin:0 0 var(--mrd-space-1);font-weight:var(--mrd-font-weight-medium)}.mrd-merge-view__auto-note.sc-mrd-merge-view ul.sc-mrd-merge-view{margin:0;padding-left:var(--mrd-space-5)}.mrd-merge-view__summary-list.sc-mrd-merge-view{margin:0 0 var(--mrd-space-4);padding-left:var(--mrd-space-5)}.mrd-merge-view__warning.sc-mrd-merge-view{padding:var(--mrd-space-3) var(--mrd-space-4);background:var(--mrd-color-danger-light);border:var(--mrd-border-width) solid var(--mrd-color-danger);border-radius:var(--mrd-border-radius);color:var(--mrd-color-danger-dark);margin-bottom:var(--mrd-space-4)}.mrd-merge-view__actions.sc-mrd-merge-view{display:flex;gap:var(--mrd-space-3)}.mrd-merge-view__btn.sc-mrd-merge-view{height:var(--mrd-input-height-sm);padding:0 var(--mrd-space-4);border-radius:var(--mrd-border-radius);border:var(--mrd-border-width) solid transparent;font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);cursor:pointer;transition:background-color var(--mrd-transition-fast), border-color var(--mrd-transition-fast)}.mrd-merge-view__btn--primary.sc-mrd-merge-view{background:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-merge-view__btn--primary.sc-mrd-merge-view:hover{background:var(--mrd-color-primary-hover)}.mrd-merge-view__btn--secondary.sc-mrd-merge-view{background:var(--mrd-color-white);border-color:var(--mrd-border-color);color:var(--mrd-color-neutral-700)}.mrd-merge-view__btn--secondary.sc-mrd-merge-view:hover{background:var(--mrd-color-neutral-50)}.mrd-merge-view__btn--danger.sc-mrd-merge-view{background:var(--mrd-color-danger);color:var(--mrd-color-white)}.mrd-merge-view__btn--danger.sc-mrd-merge-view:hover{background:var(--mrd-color-danger-dark)}@keyframes mrd-merge-view-spin{to{transform:rotate(360deg)}}";export{k as mrd_merge_view}
1
+ import{h as r,r as e,c as i,H as o,g as d}from"./p-CDiBvvJU.js";import{a as t}from"./p-Bc42CfJB.js";import{t as a,C as s,e as m}from"./p-CF--ScWr.js";function n(r){return r.type===t.FIELD||r.type===t.RELATION&&!r.multiple}function l(r,e){var i,o,d,a,s;const m=null!==(i=r.name)&&void 0!==i?i:"";return r.type===t.RELATION?null!==(a=null===(d=null===(o=null==e?void 0:e._links)||void 0===o?void 0:o[m])||void 0===d?void 0:d.href)&&void 0!==a?a:null:null!==(s=null==e?void 0:e[m])&&void 0!==s?s:null}function c(r,e){return r.historyEnabled&&null!=e&&"object"==typeof e&&!Array.isArray(e)&&"current"in e?e.current:e}function v(r){return void 0===r||""===r?null:r}function g(r,e){const i=v(r),o=v(e);return i===o||null!==i&&null!==o&&JSON.stringify(i)===JSON.stringify(o)}function u(r){return null===v(r)}function h(r,e,i){const o=[],d=[];for(const t of r.filter(n)){const r=l(t,e),a=l(t,i),s=c(t,r),m=c(t,a);g(s,m)||(u(s)&&!u(m)?d.push({item:t,aValue:r,bValue:a}):o.push({item:t,aValue:r,bValue:a}))}return{conflicts:o,autoFilled:d}}function _(r){var e,i,o,d,t;return null!==(t=null!==(i=null!==(e=null==r?void 0:r.name)&&void 0!==e?e:null==r?void 0:r.label)&&void 0!==i?i:null===(d=null===(o=null==r?void 0:r._links)||void 0===o?void 0:o.self)||void 0===d?void 0:d.href)&&void 0!==t?t:""}function w(r,e){var i,o;return r.historyEnabled&&r.name&&null!==(o=null===(i=null==e?void 0:e[r.name])||void 0===i?void 0:i.history)&&void 0!==o?o:[]}const p=({locale:e,history:i,isOpen:o,onToggle:d})=>{if(0===i.length)return null;const t=[...i].sort(((r,e)=>e.until.localeCompare(r.until)));return r("span",{class:"mrd-merge-view__history-wrap"},r("button",{type:"button",class:"mrd-merge-view__history-btn",title:a("history_badge_tooltip",e),"aria-label":a("history_badge_tooltip",e),onClick:r=>{r.stopPropagation(),d()}},r("svg",{class:"mrd-merge-view__history-icon",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true"},r("path",{"fill-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm.75-13a.75.75 0 00-1.5 0v5c0 .207.085.394.22.53l2.5 2.5a.75.75 0 101.06-1.06L10.75 9.69V5z","clip-rule":"evenodd"}))),o&&r("div",{class:"mrd-merge-view__history-popover",role:"listbox"},t.map(((i,o)=>r("div",{key:String(o),class:"mrd-merge-view__history-entry"},i.value," (",a("history_until",e)," ",m(i.until,e),")")))))},b=({locale:e,searchQuery:i,searchResults:o,isLoading:d,onSearchInput:t,onSelect:s})=>r("div",{class:"mrd-merge-view__search-step"},r("p",{class:"mrd-merge-view__hint"},a("merge_search_hint",e)),r("div",{class:"mrd-merge-view__search-wrapper"},r("input",{class:"mrd-merge-view__search",type:"text",value:i,placeholder:a("search_placeholder",e),onInput:r=>t(r.target.value)}),d&&r("span",{class:"mrd-merge-view__spinner","aria-label":a("loading",e)})),i.trim().length>=2&&!d&&r("div",{class:"mrd-merge-view__results"},0===o.length?r("div",{class:"mrd-merge-view__no-results"},a("no_results",e)):o.map((i=>{var o,d,t;return r("div",{key:null!==(t=null===(d=null===(o=null==i?void 0:i._links)||void 0===o?void 0:o.self)||void 0===d?void 0:d.href)&&void 0!==t?t:_(i),class:"mrd-merge-view__result-item"},r("span",{class:"mrd-merge-view__result-label"},_(i)),r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--secondary",onClick:()=>s(i)},a("merge_select",e)))})))),f=({locale:e,currentLabel:i,candidateLabel:o,conflicts:d,autoFilled:t,recordA:m,recordB:n,resolutions:l,openHistoryKey:c,onResolve:v,onToggleHistory:g,onChangeCandidate:u,onContinue:h})=>r("div",{class:"mrd-merge-view__compare-step"},r("h3",{class:"mrd-merge-view__heading"},a("merge_compare_heading",e)),0===d.length?r("p",{class:"mrd-merge-view__no-conflicts"},a("merge_no_conflicts",e)):r("table",{class:"mrd-merge-view__table"},r("thead",null,r("tr",null,r("th",{class:"mrd-merge-view__header"}),r("th",{class:"mrd-merge-view__header"},a("merge_column_a",e),r("span",{class:"mrd-merge-view__header-name"},i)),r("th",{class:"mrd-merge-view__header"},a("merge_column_b",e),r("span",{class:"mrd-merge-view__header-name"},o)))),r("tbody",null,d.map((({item:i})=>{var o,d,t;const a=null!==(o=i.name)&&void 0!==o?o:"",u=null!==(d=l[a])&&void 0!==d?d:"A",h=w(i,m),_=w(i,n),b=`${a}:A`,f=`${a}:B`;return r("tr",{key:a,class:"mrd-merge-view__row"},r("td",{class:"mrd-merge-view__cell mrd-merge-view__cell--label"},null!==(t=i.label)&&void 0!==t?t:a),r("td",{class:"mrd-merge-view__cell"},r("label",{class:"mrd-merge-view__option"},r("input",{type:"radio",name:`merge-${a}`,checked:"A"===u,onChange:()=>v(a,"A")}),r("span",null,s.render(i,m,e)||"—")),r(p,{locale:e,history:h,isOpen:c===b,onToggle:()=>g(c===b?null:b)})),r("td",{class:"mrd-merge-view__cell"},r("label",{class:"mrd-merge-view__option"},r("input",{type:"radio",name:`merge-${a}`,checked:"B"===u,onChange:()=>v(a,"B")}),r("span",null,s.render(i,n,e)||"—")),r(p,{locale:e,history:_,isOpen:c===f,onToggle:()=>g(c===f?null:f)})))})))),t.length>0&&r("div",{class:"mrd-merge-view__auto-note"},r("p",null,a("merge_auto_heading",e)),r("ul",null,t.map((({item:e})=>{var i;return r("li",{key:e.name},null!==(i=e.label)&&void 0!==i?i:e.name)})))),r("div",{class:"mrd-merge-view__actions"},r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--secondary",onClick:u},a("merge_back",e)),r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--primary",onClick:h},a("merge_continue",e)))),y=({locale:e,candidateLabel:i,conflicts:o,autoFilled:d,resolutions:t,recordB:m,openHistoryKey:n,onToggleHistory:l,onBack:c,onConfirm:v})=>{const g=[...d,...o.filter((({item:r})=>{var e;return"B"===t[null!==(e=r.name)&&void 0!==e?e:""]}))];return r("div",{class:"mrd-merge-view__confirm-step"},r("h3",{class:"mrd-merge-view__heading"},a("merge_confirm_heading",e)),0===g.length?r("p",{class:"mrd-merge-view__no-conflicts"},a("merge_no_conflicts",e)):r("ul",{class:"mrd-merge-view__summary-list"},g.map((({item:i})=>{var o;const d=`${i.name}:confirm`;return r("li",{key:i.name},null!==(o=i.label)&&void 0!==o?o:i.name,": ",s.render(i,m,e)||"—",r(p,{locale:e,history:w(i,m),isOpen:n===d,onToggle:()=>l(n===d?null:d)}))}))),r("p",{class:"mrd-merge-view__warning"},a("merge_confirm_warning",e)," (",i,")"),r("div",{class:"mrd-merge-view__actions"},r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--secondary",onClick:c},a("merge_back",e)),r("button",{type:"button",class:"mrd-merge-view__btn mrd-merge-view__btn--danger",onClick:v},a("merge_confirm_button",e))))},k=class{constructor(r){e(this,r),this.mrdSearch=i(this,"mrdSearch"),this.mrdMerge=i(this,"mrdMerge"),this.locale=navigator.language,this.basicType="",this.mostSignificantClass="",this.fields=[],this.currentHref="",this.currentRecord={},this.currentLabel="",this.step="search",this.searchQuery="",this.searchResults=[],this.isLoading=!1,this.candidate=null,this.resolutions={},this.openHistoryKey=null,this.historyClickOutside=null,this.searchDebounce=null,this.handleSearchInput=r=>{this.searchQuery=r,this.searchDebounce&&clearTimeout(this.searchDebounce),r.trim().length>=2?(this.isLoading=!0,this.searchDebounce=setTimeout((()=>{this.mrdSearch.emit({query:r,basicType:this.basicType,mostSignificantClass:this.mostSignificantClass||void 0})}),300)):(this.searchResults=[],this.isLoading=!1)},this.handleSelect=r=>{this.candidate=r;const{conflicts:e}=h(this.fields,this.currentRecord,r),i={};e.forEach((({item:r})=>{var e;i[null!==(e=r.name)&&void 0!==e?e:""]="A"})),this.resolutions=i,this.openHistoryKey=null,this.step="compare"},this.handleChangeCandidate=()=>{this.candidate=null,this.resolutions={},this.openHistoryKey=null,this.step="search"},this.handleResolve=(r,e)=>{this.resolutions=Object.assign(Object.assign({},this.resolutions),{[r]:e})},this.handleToggleHistory=r=>{this.openHistoryKey=r},this.handleContinue=()=>{this.step="confirm"},this.handleBack=()=>{this.step="compare"},this.handleConfirm=()=>{var r,e,i,o;if(!this.candidate)return;const d=function(r,e){var i,o,d;const t={};for(const{item:e,bValue:o}of r.autoFilled)t[null!==(i=e.name)&&void 0!==i?i:""]=o;for(const{item:i,bValue:a}of r.conflicts)"B"===e[null!==(o=i.name)&&void 0!==o?o:""]&&(t[null!==(d=i.name)&&void 0!==d?d:""]=a);return t}(h(this.fields,this.currentRecord,this.candidate),this.resolutions),t=null!==(o=null===(i=null===(e=null===(r=this.candidate)||void 0===r?void 0:r._links)||void 0===e?void 0:e.self)||void 0===i?void 0:i.href)&&void 0!==o?o:"";this.mrdMerge.emit({winnerHref:this.currentHref,loserHref:t,patch:d})}}connectedCallback(){this.historyClickOutside=r=>{this.el.contains(r.target)||(this.openHistoryKey=null)},document.addEventListener("mousedown",this.historyClickOutside)}disconnectedCallback(){this.historyClickOutside&&(document.removeEventListener("mousedown",this.historyClickOutside),this.historyClickOutside=null)}async setSearchResults(r){this.searchResults=(null!=r?r:[]).filter((r=>{var e,i,o;return(null!==(o=null===(i=null===(e=null==r?void 0:r._links)||void 0===e?void 0:e.self)||void 0===i?void 0:i.href)&&void 0!==o?o:null)!==this.currentHref})),this.isLoading=!1}async setLoading(r){this.isLoading=r}render(){var e,i;let d;if("search"===this.step)d=r(b,{key:"b965c21176faf7844e58cb156958fa1305d07cdc",locale:this.locale,searchQuery:this.searchQuery,searchResults:this.searchResults,isLoading:this.isLoading,onSearchInput:this.handleSearchInput,onSelect:this.handleSelect});else{const o=h(this.fields,this.currentRecord,this.candidate),t=_(this.candidate);d="compare"===this.step?r(f,{locale:this.locale,currentLabel:this.currentLabel,candidateLabel:t,conflicts:o.conflicts,autoFilled:o.autoFilled,recordA:this.currentRecord,recordB:null!==(e=this.candidate)&&void 0!==e?e:{},resolutions:this.resolutions,openHistoryKey:this.openHistoryKey,onResolve:this.handleResolve,onToggleHistory:this.handleToggleHistory,onChangeCandidate:this.handleChangeCandidate,onContinue:this.handleContinue}):r(y,{locale:this.locale,candidateLabel:t,conflicts:o.conflicts,autoFilled:o.autoFilled,resolutions:this.resolutions,recordB:null!==(i=this.candidate)&&void 0!==i?i:{},openHistoryKey:this.openHistoryKey,onToggleHistory:this.handleToggleHistory,onBack:this.handleBack,onConfirm:this.handleConfirm})}return r(o,{key:"e9cffda6c5cff51f802b044f3d8e417df83b7846"},r("div",{key:"26690ef2db7489cbf7994191ad19491a0fdd7002",class:"mrd-merge-view"},d))}get el(){return d(this)}};k.style=".sc-mrd-merge-view-h{display:block;width:100%}.mrd-merge-view.sc-mrd-merge-view{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-merge-view__hint.sc-mrd-merge-view{margin:0 0 var(--mrd-space-4);color:var(--mrd-color-neutral-600)}.mrd-merge-view__heading.sc-mrd-merge-view{margin:0 0 var(--mrd-space-4);font-size:var(--mrd-font-size-lg);font-weight:var(--mrd-font-weight-semibold)}.mrd-merge-view__search-wrapper.sc-mrd-merge-view{position:relative;display:flex;align-items:center}.mrd-merge-view__search.sc-mrd-merge-view{width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);background:var(--mrd-input-bg);color:var(--mrd-input-color);font-size:var(--mrd-font-size-sm)}.mrd-merge-view__search.sc-mrd-merge-view:focus{outline:none;border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-merge-view__spinner.sc-mrd-merge-view{position:absolute;right:var(--mrd-space-3);width:1rem;height:1rem;border:2px solid var(--mrd-color-neutral-300);border-top-color:var(--mrd-color-primary);border-radius:var(--mrd-border-radius-full);animation:mrd-merge-view-spin var(--mrd-transition-slow) linear infinite}.mrd-merge-view__results.sc-mrd-merge-view{margin-top:var(--mrd-space-2);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow:hidden}.mrd-merge-view__no-results.sc-mrd-merge-view{padding:var(--mrd-space-3) var(--mrd-space-4);color:var(--mrd-color-neutral-500)}.mrd-merge-view__result-item.sc-mrd-merge-view{display:flex;align-items:center;justify-content:space-between;gap:var(--mrd-space-3);padding:var(--mrd-space-2) var(--mrd-space-4)}.mrd-merge-view__result-item.sc-mrd-merge-view:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-border-color)}.mrd-merge-view__result-label.sc-mrd-merge-view{font-weight:var(--mrd-font-weight-medium)}.mrd-merge-view__no-conflicts.sc-mrd-merge-view{color:var(--mrd-color-neutral-600)}.mrd-merge-view__table.sc-mrd-merge-view{width:100%;border-collapse:collapse;margin-bottom:var(--mrd-space-4)}.mrd-merge-view__header.sc-mrd-merge-view{text-align:left;padding:var(--mrd-space-2) var(--mrd-space-3);border-bottom:2px solid var(--mrd-border-color);font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em;color:var(--mrd-color-neutral-600)}.mrd-merge-view__header-name.sc-mrd-merge-view{display:block;text-transform:none;letter-spacing:normal;font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-neutral-900);margin-top:var(--mrd-space-1)}.mrd-merge-view__row.sc-mrd-merge-view:nth-child(even){background:var(--mrd-color-neutral-50)}.mrd-merge-view__cell.sc-mrd-merge-view{padding:var(--mrd-space-2) var(--mrd-space-3);border-bottom:var(--mrd-border-width) solid var(--mrd-border-color);vertical-align:top}.mrd-merge-view__cell--label.sc-mrd-merge-view{font-weight:var(--mrd-font-weight-medium);white-space:nowrap}.mrd-merge-view__option.sc-mrd-merge-view{display:flex;align-items:flex-start;gap:var(--mrd-space-2);cursor:pointer}.mrd-merge-view__option.sc-mrd-merge-view input[type=radio].sc-mrd-merge-view{margin-top:0.2em}.mrd-merge-view__history-wrap.sc-mrd-merge-view{position:relative;display:inline-flex;align-items:center;margin-left:var(--mrd-space-1)}.mrd-merge-view__history-btn.sc-mrd-merge-view{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-merge-view__history-btn.sc-mrd-merge-view:hover{color:var(--mrd-color-neutral-700);background-color:var(--mrd-color-neutral-100)}.mrd-merge-view__history-btn.sc-mrd-merge-view:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-merge-view__history-icon.sc-mrd-merge-view{width:0.875rem;height:0.875rem}.mrd-merge-view__history-popover.sc-mrd-merge-view{position:absolute;top:calc(100% + 0.25rem);left:0;min-width:18rem;max-width:18rem;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-merge-view__history-entry.sc-mrd-merge-view{font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-700);padding:var(--mrd-space-2) var(--mrd-space-3);line-height:var(--mrd-line-height-normal)}.mrd-merge-view__history-entry.sc-mrd-merge-view:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-merge-view__auto-note.sc-mrd-merge-view{margin-bottom:var(--mrd-space-4);padding:var(--mrd-space-3) var(--mrd-space-4);background:var(--mrd-color-neutral-50);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);color:var(--mrd-color-neutral-700)}.mrd-merge-view__auto-note.sc-mrd-merge-view p.sc-mrd-merge-view{margin:0 0 var(--mrd-space-1);font-weight:var(--mrd-font-weight-medium)}.mrd-merge-view__auto-note.sc-mrd-merge-view ul.sc-mrd-merge-view{margin:0;padding-left:var(--mrd-space-5)}.mrd-merge-view__summary-list.sc-mrd-merge-view{margin:0 0 var(--mrd-space-4);padding-left:var(--mrd-space-5)}.mrd-merge-view__warning.sc-mrd-merge-view{padding:var(--mrd-space-3) var(--mrd-space-4);background:var(--mrd-color-danger-light);border:var(--mrd-border-width) solid var(--mrd-color-danger);border-radius:var(--mrd-border-radius);color:var(--mrd-color-danger-dark);margin-bottom:var(--mrd-space-4)}.mrd-merge-view__actions.sc-mrd-merge-view{display:flex;gap:var(--mrd-space-3)}.mrd-merge-view__btn.sc-mrd-merge-view{height:var(--mrd-input-height-sm);padding:0 var(--mrd-space-4);border-radius:var(--mrd-border-radius);border:var(--mrd-border-width) solid transparent;font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);cursor:pointer;transition:background-color var(--mrd-transition-fast), border-color var(--mrd-transition-fast)}.mrd-merge-view__btn--primary.sc-mrd-merge-view{background:var(--mrd-color-primary);color:var(--mrd-color-white)}.mrd-merge-view__btn--primary.sc-mrd-merge-view:hover{background:var(--mrd-color-primary-hover)}.mrd-merge-view__btn--secondary.sc-mrd-merge-view{background:var(--mrd-color-white);border-color:var(--mrd-border-color);color:var(--mrd-color-neutral-700)}.mrd-merge-view__btn--secondary.sc-mrd-merge-view:hover{background:var(--mrd-color-neutral-50)}.mrd-merge-view__btn--danger.sc-mrd-merge-view{background:var(--mrd-color-danger);color:var(--mrd-color-white)}.mrd-merge-view__btn--danger.sc-mrd-merge-view:hover{background:var(--mrd-color-danger-dark)}@keyframes mrd-merge-view-spin{to{transform:rotate(360deg)}}";export{k as mrd_merge_view}
@@ -89,6 +89,8 @@ export declare class MrdDocumentContainer {
89
89
  private mode;
90
90
  /** Whether the folder tree currently has a valid target for "New folder". */
91
91
  private canCreate;
92
+ /** Name of that target (folder path, or the container's label), for the upload tooltip. */
93
+ private targetLabel;
92
94
  private listEl?;
93
95
  private tableEl?;
94
96
  /** Whether the currently mounted table has been init()'d. Reset on every mode switch. */
@@ -100,6 +102,11 @@ export declare class MrdDocumentContainer {
100
102
  componentDidRender(): void;
101
103
  private setMode;
102
104
  private createFolder;
105
+ private fileInputEl?;
106
+ private pickFile;
107
+ /** One file per upload, matching the drop handler. Reset the input afterwards
108
+ * so picking the same file twice in a row still fires a change event. */
109
+ private onFilePicked;
103
110
  private renderToolbar;
104
111
  private renderTree;
105
112
  private renderList;
@@ -63,6 +63,10 @@ export declare class MrdDocumentList {
63
63
  /** Emitted whenever the "can create a folder here" state changes, so a host
64
64
  * toolbar (mrd-document-container) can enable/disable its New folder button. */
65
65
  mrdCanCreate: EventEmitter<boolean>;
66
+ /** Emitted whenever the current target changes: the folder path a new folder or
67
+ * upload lands in, or the container's label when no folder is selected. Empty
68
+ * when there is no target. Lets a host toolbar name the destination. */
69
+ mrdTargetLabel: EventEmitter<string>;
66
70
  /** Generic "update an existing object" request — fired when a document is
67
71
  * dragged into another folder/container. Host PATCHes `href` with `values`
68
72
  * (no move/folder knowledge needed). `values` carries the new folder string
@@ -114,6 +118,8 @@ export declare class MrdDocumentList {
114
118
  private newFolderSeq;
115
119
  /** Last emitted canCreateFolder value, to only emit mrdCanCreate on change. */
116
120
  private lastCanCreate;
121
+ /** Last emitted upload-target label, to only emit mrdTargetLabel on change. */
122
+ private lastTargetLabel;
117
123
  /** The document row currently being dragged. */
118
124
  private dragDoc;
119
125
  /** Id of the node the dragged document currently lives in. */
@@ -131,6 +137,10 @@ export declare class MrdDocumentList {
131
137
  /** Seed the single implied container from context and load its folders. */
132
138
  private seedSingleContainer;
133
139
  componentDidRender(): void;
140
+ /** Human-readable name of the node a new folder or upload lands in — the
141
+ * folder path when one is selected, otherwise the container's own label.
142
+ * Empty when there is no target at all. */
143
+ private get targetLabel();
134
144
  private get containerField();
135
145
  private get folderField();
136
146
  private get titleField();
@@ -195,6 +205,13 @@ export declare class MrdDocumentList {
195
205
  private onRootDrop;
196
206
  /** Begin an upload: emit mrdUpload; the host uploads and calls setFileReference. */
197
207
  private startFileUpload;
208
+ /** Shared by the file drop and the host toolbar's upload button. */
209
+ private beginUpload;
210
+ /** Upload a file into the current target — the selected folder/container, or
211
+ * the only container when there is just one. Called by the host toolbar
212
+ * (mrd-document-container). No-op without a target, or while another upload
213
+ * is still awaiting its setFileReference. */
214
+ uploadFile(file: File): Promise<void>;
198
215
  /** Host callback with the uploaded file reference. Builds the create payload
199
216
  * from the archetype slots and requests the new document. */
200
217
  setFileReference(uri: string): Promise<void>;
@@ -18,8 +18,21 @@ export declare class MrdCurrencyField {
18
18
  name: string;
19
19
  value: CurrencyValue;
20
20
  }>;
21
+ /** While focused the user owns the text; prop updates must not overwrite it. */
22
+ private focused;
23
+ private selectEl?;
21
24
  componentWillLoad(): void;
25
+ componentDidRender(): void;
26
+ /** The record's own currency may sit outside the common list; never drop it. */
27
+ private currencyOptions;
28
+ /** Edit mode loads the record after mount, so the incoming value must re-sync. */
29
+ valueChanged(): void;
30
+ localeChanged(): void;
31
+ private syncFromValue;
32
+ /** Display form: locale separators, always two decimals. The ISO code sits in the select. */
33
+ private formatAmount;
22
34
  private handleAmountInput;
35
+ private handleAmountFocus;
23
36
  private handleAmountBlur;
24
37
  private handleCurrencyChange;
25
38
  render(): any;
@@ -2,11 +2,20 @@ import { EventEmitter } from '../../../stencil-public-runtime';
2
2
  export declare class MrdDateField {
3
3
  name: string;
4
4
  label: string;
5
+ /** ISO date, 'YYYY-MM-DD'. */
5
6
  value: string;
7
+ /** Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj'). */
8
+ placeholder: string;
6
9
  required: boolean;
7
10
  disabled: boolean;
8
11
  locale: string;
12
+ /** What the user sees: the value formatted for `locale`, or their raw typing. */
13
+ displayValue: string;
9
14
  error: string;
15
+ /** While focused the user owns the text; prop updates must not overwrite it. */
16
+ private focused;
17
+ /** Hidden native date input; only used as the platform picker's anchor. */
18
+ private nativeInput?;
10
19
  mrdChange: EventEmitter<{
11
20
  name: string;
12
21
  value: string;
@@ -15,7 +24,19 @@ export declare class MrdDateField {
15
24
  name: string;
16
25
  value: string;
17
26
  }>;
18
- private handleChange;
27
+ componentWillLoad(): void;
28
+ valueChanged(newValue: string): void;
29
+ localeChanged(): void;
30
+ private patternPlaceholder;
31
+ /** Parse the typed text, reformat it, and emit the ISO value. */
32
+ private commit;
33
+ private handleFocus;
34
+ private handleInput;
19
35
  private handleBlur;
36
+ private handleKeyDown;
37
+ /** The ISO value currently shown, so the picker opens on the right date. */
38
+ private currentIso;
39
+ private openPicker;
40
+ private handlePickerChange;
20
41
  render(): any;
21
42
  }
@@ -2,12 +2,20 @@ import { EventEmitter } from '../../../stencil-public-runtime';
2
2
  export declare class MrdDatetimeField {
3
3
  name: string;
4
4
  label: string;
5
+ /** UTC ISO string, e.g. '2026-07-06T12:30:00Z'. */
5
6
  value: string;
7
+ /** Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj uu:mm'). */
8
+ placeholder: string;
6
9
  required: boolean;
7
10
  disabled: boolean;
8
11
  locale: string;
12
+ /** What the user sees: the value formatted for `locale`, or their raw typing. */
13
+ displayValue: string;
9
14
  error: string;
10
- localValue: string;
15
+ /** While focused the user owns the text; prop updates must not overwrite it. */
16
+ private focused;
17
+ /** Hidden native datetime-local input; only used as the platform picker's anchor. */
18
+ private nativeInput?;
11
19
  mrdChange: EventEmitter<{
12
20
  name: string;
13
21
  value: string;
@@ -18,9 +26,20 @@ export declare class MrdDatetimeField {
18
26
  }>;
19
27
  componentWillLoad(): void;
20
28
  valueChanged(newVal: string): void;
29
+ localeChanged(): void;
21
30
  private utcToLocal;
22
31
  private localToUtc;
23
- private handleChange;
32
+ private toDisplay;
33
+ private patternPlaceholder;
34
+ /** Parse the typed text, reformat it, and return the UTC value to emit. */
35
+ private commit;
36
+ private handleFocus;
37
+ private handleInput;
24
38
  private handleBlur;
39
+ private handleKeyDown;
40
+ /** The local 'YYYY-MM-DDTHH:mm' currently shown, so the picker opens on the right moment. */
41
+ private currentLocal;
42
+ private openPicker;
43
+ private handlePickerChange;
25
44
  render(): any;
26
45
  }
@@ -20,7 +20,13 @@ export declare class MrdNumberField {
20
20
  name: string;
21
21
  value: number | null;
22
22
  }>;
23
+ /** While focused the user owns the text; prop updates must not overwrite it. */
24
+ private focused;
23
25
  componentWillLoad(): void;
26
+ /** Edit mode loads the record after mount, so the incoming value must re-sync. */
27
+ valueChanged(): void;
28
+ localeChanged(): void;
29
+ private syncFromValue;
24
30
  private formatForDisplay;
25
31
  private handleInput;
26
32
  private handleBlur;
@@ -47,7 +47,14 @@ export declare class MrdRelationField {
47
47
  filterValue?: string;
48
48
  }>;
49
49
  setAllRecords(records: RelationSearchResult[]): Promise<void>;
50
+ /** Href of the current single value. Accepts both a RelationSearchResult
51
+ * (`id`) and the raw API link shape (`{ href, name }`) a host puts in the
52
+ * form values for edit mode — same tolerance as `toSearchResult()`. */
50
53
  private getValueHref;
54
+ /** Push the current value onto the rendered <select>. Options and value arrive
55
+ * independently in edit mode (fetched records vs. the async `values` prop), so
56
+ * this runs on both — whichever lands last completes the preselection. */
57
+ private syncDropdownSelection;
51
58
  allRecordsChanged(): void;
52
59
  setSearchResults(results: RelationSearchResult[]): Promise<void>;
53
60
  setLoading(loading: boolean): Promise<void>;
@@ -91,8 +91,9 @@ export declare class MrdForm {
91
91
  private collectDependentDropdowns;
92
92
  /** Emit mrdFetchAll for every dependent DROPDOWN whose filter value is currently set. */
93
93
  private emitDependentFetchAll;
94
- /** Extract a plain href string from a form value, which can be a string or
95
- * a RelationSearchResult-like object with an `id` field. */
94
+ /** Extract a plain href string from a form value: a string, a
95
+ * RelationSearchResult-like object (`id`), or the raw API link shape
96
+ * (`{ href, name }`) hosts spread into `values` for edit mode. */
96
97
  private getHref;
97
98
  private handleFieldChange;
98
99
  private handleSearch;
@@ -1,6 +1,9 @@
1
1
  import { ClientLayoutItem } from '../../../types/client-layout';
2
2
  /** Key an embedded view is addressed by (setViewPage etc.). */
3
3
  export declare function viewKeyFor(item: ClientLayoutItem): string;
4
+ /** Whether a FIELD/RELATION item stays visible on an OBJECT_DASHBOARD when it
5
+ * has no value. Reads the flat API flag, falling back to the nested wrappers. */
6
+ export declare function showsEmpty(item: ClientLayoutItem): boolean;
4
7
  /** Depth-first flatten of the SECTION/GROUP tree. */
5
8
  export declare function flattenItems(items: ClientLayoutItem[]): ClientLayoutItem[];
6
9
  /** Build the canonical parent href `/{base}/{tenant}/{fromClass}/{parentId}` from
@@ -85,11 +85,17 @@ export namespace Components {
85
85
  * @default ''
86
86
  */
87
87
  "name": string;
88
+ /**
89
+ * Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj').
90
+ * @default ''
91
+ */
92
+ "placeholder": string;
88
93
  /**
89
94
  * @default false
90
95
  */
91
96
  "required": boolean;
92
97
  /**
98
+ * ISO date, 'YYYY-MM-DD'.
93
99
  * @default ''
94
100
  */
95
101
  "value": string;
@@ -111,11 +117,17 @@ export namespace Components {
111
117
  * @default ''
112
118
  */
113
119
  "name": string;
120
+ /**
121
+ * Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj uu:mm').
122
+ * @default ''
123
+ */
124
+ "placeholder": string;
114
125
  /**
115
126
  * @default false
116
127
  */
117
128
  "required": boolean;
118
129
  /**
130
+ * UTC ISO string, e.g. '2026-07-06T12:30:00Z'.
119
131
  * @default ''
120
132
  */
121
133
  "value": string;
@@ -225,6 +237,10 @@ export namespace Components {
225
237
  * Host callback with the uploaded file reference. Builds the create payload from the archetype slots and requests the new document.
226
238
  */
227
239
  "setFileReference": (uri: string) => Promise<void>;
240
+ /**
241
+ * Upload a file into the current target — the selected folder/container, or the only container when there is just one. Called by the host toolbar (mrd-document-container). No-op without a target, or while another upload is still awaiting its setFileReference.
242
+ */
243
+ "uploadFile": (file: File) => Promise<void>;
228
244
  }
229
245
  /**
230
246
  * Archetype-driven single-document view. Given a `commons.document` binding and a
@@ -1157,6 +1173,7 @@ declare global {
1157
1173
  "mrdLoadPage": { nodeId: string; page: number; sort: string; path: string; qs: string };
1158
1174
  "mrdNavigate": { href?: string; label: string; listContext?: ListNavigationContext; attachments?: DocumentAttachment[] };
1159
1175
  "mrdCanCreate": boolean;
1176
+ "mrdTargetLabel": string;
1160
1177
  "mrdUpdateObject": { href: string; values: Record<string, unknown> };
1161
1178
  "mrdUpload": { file: File };
1162
1179
  "mrdCreateObject": { path: string; values: Record<string, unknown> };
@@ -1732,11 +1749,17 @@ declare namespace LocalJSX {
1732
1749
  "name"?: string;
1733
1750
  "onMrdBlur"?: (event: MrdDateFieldCustomEvent<{ name: string; value: string }>) => void;
1734
1751
  "onMrdChange"?: (event: MrdDateFieldCustomEvent<{ name: string; value: string }>) => void;
1752
+ /**
1753
+ * Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj').
1754
+ * @default ''
1755
+ */
1756
+ "placeholder"?: string;
1735
1757
  /**
1736
1758
  * @default false
1737
1759
  */
1738
1760
  "required"?: boolean;
1739
1761
  /**
1762
+ * ISO date, 'YYYY-MM-DD'.
1740
1763
  * @default ''
1741
1764
  */
1742
1765
  "value"?: string;
@@ -1760,11 +1783,17 @@ declare namespace LocalJSX {
1760
1783
  "name"?: string;
1761
1784
  "onMrdBlur"?: (event: MrdDatetimeFieldCustomEvent<{ name: string; value: string }>) => void;
1762
1785
  "onMrdChange"?: (event: MrdDatetimeFieldCustomEvent<{ name: string; value: string }>) => void;
1786
+ /**
1787
+ * Overrides the locale-derived pattern placeholder (e.g. 'dd-mm-jjjj uu:mm').
1788
+ * @default ''
1789
+ */
1790
+ "placeholder"?: string;
1763
1791
  /**
1764
1792
  * @default false
1765
1793
  */
1766
1794
  "required"?: boolean;
1767
1795
  /**
1796
+ * UTC ISO string, e.g. '2026-07-06T12:30:00Z'.
1768
1797
  * @default ''
1769
1798
  */
1770
1799
  "value"?: string;
@@ -1901,6 +1930,10 @@ declare namespace LocalJSX {
1901
1930
  * A document row was clicked. Host routes to the document object page. `listContext` can be used to re-fetch this exact record (or its neighbours) via `{path}?{qs}&page={index}&size=1`. `attachments` is a prefetch of the clicked row's own file slot (derived from `archetype`) so the host can render a preview immediately, without waiting for the navigated-to page's own mrdAttachments — see TASK-0169 / FINDING-0111.
1902
1931
  */
1903
1932
  "onMrdNavigate"?: (event: MrdDocumentListCustomEvent<{ href?: string; label: string; listContext?: ListNavigationContext; attachments?: DocumentAttachment[] }>) => void;
1933
+ /**
1934
+ * Emitted whenever the current target changes: the folder path a new folder or upload lands in, or the container's label when no folder is selected. Empty when there is no target. Lets a host toolbar name the destination.
1935
+ */
1936
+ "onMrdTargetLabel"?: (event: MrdDocumentListCustomEvent<string>) => void;
1904
1937
  /**
1905
1938
  * Generic "update an existing object" request — fired when a document is dragged into another folder/container. Host PATCHes `href` with `values` (no move/folder knowledge needed). `values` carries the new folder string (or null for the container root) and, on a cross-container move, the new container relation href.
1906
1939
  */
@@ -2740,6 +2773,7 @@ declare namespace LocalJSX {
2740
2773
  "name": string;
2741
2774
  "label": string;
2742
2775
  "value": string;
2776
+ "placeholder": string;
2743
2777
  "required": boolean;
2744
2778
  "disabled": boolean;
2745
2779
  "locale": string;
@@ -2748,6 +2782,7 @@ declare namespace LocalJSX {
2748
2782
  "name": string;
2749
2783
  "label": string;
2750
2784
  "value": string;
2785
+ "placeholder": string;
2751
2786
  "required": boolean;
2752
2787
  "disabled": boolean;
2753
2788
  "locale": string;
@@ -139,6 +139,8 @@ export interface ClientLayoutItemField {
139
139
  /** Aggregate function to render in the table totals row. */
140
140
  aggregate?: 'sum' | 'avg' | 'count' | null;
141
141
  historyEnabled?: boolean;
142
+ /** Render the item on an OBJECT_DASHBOARD even when it has no value. */
143
+ showEmpty?: boolean;
142
144
  }
143
145
  /** Response shape from the /aggregations endpoint. */
144
146
  export interface AggregationResult {
@@ -160,6 +162,8 @@ export interface ClientLayoutItemRelation {
160
162
  multiple?: boolean;
161
163
  defaultValue?: string | null;
162
164
  dropdownValues?: ClientListValue[];
165
+ /** Render the item on an OBJECT_DASHBOARD even when it has no value. */
166
+ showEmpty?: boolean;
163
167
  }
164
168
  export interface ClientLayoutItemNavigate {
165
169
  dataClass: string;
@@ -238,6 +242,9 @@ export interface ClientLayoutItem {
238
242
  decimalPrecision?: number;
239
243
  currencyCode?: string;
240
244
  historyEnabled?: boolean;
245
+ /** FIELD / RELATION — render the item on an OBJECT_DASHBOARD even when it has
246
+ * no value, instead of hiding it (the default). */
247
+ showEmpty?: boolean;
241
248
  relatedClass?: string;
242
249
  mostSignificantClass?: string;
243
250
  displayType?: ClientLayoutItemRelationDisplayType;
@@ -4,4 +4,38 @@ export declare function formatPercentage(value: number, locale: string, decimalP
4
4
  export declare function formatDate(value: string | Date, locale: string): string;
5
5
  export declare function formatDateTime(value: string | Date, locale: string): string;
6
6
  export declare function formatTime(value: string, locale: string): string;
7
+ /** Tokens used to build the input placeholder, e.g. { day: 'dd', month: 'mm', year: 'jjjj' }. */
8
+ export interface DatePatternTokens {
9
+ day: string;
10
+ month: string;
11
+ year: string;
12
+ hour?: string;
13
+ minute?: string;
14
+ }
15
+ /**
16
+ * Placeholder showing the locale's date order, e.g. 'dd-mm-jjjj' (nl-NL) or
17
+ * 'mm/dd/yyyy' (en-US). Pass `hour`/`minute` tokens to include the time part.
18
+ */
19
+ export declare function localeDatePattern(locale: string, tokens: DatePatternTokens): string;
20
+ /**
21
+ * Parses a date the user typed in their own locale format → 'YYYY-MM-DD'.
22
+ * Accepts any separator, one- or two-digit day/month, two-digit years, and
23
+ * plain ISO input (pasted values). Returns null when it is not a valid date.
24
+ */
25
+ export declare function parseLocalizedDate(input: string, locale: string): string | null;
26
+ /**
27
+ * Parses a date+time the user typed in their own locale format →
28
+ * 'YYYY-MM-DDTHH:mm' in local time (the shape mrd-datetime-field converts to
29
+ * UTC before emitting). A missing time defaults to 00:00; am/pm is recognised
30
+ * both in English and in the locale's own markers.
31
+ */
32
+ export declare function parseLocalizedDateTime(input: string, locale: string): string | null;
33
+ /**
34
+ * 'YYYY-MM-DD' → localized display string. Parsed as a *local* date, unlike
35
+ * formatDate(), which would read a date-only string as UTC midnight and shift
36
+ * the day in negative-offset timezones.
37
+ */
38
+ export declare function formatIsoDate(iso: string, locale: string): string;
39
+ /** 'YYYY-MM-DDTHH:mm' in local time → localized display string. */
40
+ export declare function formatLocalDateTime(local: string, locale: string): string;
7
41
  export declare function parseLocalizedNumber(str: string, locale: string): number | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmlogic/components",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "Stencil.js web component library for dynamic forms and virtual-scroll data tables",
5
5
  "license": "MIT",
6
6
  "author": "Mosterd",