@mmlogic/components 0.3.6 → 0.3.8

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 (161) hide show
  1. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  2. package/dist/cjs/index-BPj2cBXs.js +1570 -0
  3. package/dist/cjs/index.cjs.js +66 -0
  4. package/dist/cjs/loader.cjs.js +13 -0
  5. package/dist/cjs/mosterdcomponents.cjs.js +25 -0
  6. package/dist/cjs/mrd-boolean-field_20.cjs.entry.js +3961 -0
  7. package/dist/cjs/quill-DmFfnC1f.js +16272 -0
  8. package/dist/collection/collection-manifest.json +32 -0
  9. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.js +199 -0
  10. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.scss +77 -0
  11. package/dist/collection/components/mrd-currency-field/mrd-currency-field.js +248 -0
  12. package/dist/collection/components/mrd-currency-field/mrd-currency-field.scss +100 -0
  13. package/dist/collection/components/mrd-date-field/mrd-date-field.js +206 -0
  14. package/dist/collection/components/mrd-date-field/mrd-date-field.scss +66 -0
  15. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.js +240 -0
  16. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.scss +66 -0
  17. package/dist/collection/components/mrd-email-field/mrd-email-field.js +230 -0
  18. package/dist/collection/components/mrd-email-field/mrd-email-field.scss +69 -0
  19. package/dist/{mosterdcomponents/mrd-field.entry.js → collection/components/mrd-field/mrd-field.js} +179 -28
  20. package/dist/collection/components/mrd-field/mrd-field.scss +118 -0
  21. package/dist/collection/components/mrd-file-field/mrd-file-field.js +341 -0
  22. package/dist/collection/components/mrd-file-field/mrd-file-field.scss +153 -0
  23. package/dist/{mosterdcomponents/mrd-form.entry.js → collection/components/mrd-form/mrd-form.js} +308 -31
  24. package/dist/collection/components/mrd-form/mrd-form.scss +148 -0
  25. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.js +291 -0
  26. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.scss +91 -0
  27. package/dist/collection/components/mrd-image-field/mrd-image-field.js +356 -0
  28. package/dist/collection/components/mrd-image-field/mrd-image-field.scss +190 -0
  29. package/dist/{mosterdcomponents/mrd-layout-section.entry.js → collection/components/mrd-layout-section/mrd-layout-section.js} +420 -33
  30. package/dist/collection/components/mrd-layout-section/mrd-layout-section.scss +445 -0
  31. package/dist/collection/components/mrd-list-field/mrd-list-field.js +313 -0
  32. package/dist/collection/components/mrd-list-field/mrd-list-field.scss +109 -0
  33. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.js +227 -0
  34. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.scss +78 -0
  35. package/dist/collection/components/mrd-number-field/mrd-number-field.js +316 -0
  36. package/dist/collection/components/mrd-number-field/mrd-number-field.scss +77 -0
  37. package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +707 -0
  38. package/dist/collection/components/mrd-relation-field/mrd-relation-field.scss +266 -0
  39. package/dist/collection/components/mrd-secret-field/mrd-secret-field.js +229 -0
  40. package/dist/collection/components/mrd-secret-field/mrd-secret-field.scss +73 -0
  41. package/dist/{mosterdcomponents/mrd-table.entry.js → collection/components/mrd-table/mrd-table.js} +394 -32
  42. package/dist/collection/components/mrd-table/mrd-table.scss +809 -0
  43. package/dist/collection/components/mrd-text-field/mrd-text-field.js +227 -0
  44. package/dist/collection/components/mrd-text-field/mrd-text-field.scss +69 -0
  45. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.js +267 -0
  46. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.scss +79 -0
  47. package/dist/collection/components/mrd-time-field/mrd-time-field.js +206 -0
  48. package/dist/collection/components/mrd-time-field/mrd-time-field.scss +66 -0
  49. package/dist/collection/dev/api.js +145 -0
  50. package/dist/collection/dev/app.js +890 -0
  51. package/dist/collection/dev/auth.js +156 -0
  52. package/dist/collection/dev/example-data.js +403 -0
  53. package/dist/collection/dev/sprites.svg +55 -0
  54. package/dist/collection/index.js +1 -0
  55. package/dist/collection/types/client-layout.js +64 -0
  56. package/dist/collection/types/index.js +1 -0
  57. package/dist/{mosterdcomponents/cell-renderer-CbRwLOo8.js → collection/utils/cell-renderer.js} +3 -9
  58. package/dist/{mosterdcomponents/format-BAfsQfy1.js → collection/utils/format.js} +7 -12
  59. package/dist/{mosterdcomponents/i18n-hoGGKbKU.js → collection/utils/i18n.js} +1 -6
  60. package/dist/{mosterdcomponents/validation-ixb43cqU.js → collection/utils/validation.js} +5 -12
  61. package/dist/components/client-layout.js +1 -0
  62. package/dist/components/format.js +1 -0
  63. package/dist/components/i18n.js +1 -0
  64. package/dist/components/index.js +1 -0
  65. package/dist/components/mrd-boolean-field.js +1 -0
  66. package/dist/components/mrd-boolean-field2.js +1 -0
  67. package/dist/components/mrd-currency-field.js +1 -0
  68. package/dist/components/mrd-currency-field2.js +1 -0
  69. package/dist/components/mrd-date-field.js +1 -0
  70. package/dist/components/mrd-date-field2.js +1 -0
  71. package/dist/components/mrd-datetime-field.js +1 -0
  72. package/dist/components/mrd-datetime-field2.js +1 -0
  73. package/dist/components/mrd-email-field.js +1 -0
  74. package/dist/components/mrd-email-field2.js +1 -0
  75. package/dist/components/mrd-field.js +1 -0
  76. package/dist/components/mrd-field2.js +1 -0
  77. package/dist/components/mrd-file-field.js +1 -0
  78. package/dist/components/mrd-file-field2.js +1 -0
  79. package/dist/components/mrd-form.js +1 -0
  80. package/dist/components/mrd-hyperlink-field.js +1 -0
  81. package/dist/components/mrd-hyperlink-field2.js +1 -0
  82. package/dist/components/mrd-image-field.js +1 -0
  83. package/dist/components/mrd-image-field2.js +1 -0
  84. package/dist/components/mrd-layout-section.js +1 -0
  85. package/dist/components/mrd-list-field.js +1 -0
  86. package/dist/components/mrd-list-field2.js +1 -0
  87. package/dist/components/mrd-longtext-field.js +1 -0
  88. package/dist/components/mrd-longtext-field2.js +1 -0
  89. package/dist/components/mrd-number-field.js +1 -0
  90. package/dist/components/mrd-number-field2.js +1 -0
  91. package/dist/components/mrd-relation-field.js +1 -0
  92. package/dist/components/mrd-relation-field2.js +1 -0
  93. package/dist/components/mrd-secret-field.js +1 -0
  94. package/dist/components/mrd-secret-field2.js +1 -0
  95. package/dist/components/mrd-table.js +1 -0
  96. package/dist/components/mrd-table2.js +1 -0
  97. package/dist/components/mrd-text-field.js +1 -0
  98. package/dist/components/mrd-text-field2.js +1 -0
  99. package/dist/components/mrd-textarea-field.js +1 -0
  100. package/dist/components/mrd-textarea-field2.js +1 -0
  101. package/dist/components/mrd-time-field.js +1 -0
  102. package/dist/components/mrd-time-field2.js +1 -0
  103. package/dist/components/quill.js +1 -0
  104. package/dist/components/validation.js +1 -0
  105. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  106. package/dist/esm/index-_tsCCkAi.js +1561 -0
  107. package/dist/{mosterdcomponents/client-layout-D88nn5zf.js → esm/index.js} +1 -4
  108. package/dist/esm/loader.js +11 -0
  109. package/dist/esm/mosterdcomponents.js +21 -0
  110. package/dist/esm/mrd-boolean-field_20.entry.js +3940 -0
  111. package/dist/{mosterdcomponents/quill-C9pgw_k-.js → esm/quill-CiuCgGz_.js} +1347 -16232
  112. package/dist/index.cjs.js +1 -0
  113. package/dist/index.js +1 -0
  114. package/dist/mosterdcomponents/index-6yQUNVww.js.map +1 -0
  115. package/dist/mosterdcomponents/index.esm.js +1 -5
  116. package/dist/mosterdcomponents/mosterdcomponents.css +1 -180
  117. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -50
  118. package/dist/mosterdcomponents/p-7bfaee51.entry.js +1 -0
  119. package/dist/mosterdcomponents/p-CiuCgGz_.js +1 -0
  120. package/dist/mosterdcomponents/p-DQuL1Twl.js +1 -0
  121. package/dist/mosterdcomponents/p-_tsCCkAi.js +2 -0
  122. package/package.json +1 -1
  123. package/dist/mosterdcomponents/index-B_tPFIvS.js +0 -4585
  124. package/dist/mosterdcomponents/index-B_tPFIvS.js.map +0 -1
  125. package/dist/mosterdcomponents/index-I5SuYv7a.js +0 -4
  126. package/dist/mosterdcomponents/mrd-boolean-field.entry.js +0 -37
  127. package/dist/mosterdcomponents/mrd-boolean-field.entry.js.map +0 -1
  128. package/dist/mosterdcomponents/mrd-currency-field.entry.js +0 -67
  129. package/dist/mosterdcomponents/mrd-currency-field.entry.js.map +0 -1
  130. package/dist/mosterdcomponents/mrd-date-field.entry.js +0 -46
  131. package/dist/mosterdcomponents/mrd-date-field.entry.js.map +0 -1
  132. package/dist/mosterdcomponents/mrd-datetime-field.entry.js +0 -78
  133. package/dist/mosterdcomponents/mrd-datetime-field.entry.js.map +0 -1
  134. package/dist/mosterdcomponents/mrd-email-field.entry.js +0 -50
  135. package/dist/mosterdcomponents/mrd-email-field.entry.js.map +0 -1
  136. package/dist/mosterdcomponents/mrd-field.entry.js.map +0 -1
  137. package/dist/mosterdcomponents/mrd-file-field.entry.js +0 -108
  138. package/dist/mosterdcomponents/mrd-file-field.entry.js.map +0 -1
  139. package/dist/mosterdcomponents/mrd-form.entry.js.map +0 -1
  140. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js +0 -87
  141. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js.map +0 -1
  142. package/dist/mosterdcomponents/mrd-image-field.entry.js +0 -122
  143. package/dist/mosterdcomponents/mrd-image-field.entry.js.map +0 -1
  144. package/dist/mosterdcomponents/mrd-layout-section.entry.js.map +0 -1
  145. package/dist/mosterdcomponents/mrd-list-field.entry.js +0 -107
  146. package/dist/mosterdcomponents/mrd-list-field.entry.js.map +0 -1
  147. package/dist/mosterdcomponents/mrd-longtext-field.entry.js +0 -47
  148. package/dist/mosterdcomponents/mrd-longtext-field.entry.js.map +0 -1
  149. package/dist/mosterdcomponents/mrd-number-field.entry.js +0 -87
  150. package/dist/mosterdcomponents/mrd-number-field.entry.js.map +0 -1
  151. package/dist/mosterdcomponents/mrd-relation-field.entry.js +0 -267
  152. package/dist/mosterdcomponents/mrd-relation-field.entry.js.map +0 -1
  153. package/dist/mosterdcomponents/mrd-secret-field.entry.js +0 -49
  154. package/dist/mosterdcomponents/mrd-secret-field.entry.js.map +0 -1
  155. package/dist/mosterdcomponents/mrd-table.entry.js.map +0 -1
  156. package/dist/mosterdcomponents/mrd-text-field.entry.js +0 -47
  157. package/dist/mosterdcomponents/mrd-text-field.entry.js.map +0 -1
  158. package/dist/mosterdcomponents/mrd-textarea-field.entry.js +0 -86
  159. package/dist/mosterdcomponents/mrd-textarea-field.entry.js.map +0 -1
  160. package/dist/mosterdcomponents/mrd-time-field.entry.js +0 -46
  161. package/dist/mosterdcomponents/mrd-time-field.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"file":"mrd-file-field.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-file-field/mrd-file-field.scss?tag=mrd-file-field&encapsulation=scoped","src/components/mrd-file-field/mrd-file-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-file-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-file-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-file-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-file-field__zone {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--mrd-space-6);\n border: 2px dashed var(--mrd-border-color);\n border-radius: var(--mrd-border-radius-md);\n background-color: var(--mrd-color-neutral-50);\n cursor: pointer;\n transition: border-color var(--mrd-transition), background-color var(--mrd-transition);\n min-height: 100px;\n position: relative;\n}\n\n.mrd-file-field__zone:hover {\n border-color: var(--mrd-color-primary);\n background-color: var(--mrd-color-primary-light);\n}\n\n.mrd-file-field__zone--dragging {\n border-color: var(--mrd-color-primary);\n background-color: var(--mrd-color-primary-light);\n}\n\n.mrd-file-field__zone--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-file-field__zone--disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.mrd-file-field__zone--disabled:hover {\n border-color: var(--mrd-border-color);\n background-color: var(--mrd-color-neutral-50);\n}\n\n.mrd-file-field__input {\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n pointer-events: none;\n}\n\n.mrd-file-field__prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mrd-space-2);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-500);\n text-align: center;\n}\n\n.mrd-file-field__upload-icon {\n width: 32px;\n height: 32px;\n color: var(--mrd-color-neutral-400);\n}\n\n.mrd-file-field__browse {\n color: var(--mrd-color-primary);\n font-weight: var(--mrd-font-weight-medium);\n text-decoration: underline;\n}\n\n.mrd-file-field__selected {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-2);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-700);\n}\n\n.mrd-file-field__icon {\n width: 20px;\n height: 20px;\n color: var(--mrd-color-primary);\n flex-shrink: 0;\n}\n\n.mrd-file-field__filename {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 200px;\n}\n\n.mrd-file-field__clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mrd-color-neutral-400);\n font-size: var(--mrd-font-size-sm);\n padding: var(--mrd-space-1);\n border-radius: var(--mrd-border-radius-sm);\n line-height: 1;\n}\n\n.mrd-file-field__clear:hover {\n color: var(--mrd-color-danger);\n background-color: var(--mrd-color-danger-light);\n}\n\n.mrd-file-field__spinner {\n display: inline-block;\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n border: 2px solid var(--mrd-color-neutral-300);\n border-top-color: var(--mrd-color-primary);\n border-radius: 50%;\n animation: mrd-file-spin 0.6s linear infinite;\n}\n\n@keyframes mrd-file-spin { to { transform: rotate(360deg); } }\n\n.mrd-file-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\nimport { t } from '../../utils/i18n';\n\n@Component({\n tag: 'mrd-file-field',\n styleUrl: 'mrd-file-field.scss',\n scoped: true,\n})\nexport class MrdFileField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: unknown = null;\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n @Prop() accept: string = '';\n @Prop() maxSize: number = 0; // bytes, 0 = no limit\n\n @State() fileName: string = '';\n @State() isDragging: boolean = false;\n @State() uploading: boolean = false;\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: File | null }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: File | null }>;\n /** Emitted when a file is selected and needs to be uploaded.\n * Host should upload the file and call form.setFieldValue(name, uri) with the result. */\n @Event() mrdUpload!: EventEmitter<{ name: string; file: File }>;\n\n private fileInputRef!: HTMLInputElement;\n\n /** When the host provides a URI back via setFieldValue, the upload is done. */\n @Watch('value')\n valueChanged(newVal: unknown) {\n if (typeof newVal === 'string' && newVal) {\n this.uploading = false;\n } else if (!newVal) {\n this.uploading = false;\n this.fileName = '';\n }\n }\n\n private handleFile(file: File | null) {\n if (!file) {\n this.fileName = '';\n this.uploading = false;\n this.mrdChange.emit({ name: this.name, value: null });\n return;\n }\n if (this.maxSize > 0 && file.size > this.maxSize) {\n this.error = t('file_too_large', this.locale);\n return;\n }\n this.error = '';\n this.fileName = file.name;\n this.uploading = true;\n this.mrdChange.emit({ name: this.name, value: file });\n this.mrdUpload.emit({ name: this.name, file });\n }\n\n private handleInputChange = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n this.handleFile(files?.[0] ?? null);\n };\n\n private handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n this.isDragging = true;\n };\n\n private handleDragLeave = () => {\n this.isDragging = false;\n };\n\n private handleDrop = (e: DragEvent) => {\n e.preventDefault();\n this.isDragging = false;\n const file = e.dataTransfer?.files?.[0] ?? null;\n this.handleFile(file);\n };\n\n private handleZoneClick = () => {\n if (!this.disabled && !this.uploading) {\n this.fileInputRef?.click();\n }\n };\n\n private handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n this.fileName = '';\n this.error = '';\n this.uploading = false;\n if (this.fileInputRef) this.fileInputRef.value = '';\n this.mrdChange.emit({ name: this.name, value: null });\n };\n\n render() {\n const hasFile = this.uploading || (typeof this.value === 'string' && this.value) || this.fileName;\n const hasError = !!this.error;\n const zoneClass = [\n 'mrd-file-field__zone',\n this.isDragging ? 'mrd-file-field__zone--dragging' : '',\n hasError ? 'mrd-file-field__zone--error' : '',\n this.disabled || this.uploading ? 'mrd-file-field__zone--disabled' : '',\n ].filter(Boolean).join(' ');\n\n return (\n <Host>\n <div class=\"mrd-file-field\">\n {this.label && (\n <label class={`mrd-file-field__label${this.required ? ' mrd-file-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <div\n class={zoneClass}\n onClick={this.handleZoneClick}\n onDragOver={this.handleDragOver}\n onDragLeave={this.handleDragLeave}\n onDrop={this.handleDrop}\n >\n <input\n ref={el => (this.fileInputRef = el as HTMLInputElement)}\n class=\"mrd-file-field__input\"\n type=\"file\"\n name={this.name}\n accept={this.accept}\n disabled={this.disabled || this.uploading}\n required={this.required && !hasFile}\n onChange={this.handleInputChange}\n />\n {hasFile ? (\n <div class=\"mrd-file-field__selected\">\n {this.uploading ? (\n <span class=\"mrd-file-field__spinner\" aria-label={t('loading', this.locale)} />\n ) : (\n <svg class=\"mrd-file-field__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <polyline points=\"14 2 14 8 20 8\"/>\n </svg>\n )}\n <span class=\"mrd-file-field__filename\">{this.fileName}</span>\n {!this.uploading && (\n <button class=\"mrd-file-field__clear\" type=\"button\" onClick={this.handleClear} aria-label={t('clear', this.locale)}>\n ✕\n </button>\n )}\n </div>\n ) : (\n <div class=\"mrd-file-field__prompt\">\n <svg class=\"mrd-file-field__upload-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"16 16 12 12 8 16\"/>\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"/>\n <path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"/>\n </svg>\n <span>\n {t('drop_file_here', this.locale)}{' '}\n <span class=\"mrd-file-field__browse\">{t('browse', this.locale)}</span>\n </span>\n </div>\n )}\n </div>\n {hasError && <span class=\"mrd-file-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"mrd-form.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-form/mrd-form.scss?tag=mrd-form&encapsulation=scoped","src/components/mrd-form/mrd-form.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-form {\n font-family: var(--mrd-font-family);\n width: 100%;\n}\n\n.mrd-form__title {\n font-size: var(--mrd-font-size-2xl);\n font-weight: var(--mrd-font-weight-bold);\n color: var(--mrd-color-neutral-900);\n margin: 0 0 var(--mrd-space-6) 0;\n}\n\n.mrd-form__body {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-5);\n}\n\n.mrd-form__field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n}\n\n.mrd-form__field-error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n\n.mrd-form__section {\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius-md);\n padding: var(--mrd-space-4) var(--mrd-space-5);\n margin: 0;\n}\n\n.mrd-form__section-legend {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-700);\n padding: 0 var(--mrd-space-2);\n}\n\n.mrd-form__section-body {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-4);\n margin-top: var(--mrd-space-2);\n}\n\n.mrd-form__group {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-2);\n}\n\n.mrd-form__group-label {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-500);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.mrd-form__group-body {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-4);\n padding-left: var(--mrd-space-4);\n border-left: 3px solid var(--mrd-color-neutral-200);\n}\n\n.mrd-form__footer {\n margin-top: var(--mrd-space-8);\n padding-top: var(--mrd-space-5);\n border-top: var(--mrd-border-width) solid var(--mrd-border-color);\n display: flex;\n justify-content: flex-end;\n gap: var(--mrd-space-3);\n}\n\n.mrd-form__submit {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--mrd-input-height);\n padding: 0 var(--mrd-space-6);\n background-color: var(--mrd-color-primary);\n color: var(--mrd-color-white);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-medium);\n border: none;\n border-radius: var(--mrd-border-radius);\n cursor: pointer;\n transition: background-color var(--mrd-transition);\n}\n\n.mrd-form__submit:hover {\n background-color: var(--mrd-color-primary-hover);\n}\n\n.mrd-form__submit:focus {\n outline: none;\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-form__submit:active {\n background-color: var(--mrd-color-primary-dark);\n}\n\n.mrd-form__cancel {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--mrd-input-height);\n padding: 0 var(--mrd-space-6);\n background-color: transparent;\n color: var(--mrd-color-neutral-600);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-medium);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n cursor: pointer;\n transition: background-color var(--mrd-transition), color var(--mrd-transition);\n}\n\n.mrd-form__cancel:hover {\n background-color: var(--mrd-color-neutral-100);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-form__cancel:focus {\n outline: none;\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-form__cancel:active {\n background-color: var(--mrd-color-neutral-200);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Method, Watch } from '@stencil/core';\nimport { ClientLayout, ClientLayoutItem, ClientLayoutItemFieldDataType, ClientLayoutItemType, ClientLayoutItemRelationEditBehavior, RelationSearchResult } from '../../types';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\n\n@Component({\n tag: 'mrd-form',\n styleUrl: 'mrd-form.scss',\n scoped: true,\n})\nexport class MrdForm {\n @Prop() layout!: ClientLayout;\n @Prop() locale: string = navigator.language;\n @Prop() values: Record<string, unknown> = {};\n /**\n * Absolute href of the parent/reference object (e.g. the clientAgreement href\n * when creating an invoice from within a client agreement).\n * Combined with `referenceClass`, mrd-form will automatically pre-fill the\n * matching relation field so dependent DROPDOWN fields can be fetched on load\n * — without the host app needing to know anything about the form layout.\n */\n /**\n * Absolute href of the parent/reference object (e.g. the clientAgreement href\n * when creating an invoice from within a client agreement).\n * Combined with `referenceClass`, mrd-form will automatically pre-fill the\n * matching relation field so dependent DROPDOWN fields can be fetched on load.\n */\n @Prop() referenceHref: string = '';\n /**\n * The `mostSignificantClass` of the parent/reference object\n * (e.g. `'clientAgreements'`). Used to locate the matching RELATION field.\n */\n @Prop() referenceClass: string = '';\n /** When true, a cancel button is shown next to the submit button. */\n @Prop() showCancel: boolean = false;\n /**\n * The currently logged-in user, resolved by the host via /accounts/me.\n * Used to pre-fill RELATION fields whose defaultValue is \"@me\".\n * May be null when not authenticated or not yet resolved.\n */\n @Prop() me: RelationSearchResult | null = null;\n\n @State() formValues: Record<string, unknown> = {};\n @State() errors: Record<string, string> = {};\n @State() submitted: boolean = false;\n\n private initialValues: Record<string, unknown> = {};\n\n @Event() mrdSubmit!: EventEmitter<Record<string, unknown>>;\n @Event() mrdCancel!: EventEmitter<void>;\n @Event() mrdSearch!: EventEmitter<{ name: string; query: string; relatedClass: string }>;\n @Event() mrdFetchAll!: EventEmitter<{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }>;\n @Event() mrdUpload!: EventEmitter<{ name: string; file: File }>;\n\n componentWillLoad() {\n this.initialValues = { ...(this.values ?? {}) };\n this.formValues = { ...(this.values ?? {}) };\n this.applyDefaultValues();\n }\n\n componentDidLoad() {\n // Apply reference pre-fill and emit mrdFetchAll for dependent DROPDOWN fields.\n // Deferred so Angular/host prop bindings are settled before we read them.\n setTimeout(() => {\n this.applyReferenceValue();\n this.emitDependentFetchAll();\n }, 0);\n }\n\n /** Sync formValues when the values prop is set from outside after mount\n * (e.g. when pre-filling an existing record in edit mode). */\n @Watch('values')\n valuesChanged(newValues: Record<string, unknown>) {\n this.initialValues = { ...(newValues ?? {}) };\n this.formValues = { ...(newValues ?? {}) };\n this.applyReferenceValue();\n this.applyDefaultValues();\n this.errors = {};\n this.submitted = false;\n // Re-check DROPDOWN dependencies now that formValues are updated\n setTimeout(() => this.emitDependentFetchAll(), 0);\n }\n\n /** Re-apply @me defaults when the me prop arrives after mount. */\n @Watch('me')\n meChanged() {\n this.applyDefaultValues();\n }\n\n /** Apply defaultValue from layout items to fields that have no value yet.\n * Tokens: today() → YYYY-MM-DD, now() → YYYY-MM-DDTHH:mm, @me → this.me. */\n private applyDefaultValues() {\n const allFields = this.collectFields(this.layout?.items ?? []);\n const updates: Record<string, unknown> = {};\n\n for (const item of allFields) {\n if (!item.name) continue;\n const current = this.formValues[item.name];\n if (current != null && current !== '') continue;\n\n const dv = item.defaultValue ?? item.field?.defaultValue ?? item.relation?.defaultValue;\n if (!dv) continue;\n\n if (item.type === ClientLayoutItemType.FIELD) {\n const resolved = this.resolveFieldDefault(dv, item.dataType ?? item.field?.dataType);\n if (resolved != null) updates[item.name] = resolved;\n } else if (item.type === ClientLayoutItemType.RELATION) {\n if (dv === 'me()' && this.me) {\n updates[item.name] = this.me;\n }\n }\n }\n\n if (Object.keys(updates).length > 0) {\n this.formValues = { ...this.formValues, ...updates };\n }\n }\n\n private resolveFieldDefault(dv: string, _dataType?: ClientLayoutItemFieldDataType): unknown {\n if (dv === 'today()') {\n return new Date().toISOString().slice(0, 10);\n }\n if (dv === 'now()') {\n return new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n }\n return dv;\n }\n\n /**\n * When referenceHref + referenceClass are set, find the matching layout field\n * and inject its value into formValues. This allows dependent DROPDOWN fields\n * (those with commonRelation pointing to that field) to be fetched on load\n * without the host app doing any form-domain logic.\n *\n * Two lookup strategies:\n * 1. Find a RELATION whose mostSignificantClass matches referenceClass.\n * 2. Fallback: find a DROPDOWN whose commonRelation field is absent from the\n * layout (API omitted it because it is implied by the reference context).\n */\n private applyReferenceValue() {\n if (!this.referenceHref || !this.referenceClass) return;\n const fieldName = this.resolveReferenceFieldName();\n if (!fieldName) return;\n // Only set when not already present (don't overwrite an explicit value)\n if (!this.formValues[fieldName]) {\n this.formValues = { ...this.formValues, [fieldName]: this.referenceHref };\n }\n }\n\n private resolveReferenceFieldName(): string | null {\n const allItems = this.collectFields(this.layout?.items ?? []);\n\n // Strategy 1: direct match on mostSignificantClass\n const direct = allItems.find(\n item =>\n item.type === ClientLayoutItemType.RELATION &&\n item.mostSignificantClass === this.referenceClass,\n );\n if (direct?.name) return direct.name;\n\n // Strategy 2: a DROPDOWN whose commonRelation field was omitted from the layout\n const layoutRelationNames = new Set(\n allItems\n .filter(item => item.type === ClientLayoutItemType.RELATION)\n .map(item => item.name!),\n );\n for (const item of allItems) {\n if (\n item.type === ClientLayoutItemType.RELATION &&\n item.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN &&\n item.commonRelation &&\n !layoutRelationNames.has(item.commonRelation)\n ) {\n return item.commonRelation;\n }\n }\n\n return null;\n }\n\n @Method()\n async setFieldValue(name: string, value: unknown) {\n this.formValues = { ...this.formValues, [name]: value };\n if (this.errors[name]) {\n this.errors = { ...this.errors, [name]: '' };\n }\n }\n\n /** Collect all RELATION items that use editBehavior=DROPDOWN with a commonRelation. */\n private collectDependentDropdowns(): ClientLayoutItem[] {\n return this.collectFields(this.layout?.items ?? [])\n .filter(item =>\n item.type === ClientLayoutItemType.RELATION &&\n item.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN &&\n !!item.commonRelation,\n );\n }\n\n /** Emit mrdFetchAll for every dependent DROPDOWN whose filter value is currently set. */\n private emitDependentFetchAll() {\n for (const item of this.collectDependentDropdowns()) {\n const filterValue = this.getHref(this.formValues[item.commonRelation!]);\n if (filterValue) {\n this.mrdFetchAll.emit({\n name: item.name!,\n relatedClass: item.relatedClass!,\n mostSignificantClass: item.mostSignificantClass,\n commonRelation: item.commonRelation,\n filter: item.commonRelation + '_href',\n filterValue,\n });\n }\n }\n }\n\n /** Extract a plain href string from a form value, which can be a string or\n * a RelationSearchResult-like object with an `id` field. */\n private getHref(value: unknown): string {\n if (!value) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && 'id' in (value as object)) return (value as { id: string }).id;\n return '';\n }\n\n private handleFieldChange = (e: CustomEvent<{ name: string; value: unknown }>) => {\n const { name, value } = e.detail;\n const prevHref = this.getHref(this.formValues[name]);\n this.formValues = { ...this.formValues, [name]: value };\n if (this.errors[name]) {\n this.errors = { ...this.errors, [name]: '' };\n }\n\n // When a field changes, check if it is the commonRelation dependency for any\n // DROPDOWN relation. If so, reset the dependent field and re-fetch its options.\n // Skip when the effective href did not change (e.g. mrdBlur fires after mrdChange\n // with the same value, which would otherwise trigger a duplicate fetch).\n const newHref = this.getHref(value);\n if (newHref === prevHref) return;\n\n for (const item of this.collectDependentDropdowns()) {\n if (item.commonRelation !== name) continue;\n\n // Clear the dependent field's current selection (options have changed)\n this.formValues = { ...this.formValues, [item.name!]: null };\n\n this.mrdFetchAll.emit({\n name: item.name!,\n relatedClass: item.relatedClass!,\n mostSignificantClass: item.mostSignificantClass,\n commonRelation: item.commonRelation,\n filter: item.commonRelation + '_href',\n filterValue: newHref, // empty string when dependency was cleared → host should clear the list\n });\n }\n };\n\n private handleSearch = (e: CustomEvent<{ name: string; query: string; relatedClass: string }>) => {\n e.stopPropagation();\n this.mrdSearch.emit(e.detail);\n };\n\n private handleFetchAll = (e: CustomEvent<{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }>) => {\n e.stopPropagation();\n this.mrdFetchAll.emit(e.detail);\n };\n\n private handleUpload = (e: CustomEvent<{ name: string; file: File }>) => {\n e.stopPropagation();\n this.mrdUpload.emit(e.detail);\n };\n\n private collectFields(items: ClientLayoutItem[]): ClientLayoutItem[] {\n const fields: ClientLayoutItem[] = [];\n for (const item of items) {\n if (item.type === ClientLayoutItemType.FIELD || item.type === ClientLayoutItemType.RELATION) {\n fields.push(item);\n }\n if (item.items) {\n fields.push(...this.collectFields(item.items));\n }\n }\n return fields;\n }\n\n private validate(): boolean {\n const newErrors: Record<string, string> = {};\n const allFields = this.collectFields(this.layout?.items ?? []);\n\n for (const item of allFields) {\n if (!item.name) continue;\n if (item.required && !validateRequired(this.formValues[item.name])) {\n newErrors[item.name] = t('required', this.locale);\n }\n }\n\n this.errors = newErrors;\n return Object.keys(newErrors).length === 0;\n }\n\n private normalizeFieldValue(value: unknown): unknown {\n return (value === '' || value == null) ? null : value;\n }\n\n private normalizeRelationValue(value: unknown): string | string[] | null {\n if (value == null || value === '') return null;\n if (typeof value === 'string') return value || null;\n if (Array.isArray(value)) {\n return (value as unknown[]).map(v =>\n typeof v === 'object' && v !== null && 'id' in v ? (v as { id: string }).id : String(v),\n );\n }\n if (typeof value === 'object' && 'id' in (value as object)) {\n return (value as { id: string }).id || null;\n }\n return null;\n }\n\n private deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n const sa = [...(a as unknown[])].sort();\n const sb = [...(b as unknown[])].sort();\n return JSON.stringify(sa) === JSON.stringify(sb);\n }\n return JSON.stringify(a) === JSON.stringify(b);\n }\n\n /** Build a submit payload containing only fields that changed relative to\n * initialValues. For a new record (POST) initialValues is empty, so every\n * non-null field is included. For edit (PATCH) only modified fields are sent,\n * including fields explicitly cleared to null.\n */\n private buildSubmitPayload(): Record<string, unknown> {\n const payload: Record<string, unknown> = {};\n const allFields = this.collectFields(this.layout?.items ?? []);\n\n for (const item of allFields) {\n if (!item.name) continue;\n const name = item.name;\n if (item.type === ClientLayoutItemType.FIELD) {\n const rawValue = this.formValues[name];\n if (rawValue instanceof File) continue;\n const current = this.normalizeFieldValue(rawValue);\n const initial = this.normalizeFieldValue(this.initialValues[name]);\n if (this.deepEqual(current, initial)) continue;\n payload[name] = current;\n } else if (item.type === ClientLayoutItemType.RELATION) {\n const current = this.normalizeRelationValue(this.formValues[name]);\n const initial = this.normalizeRelationValue(this.initialValues[name]);\n if (this.deepEqual(current, initial)) continue;\n payload[name] = current;\n }\n }\n\n return payload;\n }\n\n private handleSubmit = (e: Event) => {\n e.preventDefault();\n this.submitted = true;\n if (this.validate()) {\n this.mrdSubmit.emit(this.buildSubmitPayload());\n }\n };\n\n private renderItems(items: ClientLayoutItem[]) {\n return items.map(item => {\n if (item.type === ClientLayoutItemType.SECTION) {\n return (\n <fieldset class=\"mrd-form__section\">\n {item.label && <legend class=\"mrd-form__section-legend\">{item.label}</legend>}\n <div class=\"mrd-form__section-body\">\n {item.items && this.renderItems(item.items)}\n </div>\n </fieldset>\n );\n }\n\n if (item.type === ClientLayoutItemType.GROUP) {\n return (\n <div class=\"mrd-form__group\">\n {item.label && <div class=\"mrd-form__group-label\">{item.label}</div>}\n <div class=\"mrd-form__group-body\">\n {item.items && this.renderItems(item.items)}\n </div>\n </div>\n );\n }\n\n const fieldName = item.name ?? '';\n const fieldValue = this.formValues[fieldName];\n\n return (\n <div class=\"mrd-form__field\">\n <mrd-field\n item={item}\n locale={this.locale}\n value={fieldValue}\n onMrdChange={this.handleFieldChange}\n onMrdBlur={this.handleFieldChange}\n onMrdSearch={this.handleSearch}\n onMrdFetchAll={this.handleFetchAll}\n onMrdUpload={this.handleUpload}\n />\n {this.errors[fieldName] && (\n <span class=\"mrd-form__field-error\">{this.errors[fieldName]}</span>\n )}\n </div>\n );\n });\n }\n\n render() {\n if (!this.layout) {\n return <Host></Host>;\n }\n\n const dir = this.locale.startsWith('ar') ? 'rtl' : 'ltr';\n\n return (\n <Host>\n <form\n class=\"mrd-form\"\n dir={dir}\n onSubmit={this.handleSubmit}\n noValidate\n >\n {this.layout.title && <h2 class=\"mrd-form__title\">{this.layout.title}</h2>}\n <div class=\"mrd-form__body\">\n {this.renderItems(this.layout.items)}\n </div>\n <div class=\"mrd-form__footer\">\n <button type=\"submit\" class=\"mrd-form__submit\">\n {t('submit', this.locale)}\n </button>\n {this.showCancel && (\n <button\n type=\"button\"\n class=\"mrd-form__cancel\"\n onClick={() => this.mrdCancel.emit()}\n >\n {t('cancel', this.locale)}\n </button>\n )}\n </div>\n </form>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,87 +0,0 @@
1
- import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
2
- import { t } from './i18n-hoGGKbKU.js';
3
- import { v as validateRequired, b as validateUrl } from './validation-ixb43cqU.js';
4
- import './index-I5SuYv7a.js';
5
- import './client-layout-D88nn5zf.js';
6
-
7
- const mrdHyperlinkFieldScss = () => `.sc-mrd-hyperlink-field-h{display:block}.mrd-hyperlink-field.sc-mrd-hyperlink-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-hyperlink-field__label.sc-mrd-hyperlink-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-hyperlink-field__label--required.sc-mrd-hyperlink-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-hyperlink-field__input--error.sc-mrd-hyperlink-field{border-color:var(--mrd-border-color-error)}.mrd-hyperlink-field__input--error.sc-mrd-hyperlink-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-hyperlink-field__input--name.sc-mrd-hyperlink-field{margin-top:var(--mrd-space-1)}.mrd-hyperlink-field__link.sc-mrd-hyperlink-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-primary);text-decoration:underline;word-break:break-all}.mrd-hyperlink-field__link.sc-mrd-hyperlink-field:hover{opacity:0.8}.mrd-hyperlink-field__empty.sc-mrd-hyperlink-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-400)}.mrd-hyperlink-field__error.sc-mrd-hyperlink-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
8
-
9
- const MrdHyperlinkField = class {
10
- constructor(hostRef) {
11
- registerInstance(this, hostRef);
12
- this.mrdChange = createEvent(this, "mrdChange", 7);
13
- this.mrdBlur = createEvent(this, "mrdBlur", 7);
14
- this.name = '';
15
- this.label = '';
16
- this.value = '';
17
- this.placeholder = '';
18
- this.required = false;
19
- this.disabled = false;
20
- this.locale = navigator.language;
21
- this.internalHref = '';
22
- this.internalName = '';
23
- this.error = '';
24
- this.handleHrefInput = (e) => {
25
- this.internalHref = e.target.value;
26
- this.mrdChange.emit({ name: this.name, value: this.buildValue() });
27
- };
28
- this.handleNameInput = (e) => {
29
- this.internalName = e.target.value;
30
- this.mrdChange.emit({ name: this.name, value: this.buildValue() });
31
- };
32
- this.handleBlur = () => {
33
- if (this.required && !validateRequired(this.internalHref)) {
34
- this.error = t('required', this.locale);
35
- }
36
- else if (this.internalHref && !validateUrl(this.internalHref)) {
37
- this.error = t('invalid_url', this.locale);
38
- }
39
- else {
40
- this.error = '';
41
- }
42
- this.mrdBlur.emit({ name: this.name, value: this.buildValue() });
43
- };
44
- }
45
- componentWillLoad() {
46
- this.parseValue(this.value);
47
- }
48
- valueChanged(val) {
49
- this.parseValue(val);
50
- }
51
- parseValue(val) {
52
- var _a, _b, _c;
53
- if (val !== null && val !== undefined && typeof val === 'object' && 'href' in val) {
54
- this.internalHref = (_a = val.href) !== null && _a !== void 0 ? _a : '';
55
- this.internalName = (_b = val.name) !== null && _b !== void 0 ? _b : '';
56
- }
57
- else {
58
- this.internalHref = (_c = val) !== null && _c !== void 0 ? _c : '';
59
- this.internalName = '';
60
- }
61
- }
62
- buildValue() {
63
- return this.internalName.trim()
64
- ? { href: this.internalHref, name: this.internalName }
65
- : { href: this.internalHref };
66
- }
67
- render() {
68
- const hasError = !!this.error;
69
- if (this.disabled) {
70
- return (h(Host, null, h("div", { class: "mrd-hyperlink-field" }, this.label && h("span", { class: "mrd-hyperlink-field__label" }, this.label), this.internalHref
71
- ? h("a", { class: "mrd-hyperlink-field__link", href: this.internalHref, target: "_blank", rel: "noopener noreferrer" }, this.internalName || this.internalHref)
72
- : h("span", { class: "mrd-hyperlink-field__empty" }, "\u2014"))));
73
- }
74
- return (h(Host, null, h("div", { class: "mrd-hyperlink-field" }, this.label && (h("label", { class: `mrd-hyperlink-field__label${this.required ? ' mrd-hyperlink-field__label--required' : ''}` }, this.label)), h("input", { class: `mrd-hyperlink-field__input${hasError ? ' mrd-hyperlink-field__input--error' : ''}`, type: "url", name: this.name, value: this.internalHref, placeholder: this.placeholder || 'https://', required: this.required, onInput: this.handleHrefInput, onBlur: this.handleBlur }), h("input", { class: "mrd-hyperlink-field__input mrd-hyperlink-field__input--name", type: "text", value: this.internalName, placeholder: t('hyperlink_name', this.locale), onInput: this.handleNameInput, onBlur: this.handleBlur }), hasError && h("span", { class: "mrd-hyperlink-field__error" }, this.error))));
75
- }
76
- static get watchers() { return {
77
- "value": [{
78
- "valueChanged": 0
79
- }]
80
- }; }
81
- };
82
- MrdHyperlinkField.style = mrdHyperlinkFieldScss();
83
-
84
- export { MrdHyperlinkField as mrd_hyperlink_field };
85
- //# sourceMappingURL=mrd-hyperlink-field.entry.esm.js.map
86
-
87
- //# sourceMappingURL=mrd-hyperlink-field.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"mrd-hyperlink-field.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-hyperlink-field/mrd-hyperlink-field.scss?tag=mrd-hyperlink-field&encapsulation=scoped","src/components/mrd-hyperlink-field/mrd-hyperlink-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-hyperlink-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-hyperlink-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-hyperlink-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-hyperlink-field__input {\n display: block;\n width: 100%;\n height: var(--mrd-input-height);\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n background-color: var(--mrd-input-bg);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n transition: border-color var(--mrd-transition), box-shadow var(--mrd-transition);\n outline: none;\n appearance: none;\n box-sizing: border-box;\n}\n\n.mrd-hyperlink-field__input::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-hyperlink-field__input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-hyperlink-field__input:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-hyperlink-field__input--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-hyperlink-field__input--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-hyperlink-field__input--name {\n margin-top: var(--mrd-space-1);\n}\n\n.mrd-hyperlink-field__link {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-primary);\n text-decoration: underline;\n word-break: break-all;\n}\n\n.mrd-hyperlink-field__link:hover {\n opacity: 0.8;\n}\n\n.mrd-hyperlink-field__empty {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-neutral-400);\n}\n\n.mrd-hyperlink-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired, validateUrl } from '../../utils/validation';\nimport { HyperlinkValue } from '../../types/client-layout';\n\n@Component({\n tag: 'mrd-hyperlink-field',\n styleUrl: 'mrd-hyperlink-field.scss',\n scoped: true,\n})\nexport class MrdHyperlinkField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: HyperlinkValue | string = '';\n @Prop() placeholder: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n\n @State() internalHref: string = '';\n @State() internalName: string = '';\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: HyperlinkValue }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: HyperlinkValue }>;\n\n componentWillLoad() {\n this.parseValue(this.value);\n }\n\n @Watch('value')\n valueChanged(val: HyperlinkValue | string) {\n this.parseValue(val);\n }\n\n private parseValue(val: HyperlinkValue | string) {\n if (val !== null && val !== undefined && typeof val === 'object' && 'href' in (val as object)) {\n this.internalHref = (val as HyperlinkValue).href ?? '';\n this.internalName = (val as HyperlinkValue).name ?? '';\n } else {\n this.internalHref = (val as string) ?? '';\n this.internalName = '';\n }\n }\n\n private buildValue(): HyperlinkValue {\n return this.internalName.trim()\n ? { href: this.internalHref, name: this.internalName }\n : { href: this.internalHref };\n }\n\n private handleHrefInput = (e: Event) => {\n this.internalHref = (e.target as HTMLInputElement).value;\n this.mrdChange.emit({ name: this.name, value: this.buildValue() });\n };\n\n private handleNameInput = (e: Event) => {\n this.internalName = (e.target as HTMLInputElement).value;\n this.mrdChange.emit({ name: this.name, value: this.buildValue() });\n };\n\n private handleBlur = () => {\n if (this.required && !validateRequired(this.internalHref)) {\n this.error = t('required', this.locale);\n } else if (this.internalHref && !validateUrl(this.internalHref)) {\n this.error = t('invalid_url', this.locale);\n } else {\n this.error = '';\n }\n this.mrdBlur.emit({ name: this.name, value: this.buildValue() });\n };\n\n render() {\n const hasError = !!this.error;\n\n if (this.disabled) {\n return (\n <Host>\n <div class=\"mrd-hyperlink-field\">\n {this.label && <span class=\"mrd-hyperlink-field__label\">{this.label}</span>}\n {this.internalHref\n ? <a class=\"mrd-hyperlink-field__link\" href={this.internalHref} target=\"_blank\" rel=\"noopener noreferrer\">\n {this.internalName || this.internalHref}\n </a>\n : <span class=\"mrd-hyperlink-field__empty\">—</span>\n }\n </div>\n </Host>\n );\n }\n\n return (\n <Host>\n <div class=\"mrd-hyperlink-field\">\n {this.label && (\n <label class={`mrd-hyperlink-field__label${this.required ? ' mrd-hyperlink-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <input\n class={`mrd-hyperlink-field__input${hasError ? ' mrd-hyperlink-field__input--error' : ''}`}\n type=\"url\"\n name={this.name}\n value={this.internalHref}\n placeholder={this.placeholder || 'https://'}\n required={this.required}\n onInput={this.handleHrefInput}\n onBlur={this.handleBlur}\n />\n <input\n class=\"mrd-hyperlink-field__input mrd-hyperlink-field__input--name\"\n type=\"text\"\n value={this.internalName}\n placeholder={t('hyperlink_name', this.locale)}\n onInput={this.handleNameInput}\n onBlur={this.handleBlur}\n />\n {hasError && <span class=\"mrd-hyperlink-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,122 +0,0 @@
1
- import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
2
- import { t } from './i18n-hoGGKbKU.js';
3
-
4
- const mrdImageFieldScss = () => `.sc-mrd-image-field-h{display:block}.mrd-image-field.sc-mrd-image-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-image-field__label.sc-mrd-image-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-image-field__label--required.sc-mrd-image-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-image-field__zone.sc-mrd-image-field{display:flex;align-items:center;justify-content:center;border:2px dashed var(--mrd-border-color);border-radius:var(--mrd-border-radius-md);background-color:var(--mrd-color-neutral-50);cursor:pointer;transition:border-color var(--mrd-transition), background-color var(--mrd-transition);min-height:100px;position:relative}.mrd-image-field__zone.sc-mrd-image-field:hover{border-color:var(--mrd-color-primary);background-color:var(--mrd-color-primary-light)}.mrd-image-field__zone--dragging.sc-mrd-image-field{border-color:var(--mrd-color-primary);background-color:var(--mrd-color-primary-light)}.mrd-image-field__zone--error.sc-mrd-image-field{border-color:var(--mrd-border-color-error)}.mrd-image-field__zone--disabled.sc-mrd-image-field{opacity:0.6;cursor:not-allowed}.mrd-image-field__zone--disabled.sc-mrd-image-field:hover{border-color:var(--mrd-border-color);background-color:var(--mrd-color-neutral-50)}.mrd-image-field__input.sc-mrd-image-field{position:absolute;inset:0;opacity:0;width:100%;height:100%;pointer-events:none}.mrd-image-field__prompt.sc-mrd-image-field{display:flex;flex-direction:column;align-items:center;gap:var(--mrd-space-2);padding:var(--mrd-space-6);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-500);text-align:center}.mrd-image-field__upload-icon.sc-mrd-image-field{width:40px;height:40px;color:var(--mrd-color-neutral-400)}.mrd-image-field__browse.sc-mrd-image-field{color:var(--mrd-color-primary);font-weight:var(--mrd-font-weight-medium);text-decoration:underline}.mrd-image-field__preview-container.sc-mrd-image-field{display:flex;align-items:center;gap:var(--mrd-space-4);padding:var(--mrd-space-4);width:100%}.mrd-image-field__preview-thumb.sc-mrd-image-field{flex-shrink:0;width:80px;height:80px;border-radius:var(--mrd-border-radius);overflow:hidden;border:var(--mrd-border-width) solid var(--mrd-border-color);background-color:var(--mrd-color-neutral-100)}.mrd-image-field__preview.sc-mrd-image-field{width:100%;height:100%;object-fit:cover;display:block}.mrd-image-field__preview-info.sc-mrd-image-field{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--mrd-space-1)}.mrd-image-field__preview-name.sc-mrd-image-field{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-800);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mrd-image-field__preview-overlay.sc-mrd-image-field{position:absolute;inset:0;background:rgb(255 255 255 / 0.7);display:flex;align-items:center;justify-content:center;border-radius:var(--mrd-border-radius)}.mrd-image-field__spinner.sc-mrd-image-field{display:inline-block;width:24px;height:24px;border:2px solid var(--mrd-color-neutral-300);border-top-color:var(--mrd-color-primary);border-radius:50%;animation:mrd-image-spin 0.6s linear infinite}@keyframes mrd-image-spin{to{transform:rotate(360deg)}}.mrd-image-field__upload-status.sc-mrd-image-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500)}.mrd-image-field__clear.sc-mrd-image-field{flex-shrink:0;background-color:var(--mrd-color-white);color:var(--mrd-color-danger);border:var(--mrd-border-width) solid var(--mrd-color-danger);border-radius:var(--mrd-border-radius);padding:var(--mrd-space-1) var(--mrd-space-3);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium);cursor:pointer;transition:background-color var(--mrd-transition), color var(--mrd-transition)}.mrd-image-field__clear.sc-mrd-image-field:hover{background-color:var(--mrd-color-danger);color:var(--mrd-color-white)}.mrd-image-field__error.sc-mrd-image-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
5
-
6
- const MrdImageField = class {
7
- constructor(hostRef) {
8
- registerInstance(this, hostRef);
9
- this.mrdChange = createEvent(this, "mrdChange", 7);
10
- this.mrdBlur = createEvent(this, "mrdBlur", 7);
11
- this.mrdUpload = createEvent(this, "mrdUpload", 7);
12
- this.name = '';
13
- this.label = '';
14
- this.value = null;
15
- this.required = false;
16
- this.disabled = false;
17
- this.locale = navigator.language;
18
- this.accept = 'image/*';
19
- this.maxSize = 0;
20
- this.previewUrl = '';
21
- this.fileName = '';
22
- this.isDragging = false;
23
- this.uploading = false;
24
- this.error = '';
25
- this.handleInputChange = (e) => {
26
- var _a;
27
- const files = e.target.files;
28
- this.handleFile((_a = files === null || files === void 0 ? void 0 : files[0]) !== null && _a !== void 0 ? _a : null);
29
- };
30
- this.handleDragOver = (e) => {
31
- e.preventDefault();
32
- this.isDragging = true;
33
- };
34
- this.handleDragLeave = () => {
35
- this.isDragging = false;
36
- };
37
- this.handleDrop = (e) => {
38
- var _a, _b, _c;
39
- e.preventDefault();
40
- this.isDragging = false;
41
- const file = (_c = (_b = (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : null;
42
- this.handleFile(file);
43
- };
44
- this.handleZoneClick = () => {
45
- var _a;
46
- if (!this.disabled && !this.uploading) {
47
- (_a = this.fileInputRef) === null || _a === void 0 ? void 0 : _a.click();
48
- }
49
- };
50
- this.handleClear = (e) => {
51
- e.stopPropagation();
52
- this.previewUrl = '';
53
- this.fileName = '';
54
- this.error = '';
55
- this.uploading = false;
56
- if (this.fileInputRef)
57
- this.fileInputRef.value = '';
58
- this.mrdChange.emit({ name: this.name, value: null });
59
- };
60
- }
61
- /** When the host provides a URI back via setFieldValue, the upload is done. */
62
- valueChanged(newVal) {
63
- if (typeof newVal === 'string' && newVal) {
64
- this.uploading = false;
65
- }
66
- else if (!newVal) {
67
- this.uploading = false;
68
- this.previewUrl = '';
69
- this.fileName = '';
70
- }
71
- }
72
- handleFile(file) {
73
- if (!file) {
74
- this.previewUrl = '';
75
- this.fileName = '';
76
- this.uploading = false;
77
- this.mrdChange.emit({ name: this.name, value: null });
78
- return;
79
- }
80
- if (this.maxSize > 0 && file.size > this.maxSize) {
81
- this.error = t('file_too_large', this.locale);
82
- return;
83
- }
84
- if (!file.type.startsWith('image/')) {
85
- this.error = 'Please select an image file';
86
- return;
87
- }
88
- this.error = '';
89
- this.fileName = file.name;
90
- this.uploading = true;
91
- // Show local preview immediately while upload is in progress
92
- const reader = new FileReader();
93
- reader.onload = (ev) => {
94
- var _a;
95
- this.previewUrl = (_a = ev.target) === null || _a === void 0 ? void 0 : _a.result;
96
- };
97
- reader.readAsDataURL(file);
98
- this.mrdChange.emit({ name: this.name, value: file });
99
- this.mrdUpload.emit({ name: this.name, file });
100
- }
101
- render() {
102
- const hasError = !!this.error;
103
- const zoneClass = [
104
- 'mrd-image-field__zone',
105
- this.isDragging ? 'mrd-image-field__zone--dragging' : '',
106
- hasError ? 'mrd-image-field__zone--error' : '',
107
- this.disabled || this.uploading ? 'mrd-image-field__zone--disabled' : '',
108
- ].filter(Boolean).join(' ');
109
- return (h(Host, { key: '71be4c1df559cff87280cac30be58beab3149064' }, h("div", { key: '9d0811d87068ce258aca9b2c5223a5594af9f6a3', class: "mrd-image-field" }, this.label && (h("label", { key: '63e129db968a2edfcc04fcac466d908ba4715158', class: `mrd-image-field__label${this.required ? ' mrd-image-field__label--required' : ''}` }, this.label)), h("div", { key: 'c7e560ad4dda43499707a2d1771a8eb561653a1b', class: zoneClass, onClick: this.handleZoneClick, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave, onDrop: this.handleDrop }, h("input", { key: 'd325ee1aa3baccd689cc579e4cfa21abe977a575', 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 ? (h("div", { class: "mrd-image-field__preview-container" }, h("div", { class: "mrd-image-field__preview-thumb" }, h("img", { class: "mrd-image-field__preview", src: this.previewUrl, alt: this.fileName }), this.uploading && h("div", { class: "mrd-image-field__preview-overlay" }, h("span", { class: "mrd-image-field__spinner" }))), h("div", { class: "mrd-image-field__preview-info" }, h("span", { class: "mrd-image-field__preview-name" }, this.fileName), this.uploading && (h("span", { class: "mrd-image-field__upload-status" }, t('loading', this.locale)))), !this.uploading && (h("button", { class: "mrd-image-field__clear", type: "button", onClick: this.handleClear, "aria-label": t('clear', this.locale) }, t('remove', this.locale))))) : (h("div", { class: "mrd-image-field__prompt" }, h("svg", { class: "mrd-image-field__upload-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, h("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", ry: "2" }), h("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), h("polyline", { points: "21 15 16 10 5 21" })), h("span", null, t('drop_file_here', this.locale), ' ', h("span", { class: "mrd-image-field__browse" }, t('browse', this.locale)))))), hasError && h("span", { key: 'b0442d6f5c07ef22443194b3f1a95d2dfc409c4e', class: "mrd-image-field__error" }, this.error))));
110
- }
111
- static get watchers() { return {
112
- "value": [{
113
- "valueChanged": 0
114
- }]
115
- }; }
116
- };
117
- MrdImageField.style = mrdImageFieldScss();
118
-
119
- export { MrdImageField as mrd_image_field };
120
- //# sourceMappingURL=mrd-image-field.entry.esm.js.map
121
-
122
- //# sourceMappingURL=mrd-image-field.entry.js.map
@@ -1 +0,0 @@
1
- {"file":"mrd-image-field.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-image-field/mrd-image-field.scss?tag=mrd-image-field&encapsulation=scoped","src/components/mrd-image-field/mrd-image-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-image-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-image-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-image-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-image-field__zone {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px dashed var(--mrd-border-color);\n border-radius: var(--mrd-border-radius-md);\n background-color: var(--mrd-color-neutral-50);\n cursor: pointer;\n transition: border-color var(--mrd-transition), background-color var(--mrd-transition);\n min-height: 100px;\n position: relative;\n}\n\n.mrd-image-field__zone:hover {\n border-color: var(--mrd-color-primary);\n background-color: var(--mrd-color-primary-light);\n}\n\n.mrd-image-field__zone--dragging {\n border-color: var(--mrd-color-primary);\n background-color: var(--mrd-color-primary-light);\n}\n\n.mrd-image-field__zone--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-image-field__zone--disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.mrd-image-field__zone--disabled:hover {\n border-color: var(--mrd-border-color);\n background-color: var(--mrd-color-neutral-50);\n}\n\n.mrd-image-field__input {\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n\n.mrd-image-field__prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mrd-space-2);\n padding: var(--mrd-space-6);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-500);\n text-align: center;\n}\n\n.mrd-image-field__upload-icon {\n width: 40px;\n height: 40px;\n color: var(--mrd-color-neutral-400);\n}\n\n.mrd-image-field__browse {\n color: var(--mrd-color-primary);\n font-weight: var(--mrd-font-weight-medium);\n text-decoration: underline;\n}\n\n/* Preview: thumbnail + bestandsnaam + verwijder knop */\n.mrd-image-field__preview-container {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-4);\n padding: var(--mrd-space-4);\n width: 100%;\n}\n\n.mrd-image-field__preview-thumb {\n flex-shrink: 0;\n width: 80px;\n height: 80px;\n border-radius: var(--mrd-border-radius);\n overflow: hidden;\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n background-color: var(--mrd-color-neutral-100);\n}\n\n.mrd-image-field__preview {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n\n.mrd-image-field__preview-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n}\n\n.mrd-image-field__preview-name {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-medium);\n color: var(--mrd-color-neutral-800);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mrd-image-field__preview-overlay {\n position: absolute;\n inset: 0;\n background: rgb(255 255 255 / 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--mrd-border-radius);\n}\n\n.mrd-image-field__spinner {\n display: inline-block;\n width: 24px;\n height: 24px;\n border: 2px solid var(--mrd-color-neutral-300);\n border-top-color: var(--mrd-color-primary);\n border-radius: 50%;\n animation: mrd-image-spin 0.6s linear infinite;\n}\n\n@keyframes mrd-image-spin { to { transform: rotate(360deg); } }\n\n.mrd-image-field__upload-status {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-neutral-500);\n}\n\n.mrd-image-field__clear {\n flex-shrink: 0;\n background-color: var(--mrd-color-white);\n color: var(--mrd-color-danger);\n border: var(--mrd-border-width) solid var(--mrd-color-danger);\n border-radius: var(--mrd-border-radius);\n padding: var(--mrd-space-1) var(--mrd-space-3);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-medium);\n cursor: pointer;\n transition: background-color var(--mrd-transition), color var(--mrd-transition);\n}\n\n.mrd-image-field__clear:hover {\n background-color: var(--mrd-color-danger);\n color: var(--mrd-color-white);\n}\n\n.mrd-image-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\nimport { t } from '../../utils/i18n';\n\n@Component({\n tag: 'mrd-image-field',\n styleUrl: 'mrd-image-field.scss',\n scoped: true,\n})\nexport class MrdImageField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: unknown = null;\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n @Prop() accept: string = 'image/*';\n @Prop() maxSize: number = 0;\n\n @State() previewUrl: string = '';\n @State() fileName: string = '';\n @State() isDragging: boolean = false;\n @State() uploading: boolean = false;\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: File | null }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: File | null }>;\n /** Emitted when an image is selected and needs to be uploaded.\n * Host should upload the file and call form.setFieldValue(name, uri) with the result. */\n @Event() mrdUpload!: EventEmitter<{ name: string; file: File }>;\n\n private fileInputRef!: HTMLInputElement;\n\n /** When the host provides a URI back via setFieldValue, the upload is done. */\n @Watch('value')\n valueChanged(newVal: unknown) {\n if (typeof newVal === 'string' && newVal) {\n this.uploading = false;\n } else if (!newVal) {\n this.uploading = false;\n this.previewUrl = '';\n this.fileName = '';\n }\n }\n\n private handleFile(file: File | null) {\n if (!file) {\n this.previewUrl = '';\n this.fileName = '';\n this.uploading = false;\n this.mrdChange.emit({ name: this.name, value: null });\n return;\n }\n if (this.maxSize > 0 && file.size > this.maxSize) {\n this.error = t('file_too_large', this.locale);\n return;\n }\n if (!file.type.startsWith('image/')) {\n this.error = 'Please select an image file';\n return;\n }\n this.error = '';\n this.fileName = file.name;\n this.uploading = true;\n // Show local preview immediately while upload is in progress\n const reader = new FileReader();\n reader.onload = (ev) => {\n this.previewUrl = ev.target?.result as string;\n };\n reader.readAsDataURL(file);\n this.mrdChange.emit({ name: this.name, value: file });\n this.mrdUpload.emit({ name: this.name, file });\n }\n\n private handleInputChange = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n this.handleFile(files?.[0] ?? null);\n };\n\n private handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n this.isDragging = true;\n };\n\n private handleDragLeave = () => {\n this.isDragging = false;\n };\n\n private handleDrop = (e: DragEvent) => {\n e.preventDefault();\n this.isDragging = false;\n const file = e.dataTransfer?.files?.[0] ?? null;\n this.handleFile(file);\n };\n\n private handleZoneClick = () => {\n if (!this.disabled && !this.uploading) {\n this.fileInputRef?.click();\n }\n };\n\n private handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n this.previewUrl = '';\n this.fileName = '';\n this.error = '';\n this.uploading = false;\n if (this.fileInputRef) this.fileInputRef.value = '';\n this.mrdChange.emit({ name: this.name, value: null });\n };\n\n render() {\n const hasError = !!this.error;\n const zoneClass = [\n 'mrd-image-field__zone',\n this.isDragging ? 'mrd-image-field__zone--dragging' : '',\n hasError ? 'mrd-image-field__zone--error' : '',\n this.disabled || this.uploading ? 'mrd-image-field__zone--disabled' : '',\n ].filter(Boolean).join(' ');\n\n return (\n <Host>\n <div class=\"mrd-image-field\">\n {this.label && (\n <label class={`mrd-image-field__label${this.required ? ' mrd-image-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <div\n class={zoneClass}\n onClick={this.handleZoneClick}\n onDragOver={this.handleDragOver}\n onDragLeave={this.handleDragLeave}\n onDrop={this.handleDrop}\n >\n <input\n ref={el => (this.fileInputRef = el as HTMLInputElement)}\n class=\"mrd-image-field__input\"\n type=\"file\"\n name={this.name}\n accept={this.accept}\n disabled={this.disabled || this.uploading}\n required={this.required && !this.previewUrl}\n onChange={this.handleInputChange}\n />\n {this.previewUrl ? (\n <div class=\"mrd-image-field__preview-container\">\n <div class=\"mrd-image-field__preview-thumb\">\n <img class=\"mrd-image-field__preview\" src={this.previewUrl} alt={this.fileName} />\n {this.uploading && <div class=\"mrd-image-field__preview-overlay\"><span class=\"mrd-image-field__spinner\" /></div>}\n </div>\n <div class=\"mrd-image-field__preview-info\">\n <span class=\"mrd-image-field__preview-name\">{this.fileName}</span>\n {this.uploading && (\n <span class=\"mrd-image-field__upload-status\">{t('loading', this.locale)}</span>\n )}\n </div>\n {!this.uploading && (\n <button class=\"mrd-image-field__clear\" type=\"button\" onClick={this.handleClear} aria-label={t('clear', this.locale)}>\n {t('remove', this.locale)}\n </button>\n )}\n </div>\n ) : (\n <div class=\"mrd-image-field__prompt\">\n <svg class=\"mrd-image-field__upload-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/>\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/>\n <polyline points=\"21 15 16 10 5 21\"/>\n </svg>\n <span>\n {t('drop_file_here', this.locale)}{' '}\n <span class=\"mrd-image-field__browse\">{t('browse', this.locale)}</span>\n </span>\n </div>\n )}\n </div>\n {hasError && <span class=\"mrd-image-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1 +0,0 @@
1
- {"file":"mrd-layout-section.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-layout-section/mrd-layout-section.scss?tag=mrd-layout-section&encapsulation=scoped","src/components/mrd-layout-section/mrd-layout-section.tsx"],"sourcesContent":[".mrd-layout-section {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-layout-section__field {\n display: grid;\n grid-template-columns: 200px 1fr;\n align-items: baseline;\n gap: 0 var(--mrd-space-2);\n padding: var(--mrd-space-1) 0;\n}\n\n.mrd-layout-section__field-label {\n font-size: var(--mrd-font-size-xs);\n font-weight: var(--mrd-font-weight-normal);\n color: var(--mrd-color-neutral-500);\n padding-top: 1px;\n}\n\n.mrd-layout-section__field-value {\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-medium);\n color: var(--mrd-color-neutral-800);\n word-break: break-word;\n display: inline-flex;\n align-items: center;\n gap: var(--mrd-space-1);\n}\n\n.mrd-layout-section__history-wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n\n.mrd-layout-section__history-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.25rem;\n height: 1.25rem;\n padding: 0;\n background: transparent;\n border: none;\n border-radius: var(--mrd-border-radius-sm);\n color: var(--mrd-color-neutral-400);\n cursor: pointer;\n flex-shrink: 0;\n transition: color var(--mrd-transition-fast), background-color var(--mrd-transition-fast);\n}\n\n.mrd-layout-section__history-btn:hover {\n color: var(--mrd-color-neutral-700);\n background-color: var(--mrd-color-neutral-100);\n}\n\n.mrd-layout-section__history-btn:focus {\n outline: none;\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-layout-section__history-icon {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n.mrd-layout-section__history-popover {\n position: absolute;\n top: calc(100% + 0.25rem);\n left: 0;\n min-width: 24rem;\n max-width: 24rem;\n background-color: var(--mrd-color-white);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius-md);\n box-shadow: var(--mrd-shadow-md);\n padding: var(--mrd-space-1) 0;\n z-index: var(--mrd-z-dropdown);\n}\n\n.mrd-layout-section__history-entry {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-normal);\n color: var(--mrd-color-neutral-700);\n padding: var(--mrd-space-2) var(--mrd-space-3);\n line-height: var(--mrd-line-height-normal);\n}\n\n.mrd-layout-section__history-entry:not(:last-child) {\n border-bottom: var(--mrd-border-width) solid var(--mrd-color-neutral-100);\n}\n\n.mrd-layout-section__field-header {\n font-size: var(--mrd-font-size-2xl);\n font-weight: var(--mrd-font-weight-bold);\n color: var(--mrd-color-neutral-900);\n margin: 0 0 var(--mrd-space-4) 0;\n padding: 0;\n}\n\n.mrd-layout-section__header {\n font-size: var(--mrd-font-size-xl);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-800);\n margin: var(--mrd-space-4) 0 var(--mrd-space-2) 0;\n padding: 0;\n}\n\n.mrd-layout-section__text {\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-neutral-700);\n line-height: var(--mrd-line-height-relaxed);\n margin: var(--mrd-space-2) 0;\n}\n\n.mrd-layout-section__navigate {\n display: inline-flex;\n align-items: center;\n gap: var(--mrd-space-2);\n padding: var(--mrd-space-2) var(--mrd-space-3);\n background: none;\n border: 1px solid var(--mrd-color-neutral-300);\n border-radius: var(--mrd-border-radius);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-primary);\n cursor: pointer;\n margin: var(--mrd-space-2) 0;\n}\n\n.mrd-layout-section__navigate:hover {\n background-color: var(--mrd-color-primary-light);\n border-color: var(--mrd-color-primary);\n}\n\n.mrd-layout-section__link {\n color: var(--mrd-color-primary);\n text-decoration: none;\n}\n\n.mrd-layout-section__link:hover {\n text-decoration: underline;\n}\n\n.mrd-layout-section__relation-link {\n background: none;\n border: none;\n padding: 0;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-primary);\n cursor: pointer;\n text-align: left;\n}\n\n.mrd-layout-section__relation-link:hover {\n text-decoration: underline;\n}\n\n.mrd-layout-section__download-link {\n display: inline-flex;\n align-items: center;\n gap: var(--mrd-space-1);\n background: none;\n border: none;\n padding: 0;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-primary);\n cursor: pointer;\n text-align: left;\n}\n\n.mrd-layout-section__download-link:hover {\n text-decoration: underline;\n color: var(--mrd-color-primary-dark);\n}\n\n.mrd-layout-section__file-icon {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n}\n\n.mrd-layout-section__boolean--true {\n color: var(--mrd-color-success);\n font-weight: var(--mrd-font-weight-semibold);\n}\n\n.mrd-layout-section__boolean--false {\n color: var(--mrd-color-neutral-400);\n}\n\n.mrd-layout-section__field--block {\n grid-template-columns: 1fr;\n}\n\n.mrd-layout-section__badge {\n display: inline-block;\n font-size: var(--mrd-font-size-xs);\n font-weight: var(--mrd-font-weight-medium);\n padding: 2px var(--mrd-space-3);\n border-radius: 10px;\n}\n\n.mrd-layout-section__badge-dot-row {\n display: inline-flex;\n align-items: center;\n gap: var(--mrd-space-2);\n}\n\n.mrd-layout-section__badge-dot {\n display: inline-block;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.mrd-layout-section__secret-masked {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-label-color);\n letter-spacing: 0.15em;\n user-select: none;\n pointer-events: none;\n}\n\n.mrd-layout-section__pre {\n font-family: var(--mrd-font-family-mono);\n font-size: var(--mrd-font-size-xs);\n background-color: var(--mrd-color-neutral-50);\n border: 1px solid var(--mrd-color-neutral-200);\n border-radius: var(--mrd-border-radius);\n padding: var(--mrd-space-3);\n margin: 0;\n max-height: calc(10 * 1.5 * var(--mrd-font-size-xs));\n overflow-x: auto;\n overflow-y: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.mrd-layout-section__group {\n margin: var(--mrd-space-4) 0;\n}\n\n.mrd-layout-section__group-title {\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-500);\n margin: 0 0 var(--mrd-space-2) 0;\n padding-bottom: 0;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.mrd-layout-section__related-view {\n margin: var(--mrd-space-4) 0;\n}\n\n.mrd-layout-section__related-view-title {\n font-size: var(--mrd-font-size-lg);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-800);\n margin: 0 0 var(--mrd-space-3) 0;\n}\n\n.mrd-layout-section__search {\n position: relative;\n margin: var(--mrd-space-2) 0;\n}\n\n.mrd-layout-section__search-wrap {\n position: relative;\n}\n\n.mrd-layout-section__search-icon {\n position: absolute;\n left: var(--mrd-input-padding-x);\n top: 50%;\n transform: translateY(-50%);\n width: 1rem;\n height: 1rem;\n color: var(--mrd-color-neutral-400);\n pointer-events: none;\n}\n\n.mrd-layout-section__search-input {\n display: block;\n width: 100%;\n height: var(--mrd-input-height);\n 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));\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n background-color: var(--mrd-input-bg);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n outline: none;\n appearance: none;\n box-sizing: border-box;\n}\n\n.mrd-layout-section__search-input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-layout-section__search-input::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-layout-section__search-results {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background-color: var(--mrd-color-white);\n border: 1px solid var(--mrd-color-neutral-300);\n border-top: none;\n border-radius: 0 0 var(--mrd-border-radius) var(--mrd-border-radius);\n box-shadow: var(--mrd-shadow-sm);\n z-index: 100;\n max-height: 300px;\n overflow-y: auto;\n list-style: none;\n margin: 0;\n padding: var(--mrd-space-1) 0;\n}\n\n.mrd-layout-section__search-result {\n margin: 0;\n padding: 0;\n}\n\n.mrd-layout-section__search-result-btn {\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: var(--mrd-space-2) var(--mrd-space-3);\n background: none;\n border: none;\n text-align: left;\n cursor: pointer;\n font-family: var(--mrd-font-family);\n}\n\n.mrd-layout-section__search-result-btn:hover {\n background-color: var(--mrd-color-primary-light);\n}\n\n.mrd-layout-section__search-result-label {\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-medium);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-layout-section__search-result-desc {\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-neutral-500);\n margin-top: var(--mrd-space-1);\n}\n\n.mrd-layout-section__image-thumb-btn {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n display: inline-block;\n border-radius: var(--mrd-border-radius);\n overflow: hidden;\n line-height: 0;\n}\n\n.mrd-layout-section__image-thumb-btn:hover .mrd-layout-section__image-thumb {\n opacity: 0.85;\n}\n\n.mrd-layout-section__image-thumb {\n display: block;\n max-width: 160px;\n max-height: 100px;\n border-radius: var(--mrd-border-radius);\n object-fit: cover;\n transition: opacity 0.15s;\n}\n\n.mrd-layout-section__modal-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.6);\n z-index: 300;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mrd-layout-section__modal {\n position: relative;\n background: #fff;\n border-radius: var(--mrd-border-radius);\n padding: var(--mrd-space-3);\n max-width: min(90vw, 900px);\n max-height: 90vh;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: var(--mrd-shadow-lg);\n}\n\n.mrd-layout-section__modal-close {\n position: absolute;\n top: var(--mrd-space-2);\n right: var(--mrd-space-2);\n background: rgba(0, 0, 0, 0.5);\n border: none;\n border-radius: 50%;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n cursor: pointer;\n font-size: var(--mrd-font-size-sm);\n line-height: 1;\n z-index: 1;\n}\n\n.mrd-layout-section__modal-close:hover {\n background: rgba(0, 0, 0, 0.8);\n}\n\n.mrd-layout-section__modal-image {\n display: block;\n max-width: 100%;\n max-height: calc(90vh - 2rem);\n border-radius: var(--mrd-border-radius);\n object-fit: contain;\n}\n","import { Component, Host, h, Prop, State, Watch, Event, EventEmitter, Method, Element } from '@stencil/core';\nimport {\n ClientLayoutItem,\n ClientLayoutItemType,\n ClientLayoutItemFieldDataType,\n ClientLayoutItemNavigate,\n ClientViewMetadata,\n RelationSearchResult,\n DataObjectLink,\n} from '../../types/client-layout';\nimport { CellRenderer } from '../../utils/cell-renderer';\nimport { t } from '../../utils/i18n';\nimport { formatDate } from '../../utils/format';\n\n@Component({\n tag: 'mrd-layout-section',\n styleUrl: 'mrd-layout-section.scss',\n scoped: true,\n})\nexport class MrdLayoutSection {\n @Element() el!: HTMLElement;\n\n /** Items from one layout entry in ClientDashboardMetadata.layouts[]. */\n @Prop() items: ClientLayoutItem[] = [];\n /** Record data object; keys are field names, _links holds relation and related-view links. */\n @Prop() data: Record<string, unknown> = {};\n /** Legacy: view metadata map (ClientDashboardMetadata.views). Not needed in new flat format. */\n @Prop() views: Record<string, ClientViewMetadata> = {};\n /** Legacy: top-level _links from ClientDashboardMetadata. Not needed in new flat format. */\n @Prop() links: Record<string, { href: string }> = {};\n @Prop() locale: string = navigator.language;\n\n @State() private searchQueryMap: Record<string, string> = {};\n @State() private searchResultsMap: Record<string, RelationSearchResult[]> = {};\n @State() private imagePreviewUrl: string | null = null;\n @State() private imagePreviews: Record<string, string> = {};\n @State() private openHistoryField: string | null = null;\n\n private historyClickOutside: ((e: MouseEvent) => void) | null = null;\n\n @Event() mrdNavigate!: EventEmitter<{ href?: string; label: string; navigate?: ClientLayoutItemNavigate }>;\n @Event() mrdSearch!: EventEmitter<{ query: string; dataClass: string }>;\n @Event() mrdDownload!: EventEmitter<{ href: string; fileName: string }>;\n /** Re-emitted from an embedded mrd-table's mrdLoadPage; host fetches the next page and calls setViewPage(). */\n @Event() mrdLoadViewPage!: EventEmitter<{ name: string; page: number; sort: string; path: string; qs: string }>;\n /** Fired once on load for each IMAGE field that has an href; host resolves the URL and calls setImagePreview(). */\n @Event() mrdLoadImage!: EventEmitter<{ fieldName: string; href: string }>;\n /** Re-emitted from an embedded mrd-table's mrdAction; host builds the target URL from dataClass. */\n @Event() mrdViewAction!: EventEmitter<{ name: string; action: string; dataClass: string; path?: string; qs?: string; parentPath?: string | null; basicType?: string }>;\n /** Re-emitted from an embedded mrd-table's mrdLoadAggregations; host calls setViewAggregations() with the result. */\n @Event() mrdLoadViewAggregations!: EventEmitter<{ name: string; dataClass: string; path: string; qs: string; aggQs: string }>;\n\n private searchTimers: Record<string, ReturnType<typeof setTimeout>> = {};\n\n componentDidLoad() {\n setTimeout(() => {\n this.initEmbeddedTables();\n this.emitLoadImages();\n }, 0);\n this.historyClickOutside = (e: MouseEvent) => {\n if (!this.el.contains(e.target as Node)) this.openHistoryField = null;\n };\n document.addEventListener('mousedown', this.historyClickOutside);\n }\n\n disconnectedCallback() {\n if (this.historyClickOutside) {\n document.removeEventListener('mousedown', this.historyClickOutside);\n this.historyClickOutside = null;\n }\n }\n\n @Watch('data')\n dataChanged(newVal: Record<string, unknown>) {\n if (newVal && Object.keys(newVal).length > 0) {\n setTimeout(() => this.initEmbeddedTables(), 0);\n }\n }\n\n private async initEmbeddedTables(): Promise<void> {\n const tables = this.el.querySelectorAll<any>('mrd-table[data-view]');\n for (const table of Array.from(tables)) {\n if (typeof table.init === 'function') {\n await table.init();\n }\n }\n }\n\n private viewKeyFor(item: ClientLayoutItem): string {\n if (item.type === ClientLayoutItemType.RELATED_VIEW) return item.relatedClass ?? item.name ?? '';\n return item.dataClass ?? item.name ?? '';\n }\n\n private emitLoadImages() {\n for (const item of this.flattenItems(this.items)) {\n if (item.type === ClientLayoutItemType.FIELD && item.dataType === ClientLayoutItemFieldDataType.IMAGE) {\n const fieldName = item.name!;\n const raw = (this.data as Record<string, unknown>)[fieldName] as any;\n const href = raw?.href;\n if (href) this.mrdLoadImage.emit({ fieldName, href });\n }\n }\n }\n\n private flattenItems(items: ClientLayoutItem[]): ClientLayoutItem[] {\n const result: ClientLayoutItem[] = [];\n for (const item of items) {\n result.push(item);\n if (item.items) result.push(...this.flattenItems(item.items));\n }\n return result;\n }\n\n /** Inject search results. Pass dataClass to target a specific SEARCH item; omit when there is only one. */\n @Method()\n async setSearchResults(results: RelationSearchResult[], dataClass?: string): Promise<void> {\n const key = dataClass ?? this.resolveSearchKey();\n if (key) {\n this.searchResultsMap = { ...this.searchResultsMap, [key]: results };\n }\n }\n\n /**\n * Inject data into an embedded mrd-table for a RELATED_VIEW or VIEW item.\n * Pass totalElements to update the pagination total (safe to pass on every page).\n * Pass hasNext (from _links.next presence) so the table can decide whether to emit aggregations.\n */\n @Method()\n async setViewPage(name: string, page: number, rows: any[], totalElements?: number, hasNext?: boolean): Promise<void> {\n const table = this.el.querySelector(`mrd-table[data-view=\"${name}\"]`) as any;\n if (!table) return;\n if (totalElements !== undefined) {\n table.totalElements = totalElements;\n }\n await table.setPage(page, rows, hasNext);\n }\n\n /** Inject aggregation totals into an embedded mrd-table for a VIEW or RELATED_VIEW item. */\n @Method()\n async setViewAggregations(name: string, data: any): Promise<void> {\n const table = this.el.querySelector(`mrd-table[data-view=\"${name}\"]`) as any;\n if (!table) return;\n await table.setAggregations(data);\n }\n\n /** Provide a resolved URL for an IMAGE field. Shows as thumbnail; clicking opens the lightbox. */\n @Method()\n async setImagePreview(fieldName: string, url: string): Promise<void> {\n this.imagePreviews = { ...this.imagePreviews, [fieldName]: url };\n }\n\n /** Open the lightbox directly with a URL (e.g. after mrdDownload on a FILE field). */\n @Method()\n async openImagePreview(url: string): Promise<void> {\n this.imagePreviewUrl = url;\n }\n\n private resolveSearchKey(): string | null {\n const items = this.flattenItems(this.items).filter(i => i.type === ClientLayoutItemType.SEARCH);\n if (items.length === 1) return items[0].dataClass ?? null;\n return null;\n }\n\n private handleViewLoadPage = (e: CustomEvent<{ page: number; sort: string; path: string; qs: string }>, name: string) => {\n e.stopPropagation();\n this.mrdLoadViewPage.emit({ name, page: e.detail.page, sort: e.detail.sort, path: e.detail.path, qs: e.detail.qs });\n };\n\n private handleSearchInput = (dataClass: string, query: string) => {\n this.searchQueryMap = { ...this.searchQueryMap, [dataClass]: query };\n if (this.searchTimers[dataClass]) clearTimeout(this.searchTimers[dataClass]);\n if (query.length < 2) {\n this.searchResultsMap = { ...this.searchResultsMap, [dataClass]: [] };\n return;\n }\n this.searchTimers[dataClass] = setTimeout(() => {\n this.mrdSearch.emit({ query, dataClass });\n }, 300);\n };\n\n private renderSingleFieldValue(item: ClientLayoutItem, value: unknown): any {\n const dt = item.dataType!;\n\n switch (dt) {\n case ClientLayoutItemFieldDataType.HYPERLINK: {\n const v = value as any;\n const href = v?.href ?? String(value);\n const label = v?.name ?? v?.text ?? v?.label ?? href;\n return (\n <a class=\"mrd-layout-section__link\" href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {label}\n </a>\n );\n }\n case ClientLayoutItemFieldDataType.TEXTBLOCK:\n return <span innerHTML={String(value)} />;\n case ClientLayoutItemFieldDataType.LONGTEXT:\n return <pre class=\"mrd-layout-section__pre\">{String(value)}</pre>;\n case ClientLayoutItemFieldDataType.JSON:\n return <pre class=\"mrd-layout-section__pre\" innerHTML={CellRenderer.formatJson(value)} />;\n case ClientLayoutItemFieldDataType.FILE: {\n const v = value as any;\n const fileName = v?.fileName ?? String(value);\n const href = v?.href ?? '';\n return (\n <button class=\"mrd-layout-section__download-link\" onClick={() => href && this.mrdDownload.emit({ href, fileName })}>\n <svg class=\"mrd-layout-section__file-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"currentColor\" d=\"M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm-1 7V3.5L18.5 9H13zm-3 8l-3-3 1.41-1.41L10 14.17l4.59-4.58L16 11l-6 6z\"/>\n </svg>\n {t('download', this.locale)}\n </button>\n );\n }\n case ClientLayoutItemFieldDataType.IMAGE: {\n const v = value as any;\n const href = v?.href ?? '';\n const fileName = v?.fileName ?? '';\n const previewUrl = this.imagePreviews[item.name!];\n if (previewUrl) {\n return (\n <button\n class=\"mrd-layout-section__image-thumb-btn\"\n onClick={() => { this.imagePreviewUrl = previewUrl; }}\n title={fileName || undefined}\n >\n <img class=\"mrd-layout-section__image-thumb\" src={previewUrl} alt={fileName} />\n </button>\n );\n }\n return (\n <button class=\"mrd-layout-section__download-link\" onClick={() => href && this.mrdDownload.emit({ href, fileName })}>\n <svg class=\"mrd-layout-section__file-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"currentColor\" d=\"M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm-1 7V3.5L18.5 9H13zm-3 8l-3-3 1.41-1.41L10 14.17l4.59-4.58L16 11l-6 6z\"/>\n </svg>\n {fileName || href}\n </button>\n );\n }\n case ClientLayoutItemFieldDataType.BOOLEAN:\n return (\n <span class={`mrd-layout-section__boolean mrd-layout-section__boolean--${value ? 'true' : 'false'}`}>\n {value ? t('yes', this.locale) : t('no', this.locale)}\n </span>\n );\n case ClientLayoutItemFieldDataType.LIST: {\n const listItem = (item.listItems ?? []).find(li => li.key === String(value));\n const label = listItem?.label ?? String(value);\n const color = listItem?.color;\n const bg = listItem?.backgroundColor;\n if (color && bg) {\n return (\n <span class=\"mrd-layout-section__badge\" style={{ color, backgroundColor: bg }}>\n {label}\n </span>\n );\n }\n if (color) {\n return (\n <span class=\"mrd-layout-section__badge-dot-row\">\n <span class=\"mrd-layout-section__badge-dot\" style={{ backgroundColor: color }} />\n {label}\n </span>\n );\n }\n return label;\n }\n case ClientLayoutItemFieldDataType.SECRET:\n return value ? <span class=\"mrd-layout-section__secret-masked\">{'••••••••'}</span> : null;\n default: {\n const text = CellRenderer.renderValue(dt, value, item.listItems ?? [], this.locale);\n return text || null;\n }\n }\n }\n\n private renderFieldValue(item: ClientLayoutItem, rawValue: unknown): any {\n if (rawValue == null || rawValue === '') return null;\n\n if (item.multiple && Array.isArray(rawValue)) {\n const rendered = rawValue.map(v => this.renderSingleFieldValue(item, v));\n if (rendered.every(r => typeof r === 'string' || r == null)) {\n return (rendered.filter(Boolean) as string[]).join(', ') || null;\n }\n return (\n <span>\n {rendered.map((r, i) => (\n <span key={String(i)}>\n {r}\n {i < rendered.length - 1 ? ', ' : ''}\n </span>\n ))}\n </span>\n );\n }\n\n return this.renderSingleFieldValue(item, rawValue);\n }\n\n private renderHistoryBadge(item: ClientLayoutItem, raw: unknown): any {\n const hist = item.historyEnabled ?? item.field?.historyEnabled;\n if (!hist || !item.name) return null;\n const history: Array<{ value: string; until: string }> = (raw as any)?.history ?? [];\n if (!history.length) return null;\n const sorted = [...history].sort((a, b) => b.until.localeCompare(a.until));\n const isOpen = this.openHistoryField === item.name;\n const { locale } = this;\n return (\n <span class=\"mrd-layout-section__history-wrap\">\n <button\n type=\"button\"\n class=\"mrd-layout-section__history-btn\"\n title={t('history_badge_tooltip', locale)}\n aria-label={t('history_badge_tooltip', locale)}\n onClick={(e) => {\n e.stopPropagation();\n this.openHistoryField = isOpen ? null : item.name!;\n }}\n >\n <svg class=\"mrd-layout-section__history-icon\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <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\"/>\n </svg>\n </button>\n {isOpen && (\n <div class=\"mrd-layout-section__history-popover\" role=\"listbox\">\n {sorted.map((entry, i) => (\n <div key={String(i)} class=\"mrd-layout-section__history-entry\">\n {entry.value} ({t('history_until', locale)} {formatDate(entry.until, locale)})\n </div>\n ))}\n </div>\n )}\n </span>\n );\n }\n\n private renderField(item: ClientLayoutItem): any {\n if (!item.name) return null;\n const raw = (this.data as Record<string, unknown>)[item.name];\n const hist = item.historyEnabled ?? item.field?.historyEnabled;\n const rawValue = hist && raw !== null && typeof raw === 'object' && 'current' in (raw as object)\n ? (raw as any).current\n : raw;\n const renderedValue = this.renderFieldValue(item, rawValue);\n\n if (item.header) {\n return (\n <h1 class=\"mrd-layout-section__field-header\" key={item.name}>\n {typeof renderedValue === 'string' ? renderedValue : rawValue != null ? String(rawValue) : item.label}\n </h1>\n );\n }\n\n if (renderedValue == null) return null;\n\n const isBlock = item.dataType === ClientLayoutItemFieldDataType.TEXTBLOCK\n || item.dataType === ClientLayoutItemFieldDataType.LONGTEXT\n || item.dataType === ClientLayoutItemFieldDataType.JSON;\n\n return (\n <div class={`mrd-layout-section__field${isBlock ? ' mrd-layout-section__field--block' : ''}`} key={item.name}>\n <span class=\"mrd-layout-section__field-label\">{item.label}</span>\n <span class=\"mrd-layout-section__field-value\">\n {renderedValue}\n {this.renderHistoryBadge(item, raw)}\n </span>\n </div>\n );\n }\n\n private renderRelation(item: ClientLayoutItem): any {\n if (!item.name) return null;\n const links = ((this.data as any)?._links ?? {}) as Record<string, DataObjectLink>;\n const link = links[item.name];\n if (!link) return null;\n\n const makeBtn = (href: string, name: string) => (\n <button key={href} class=\"mrd-layout-section__relation-link\" onClick={() => this.mrdNavigate.emit({ href, label: name })}>\n {name}\n </button>\n );\n\n let valueContent: any;\n if (link.values?.length) {\n valueContent = link.values.map(v => makeBtn(v.href, v.name));\n } else if (link.name) {\n valueContent = makeBtn(link.href, link.name);\n }\n\n if (!valueContent) return null;\n\n return (\n <div class=\"mrd-layout-section__field\" key={item.name}>\n <span class=\"mrd-layout-section__field-label\">{item.label}</span>\n <span class=\"mrd-layout-section__field-value\">{valueContent}</span>\n </div>\n );\n }\n\n private renderSearch(item: ClientLayoutItem): any {\n if (!item.dataClass) return null;\n const dataClass = item.dataClass;\n const query = this.searchQueryMap[dataClass] ?? '';\n const results = this.searchResultsMap[dataClass] ?? [];\n\n return (\n <div class=\"mrd-layout-section__search\" key={`search-${dataClass}`}>\n <div class=\"mrd-layout-section__search-wrap\">\n <svg class=\"mrd-layout-section__search-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clip-rule=\"evenodd\" />\n </svg>\n <input\n class=\"mrd-layout-section__search-input\"\n type=\"text\"\n value={query}\n placeholder={item.label ?? ''}\n onInput={e => this.handleSearchInput(dataClass, (e.target as HTMLInputElement).value)}\n />\n </div>\n {results.length > 0 && (\n <ul class=\"mrd-layout-section__search-results\">\n {results.map(r => (\n <li key={r.id} class=\"mrd-layout-section__search-result\">\n <button class=\"mrd-layout-section__search-result-btn\" onClick={() => this.mrdNavigate.emit({ href: r.id, label: r.label })}>\n <span class=\"mrd-layout-section__search-result-label\">{r.label}</span>\n {r.description && <span class=\"mrd-layout-section__search-result-desc\">{r.description}</span>}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n }\n\n private renderRelatedView(item: ClientLayoutItem): any {\n const key = this.viewKeyFor(item);\n if (!key) return null;\n if (!item.view) return null;\n\n const showTitle = item.showTitle ?? false;\n\n // Extract parentId from data._links.self.href for RELATED_VIEW path construction\n const selfHref: string = (this.data as any)?._links?.self?.href ?? '';\n const parentId = selfHref.split('/').filter(Boolean).pop() ?? '';\n\n return (\n <div class=\"mrd-layout-section__related-view\" key={`view-${key}`}>\n {showTitle && item.label && <h3 class=\"mrd-layout-section__related-view-title\">{item.label}</h3>}\n <mrd-table\n data-view={key}\n item={item}\n parentId={parentId}\n locale={this.locale}\n onMrdLoadPage={(e: CustomEvent<{ page: number; sort: string; path: string; qs: string }>) => this.handleViewLoadPage(e, key)}\n onMrdLoadAggregations={(e: CustomEvent<{ path: string; qs: string; aggQs: string }>) => {\n e.stopPropagation();\n this.mrdLoadViewAggregations.emit({\n name: key,\n dataClass: item.dataClass ?? key,\n ...e.detail,\n });\n }}\n onMrdRowClick={(e: CustomEvent<Record<string, any>>) => {\n e.stopPropagation();\n const row = e.detail;\n this.mrdNavigate.emit({ href: row?._links?.self?.href, label: row?.name ?? '' });\n }}\n onMrdAction={(e: CustomEvent<{ action: string; path?: string; qs?: string; dataClass?: string; parentPath?: string | null; basicType?: string }>) => {\n e.stopPropagation();\n this.mrdViewAction.emit({\n name: key,\n action: e.detail.action,\n dataClass: item.dataClass ?? key,\n path: e.detail.path,\n qs: e.detail.qs,\n parentPath: e.detail.parentPath,\n basicType: e.detail.basicType,\n });\n }}\n />\n </div>\n );\n }\n\n private renderItem(item: ClientLayoutItem): any {\n switch (item.type) {\n case ClientLayoutItemType.FIELD:\n return this.renderField(item);\n case ClientLayoutItemType.RELATION:\n return this.renderRelation(item);\n case ClientLayoutItemType.HEADER:\n return (\n <h2 class=\"mrd-layout-section__header\" key={`header-${item.label}`}>\n {item.label}\n </h2>\n );\n case ClientLayoutItemType.TEXT:\n return <div class=\"mrd-layout-section__text\" key={`text-${item.label}`} innerHTML={item.label ?? ''} />;\n case ClientLayoutItemType.NAVIGATE:\n return (\n <button\n class=\"mrd-layout-section__navigate\"\n key={`nav-${item.label}`}\n onClick={() => this.mrdNavigate.emit({ label: item.label ?? '', navigate: item.navigate ?? { dataClass: item.dataClass ?? '', icon: item.icon, navigationType: item.navigationType } })}\n >\n {item.label}\n </button>\n );\n case ClientLayoutItemType.SEARCH:\n return this.renderSearch(item);\n case ClientLayoutItemType.SECTION:\n case ClientLayoutItemType.GROUP:\n return (\n <div class=\"mrd-layout-section__group\" key={`group-${item.label}`}>\n {item.label && <h3 class=\"mrd-layout-section__group-title\">{item.label}</h3>}\n {(item.items ?? []).map(child => this.renderItem(child))}\n </div>\n );\n case ClientLayoutItemType.RELATED_VIEW:\n case ClientLayoutItemType.VIEW:\n return this.renderRelatedView(item);\n default:\n return null;\n }\n }\n\n private renderImageModal() {\n if (!this.imagePreviewUrl) return null;\n return (\n <div class=\"mrd-layout-section__modal-backdrop\" onClick={() => { this.imagePreviewUrl = null; }}>\n <div class=\"mrd-layout-section__modal\" onClick={(e) => e.stopPropagation()}>\n <button class=\"mrd-layout-section__modal-close\" onClick={() => { this.imagePreviewUrl = null; }}>✕</button>\n <img class=\"mrd-layout-section__modal-image\" src={this.imagePreviewUrl} alt=\"\" />\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"mrd-layout-section\">{this.items.map(item => this.renderItem(item))}</div>\n {this.renderImageModal()}\n </Host>\n );\n }\n}\n"],"version":3}