@mmlogic/components 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/{collection/utils/cell-renderer.js → mosterdcomponents/cell-renderer-CbRwLOo8.js} +9 -3
  2. package/dist/mosterdcomponents/cell-renderer-CbRwLOo8.js.map +1 -0
  3. package/dist/{esm/index.js → mosterdcomponents/client-layout-D88nn5zf.js} +4 -1
  4. package/dist/mosterdcomponents/client-layout-D88nn5zf.js.map +1 -0
  5. package/dist/{collection/utils/format.js → mosterdcomponents/format-BAfsQfy1.js} +12 -7
  6. package/dist/mosterdcomponents/format-BAfsQfy1.js.map +1 -0
  7. package/dist/{collection/utils/i18n.js → mosterdcomponents/i18n-hoGGKbKU.js} +6 -1
  8. package/dist/mosterdcomponents/i18n-hoGGKbKU.js.map +1 -0
  9. package/dist/mosterdcomponents/index-B_tPFIvS.js +4585 -0
  10. package/dist/mosterdcomponents/index-B_tPFIvS.js.map +1 -0
  11. package/dist/mosterdcomponents/index-I5SuYv7a.js +4 -0
  12. package/dist/mosterdcomponents/index-I5SuYv7a.js.map +1 -0
  13. package/dist/mosterdcomponents/index.esm.js +5 -1
  14. package/dist/mosterdcomponents/index.esm.js.map +1 -0
  15. package/dist/mosterdcomponents/mosterdcomponents.css +180 -1
  16. package/dist/mosterdcomponents/mosterdcomponents.esm.js +50 -1
  17. package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +1 -0
  18. package/dist/mosterdcomponents/mrd-boolean-field.entry.js +37 -0
  19. package/dist/mosterdcomponents/mrd-boolean-field.entry.js.map +1 -0
  20. package/dist/mosterdcomponents/mrd-currency-field.entry.js +67 -0
  21. package/dist/mosterdcomponents/mrd-currency-field.entry.js.map +1 -0
  22. package/dist/mosterdcomponents/mrd-date-field.entry.js +46 -0
  23. package/dist/mosterdcomponents/mrd-date-field.entry.js.map +1 -0
  24. package/dist/mosterdcomponents/mrd-datetime-field.entry.js +78 -0
  25. package/dist/mosterdcomponents/mrd-datetime-field.entry.js.map +1 -0
  26. package/dist/mosterdcomponents/mrd-email-field.entry.js +50 -0
  27. package/dist/mosterdcomponents/mrd-email-field.entry.js.map +1 -0
  28. package/dist/{collection/components/mrd-field/mrd-field.js → mosterdcomponents/mrd-field.entry.js} +28 -179
  29. package/dist/mosterdcomponents/mrd-field.entry.js.map +1 -0
  30. package/dist/mosterdcomponents/mrd-file-field.entry.js +108 -0
  31. package/dist/mosterdcomponents/mrd-file-field.entry.js.map +1 -0
  32. package/dist/{collection/components/mrd-form/mrd-form.js → mosterdcomponents/mrd-form.entry.js} +82 -280
  33. package/dist/mosterdcomponents/mrd-form.entry.js.map +1 -0
  34. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js +87 -0
  35. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js.map +1 -0
  36. package/dist/mosterdcomponents/mrd-image-field.entry.js +122 -0
  37. package/dist/mosterdcomponents/mrd-image-field.entry.js.map +1 -0
  38. package/dist/{collection/components/mrd-layout-section/mrd-layout-section.js → mosterdcomponents/mrd-layout-section.entry.js} +31 -418
  39. package/dist/mosterdcomponents/mrd-layout-section.entry.js.map +1 -0
  40. package/dist/mosterdcomponents/mrd-list-field.entry.js +107 -0
  41. package/dist/mosterdcomponents/mrd-list-field.entry.js.map +1 -0
  42. package/dist/mosterdcomponents/mrd-longtext-field.entry.js +47 -0
  43. package/dist/mosterdcomponents/mrd-longtext-field.entry.js.map +1 -0
  44. package/dist/mosterdcomponents/mrd-number-field.entry.js +87 -0
  45. package/dist/mosterdcomponents/mrd-number-field.entry.js.map +1 -0
  46. package/dist/mosterdcomponents/mrd-relation-field.entry.js +267 -0
  47. package/dist/mosterdcomponents/mrd-relation-field.entry.js.map +1 -0
  48. package/dist/mosterdcomponents/mrd-secret-field.entry.js +49 -0
  49. package/dist/mosterdcomponents/mrd-secret-field.entry.js.map +1 -0
  50. package/dist/{collection/components/mrd-table/mrd-table.js → mosterdcomponents/mrd-table.entry.js} +67 -398
  51. package/dist/mosterdcomponents/mrd-table.entry.js.map +1 -0
  52. package/dist/mosterdcomponents/mrd-text-field.entry.js +47 -0
  53. package/dist/mosterdcomponents/mrd-text-field.entry.js.map +1 -0
  54. package/dist/mosterdcomponents/mrd-textarea-field.entry.js +86 -0
  55. package/dist/mosterdcomponents/mrd-textarea-field.entry.js.map +1 -0
  56. package/dist/mosterdcomponents/mrd-time-field.entry.js +46 -0
  57. package/dist/mosterdcomponents/mrd-time-field.entry.js.map +1 -0
  58. package/dist/{esm/quill-CiuCgGz_.js → mosterdcomponents/quill-C9pgw_k-.js} +16282 -1397
  59. package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +1 -0
  60. package/dist/{collection/utils/validation.js → mosterdcomponents/validation-ixb43cqU.js} +12 -5
  61. package/dist/mosterdcomponents/validation-ixb43cqU.js.map +1 -0
  62. package/dist/types/components/mrd-form/mrd-form.d.ts +13 -1
  63. package/dist/types/components/mrd-relation-field/mrd-relation-field.d.ts +3 -0
  64. package/dist/types/components/mrd-table/mrd-table.d.ts +4 -0
  65. package/dist/types/components.d.ts +19 -9
  66. package/package.json +1 -1
  67. package/dist/cjs/app-globals-V2Kpy_OQ.js +0 -5
  68. package/dist/cjs/index-BPj2cBXs.js +0 -1570
  69. package/dist/cjs/index.cjs.js +0 -66
  70. package/dist/cjs/loader.cjs.js +0 -13
  71. package/dist/cjs/mosterdcomponents.cjs.js +0 -25
  72. package/dist/cjs/mrd-boolean-field_20.cjs.entry.js +0 -3848
  73. package/dist/cjs/quill-DmFfnC1f.js +0 -16272
  74. package/dist/collection/collection-manifest.json +0 -32
  75. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.js +0 -199
  76. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.scss +0 -77
  77. package/dist/collection/components/mrd-currency-field/mrd-currency-field.js +0 -248
  78. package/dist/collection/components/mrd-currency-field/mrd-currency-field.scss +0 -100
  79. package/dist/collection/components/mrd-date-field/mrd-date-field.js +0 -206
  80. package/dist/collection/components/mrd-date-field/mrd-date-field.scss +0 -66
  81. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.js +0 -240
  82. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.scss +0 -66
  83. package/dist/collection/components/mrd-email-field/mrd-email-field.js +0 -230
  84. package/dist/collection/components/mrd-email-field/mrd-email-field.scss +0 -69
  85. package/dist/collection/components/mrd-field/mrd-field.scss +0 -118
  86. package/dist/collection/components/mrd-file-field/mrd-file-field.js +0 -341
  87. package/dist/collection/components/mrd-file-field/mrd-file-field.scss +0 -153
  88. package/dist/collection/components/mrd-form/mrd-form.scss +0 -148
  89. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.js +0 -291
  90. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.scss +0 -91
  91. package/dist/collection/components/mrd-image-field/mrd-image-field.js +0 -356
  92. package/dist/collection/components/mrd-image-field/mrd-image-field.scss +0 -190
  93. package/dist/collection/components/mrd-layout-section/mrd-layout-section.scss +0 -445
  94. package/dist/collection/components/mrd-list-field/mrd-list-field.js +0 -313
  95. package/dist/collection/components/mrd-list-field/mrd-list-field.scss +0 -109
  96. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.js +0 -227
  97. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.scss +0 -78
  98. package/dist/collection/components/mrd-number-field/mrd-number-field.js +0 -316
  99. package/dist/collection/components/mrd-number-field/mrd-number-field.scss +0 -77
  100. package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +0 -678
  101. package/dist/collection/components/mrd-relation-field/mrd-relation-field.scss +0 -266
  102. package/dist/collection/components/mrd-secret-field/mrd-secret-field.js +0 -229
  103. package/dist/collection/components/mrd-secret-field/mrd-secret-field.scss +0 -73
  104. package/dist/collection/components/mrd-table/mrd-table.scss +0 -742
  105. package/dist/collection/components/mrd-text-field/mrd-text-field.js +0 -227
  106. package/dist/collection/components/mrd-text-field/mrd-text-field.scss +0 -69
  107. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.js +0 -267
  108. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.scss +0 -79
  109. package/dist/collection/components/mrd-time-field/mrd-time-field.js +0 -206
  110. package/dist/collection/components/mrd-time-field/mrd-time-field.scss +0 -66
  111. package/dist/collection/dev/api.js +0 -136
  112. package/dist/collection/dev/app.js +0 -868
  113. package/dist/collection/dev/auth.js +0 -156
  114. package/dist/collection/dev/example-data.js +0 -403
  115. package/dist/collection/dev/sprites.svg +0 -55
  116. package/dist/collection/index.js +0 -1
  117. package/dist/collection/types/client-layout.js +0 -64
  118. package/dist/collection/types/index.js +0 -1
  119. package/dist/components/client-layout.js +0 -1
  120. package/dist/components/format.js +0 -1
  121. package/dist/components/i18n.js +0 -1
  122. package/dist/components/index.js +0 -1
  123. package/dist/components/mrd-boolean-field.js +0 -1
  124. package/dist/components/mrd-boolean-field2.js +0 -1
  125. package/dist/components/mrd-currency-field.js +0 -1
  126. package/dist/components/mrd-currency-field2.js +0 -1
  127. package/dist/components/mrd-date-field.js +0 -1
  128. package/dist/components/mrd-date-field2.js +0 -1
  129. package/dist/components/mrd-datetime-field.js +0 -1
  130. package/dist/components/mrd-datetime-field2.js +0 -1
  131. package/dist/components/mrd-email-field.js +0 -1
  132. package/dist/components/mrd-email-field2.js +0 -1
  133. package/dist/components/mrd-field.js +0 -1
  134. package/dist/components/mrd-field2.js +0 -1
  135. package/dist/components/mrd-file-field.js +0 -1
  136. package/dist/components/mrd-file-field2.js +0 -1
  137. package/dist/components/mrd-form.js +0 -1
  138. package/dist/components/mrd-hyperlink-field.js +0 -1
  139. package/dist/components/mrd-hyperlink-field2.js +0 -1
  140. package/dist/components/mrd-image-field.js +0 -1
  141. package/dist/components/mrd-image-field2.js +0 -1
  142. package/dist/components/mrd-layout-section.js +0 -1
  143. package/dist/components/mrd-list-field.js +0 -1
  144. package/dist/components/mrd-list-field2.js +0 -1
  145. package/dist/components/mrd-longtext-field.js +0 -1
  146. package/dist/components/mrd-longtext-field2.js +0 -1
  147. package/dist/components/mrd-number-field.js +0 -1
  148. package/dist/components/mrd-number-field2.js +0 -1
  149. package/dist/components/mrd-relation-field.js +0 -1
  150. package/dist/components/mrd-relation-field2.js +0 -1
  151. package/dist/components/mrd-secret-field.js +0 -1
  152. package/dist/components/mrd-secret-field2.js +0 -1
  153. package/dist/components/mrd-table.js +0 -1
  154. package/dist/components/mrd-table2.js +0 -1
  155. package/dist/components/mrd-text-field.js +0 -1
  156. package/dist/components/mrd-text-field2.js +0 -1
  157. package/dist/components/mrd-textarea-field.js +0 -1
  158. package/dist/components/mrd-textarea-field2.js +0 -1
  159. package/dist/components/mrd-time-field.js +0 -1
  160. package/dist/components/mrd-time-field2.js +0 -1
  161. package/dist/components/quill.js +0 -1
  162. package/dist/components/validation.js +0 -1
  163. package/dist/esm/app-globals-DQuL1Twl.js +0 -3
  164. package/dist/esm/index-_tsCCkAi.js +0 -1561
  165. package/dist/esm/loader.js +0 -11
  166. package/dist/esm/mosterdcomponents.js +0 -21
  167. package/dist/esm/mrd-boolean-field_20.entry.js +0 -3827
  168. package/dist/index.cjs.js +0 -1
  169. package/dist/index.js +0 -1
  170. package/dist/mosterdcomponents/p-CiuCgGz_.js +0 -1
  171. package/dist/mosterdcomponents/p-DQuL1Twl.js +0 -1
  172. package/dist/mosterdcomponents/p-_tsCCkAi.js +0 -2
  173. package/dist/mosterdcomponents/p-c9839596.entry.js +0 -1
@@ -0,0 +1 @@
1
+ {"file":"mrd-table.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-table/mrd-table.scss?tag=mrd-table&encapsulation=scoped","src/components/mrd-table/mrd-table.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n/* ── Scroll container (paginated mode) ─────────────────────────────────── */\n.mrd-table__scroll {\n overflow-y: auto;\n overflow-x: auto;\n border: 1px solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n /* Voorkomt dat de browser scrollTop automatisch aanpast wanneer de\n top-spacer groeit (scroll anchoring feedbackloop). */\n overflow-anchor: none;\n}\n\n/* ── Inner wrapper: horizontal scroll in non-paginated mode ────────────── */\n/* Only used in non-paginated path; paginated mode scrolls via .mrd-table__scroll */\n.mrd-table {\n overflow-x: auto;\n}\n\n/* ── Table ─────────────────────────────────────────────────────────────── */\n.mrd-table__table {\n width: auto;\n min-width: 100%;\n border-collapse: collapse;\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-900);\n}\n\n/* When table-layout: fixed is applied (after col widths are locked), allow\n horizontal overflow so the scroll container can scroll. */\n.mrd-table__scroll .mrd-table__table {\n min-width: max-content;\n}\n\n/* ── Sticky header ─────────────────────────────────────────────────────── */\n.mrd-table__header {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--mrd-color-white);\n text-align: left;\n padding: var(--mrd-space-2) var(--mrd-space-4);\n border-bottom: 2px solid var(--mrd-border-color);\n color: var(--mrd-color-neutral-600);\n font-weight: var(--mrd-font-weight-medium);\n white-space: nowrap;\n font-size: var(--mrd-font-size-xs);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.mrd-table__header--sortable {\n cursor: pointer;\n user-select: none;\n}\n\n.mrd-table__header--sortable:hover {\n background: var(--mrd-color-neutral-50);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-table__header--sorted-asc,\n.mrd-table__header--sorted-desc {\n color: var(--mrd-color-primary);\n border-bottom-color: var(--mrd-color-primary);\n}\n\n.mrd-table__header-label {\n margin-right: var(--mrd-space-1);\n}\n\n.mrd-table__sort-icon {\n font-size: 0.85rem;\n opacity: 0.4;\n vertical-align: middle;\n}\n\n.mrd-table__header--sorted-asc .mrd-table__sort-icon,\n.mrd-table__header--sorted-desc .mrd-table__sort-icon {\n opacity: 1;\n color: var(--mrd-color-primary);\n}\n\n.mrd-table__filter-icon {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n margin-left: var(--mrd-space-1);\n color: var(--mrd-color-primary);\n}\n\n/* ── Data rows ─────────────────────────────────────────────────────────── */\n/* Background is set via inline style based on absolute row index,\n so zebra striping stays correct even with virtual spacer rows. */\n.mrd-table__row {\n border-bottom: 1px solid var(--mrd-border-color);\n}\n\n/* !important overrides the inline zebra background on hover */\n.mrd-table__row:hover {\n background: var(--mrd-color-neutral-200) !important;\n}\n\n.mrd-table__row--clickable {\n cursor: pointer;\n}\n\n/* ── Spacer rows (virtual scroll padding above/below render window) ─────── */\n.mrd-table__spacer {\n border: none;\n}\n\n.mrd-table__spacer td {\n padding: 0;\n border: none;\n}\n\n/* ── Cells ─────────────────────────────────────────────────────────────── */\n.mrd-table__cell {\n padding: var(--mrd-space-2) var(--mrd-space-4);\n vertical-align: top;\n white-space: nowrap;\n}\n\n.mrd-table__cell--numeric {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n/* ── Loading placeholder row ───────────────────────────────────────────── */\n.mrd-table__row--loading {\n background: transparent;\n}\n\n.mrd-table__cell--placeholder {\n padding: var(--mrd-space-2) var(--mrd-space-4);\n border-bottom: 1px solid var(--mrd-border-color);\n}\n\n.mrd-table__placeholder-bar {\n display: block;\n height: 0.75rem;\n width: 55%;\n border-radius: var(--mrd-border-radius-sm);\n background: linear-gradient(\n 90deg,\n var(--mrd-color-neutral-200) 25%,\n var(--mrd-color-neutral-100) 50%,\n var(--mrd-color-neutral-200) 75%\n );\n background-size: 200% 100%;\n animation: mrd-shimmer 1.4s ease infinite;\n}\n\n@keyframes mrd-shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n/* ── Toolbar ───────────────────────────────────────────────────────────── */\n.mrd-table__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: var(--mrd-space-2);\n}\n\n.mrd-table__toolbar-left,\n.mrd-table__toolbar-right {\n display: flex;\n gap: var(--mrd-space-2);\n align-items: center;\n}\n\n.mrd-table__toolbar-center {\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: var(--mrd-space-1);\n}\n\n/* ── View switcher ───────────────────────────────────────────────────────── */\n.mrd-table__view-switcher {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-1);\n}\n\n.mrd-table__view-arrow {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0 var(--mrd-space-1);\n color: var(--mrd-color-neutral-500);\n font-size: var(--mrd-font-size-xs);\n line-height: 1;\n}\n\n.mrd-table__view-arrow:hover {\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-table__view-title-wrap {\n position: relative;\n}\n\n.mrd-table__view-title {\n font-size: var(--mrd-font-size-sm);\n font-weight: 600;\n color: var(--mrd-color-neutral-800);\n font-family: var(--mrd-font-family);\n background: none;\n border: none;\n outline: none;\n cursor: pointer;\n padding: 0 var(--mrd-space-1);\n max-width: 220px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.mrd-table__view-title:hover {\n color: var(--mrd-color-primary);\n}\n\n.mrd-table__view-popover {\n position: absolute;\n top: calc(100% + var(--mrd-space-1));\n left: 50%;\n transform: translateX(-50%);\n background: var(--mrd-color-white);\n border: 1px solid var(--mrd-color-neutral-200);\n border-radius: var(--mrd-radius-md);\n box-shadow: var(--mrd-shadow-md);\n z-index: 100;\n min-width: 160px;\n padding: var(--mrd-space-1) 0;\n}\n\n.mrd-table__view-popover-item {\n display: block;\n width: 100%;\n text-align: left;\n background: none;\n border: none;\n cursor: pointer;\n padding: var(--mrd-space-2) var(--mrd-space-3);\n font-size: var(--mrd-font-size-sm);\n font-family: var(--mrd-font-family);\n color: var(--mrd-color-neutral-700);\n white-space: nowrap;\n}\n\n.mrd-table__view-popover-item:hover {\n background: var(--mrd-color-neutral-50);\n}\n\n.mrd-table__view-popover-item--active {\n font-weight: 600;\n color: var(--mrd-color-primary);\n}\n\n.mrd-table__action {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n padding: 0;\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--mrd-border-radius);\n cursor: pointer;\n color: var(--mrd-color-neutral-400);\n transition: background-color 0.15s, border-color 0.15s, color 0.15s;\n}\n\n.mrd-table__action:hover {\n background-color: var(--mrd-color-neutral-100);\n border-color: var(--mrd-color-neutral-300);\n color: var(--mrd-color-neutral-700);\n}\n\n.mrd-table__action:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Primary: slightly more prominent than regular at rest; primary fill on hover */\n.mrd-table__action--primary {\n color: var(--mrd-color-neutral-500);\n}\n\n.mrd-table__action--primary:hover {\n background: var(--mrd-color-primary);\n border-color: var(--mrd-color-primary);\n color: var(--mrd-color-white);\n}\n\n.mrd-table__action--danger {\n color: var(--mrd-color-error);\n}\n\n.mrd-table__action--danger:hover {\n background-color: var(--mrd-color-error-light, #fef2f2);\n border-color: var(--mrd-color-error);\n}\n\n.mrd-table__action-icon {\n width: 1.25rem;\n height: 1.25rem;\n pointer-events: none;\n fill: currentColor;\n}\n\n/* CSS tooltip — appears above the button on hover */\n.mrd-table__action-tooltip {\n display: none;\n position: absolute;\n bottom: calc(100% + 6px);\n right: 0;\n padding: var(--mrd-space-1) var(--mrd-space-2);\n font-size: var(--mrd-font-size-xs);\n white-space: nowrap;\n background: var(--mrd-color-tooltip, #fffce1);\n color: var(--mrd-color-neutral-900);\n border: 1px solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius-sm, var(--mrd-border-radius));\n pointer-events: none;\n z-index: 10;\n}\n\n.mrd-table__action:hover .mrd-table__action-tooltip {\n display: block;\n}\n\n/* ── Create-type picker ──────────────────────────────────────────────────── */\n.mrd-table__create-picker-wrap {\n position: relative;\n}\n\n.mrd-table__create-picker {\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n background: var(--mrd-color-white, #fff);\n border: 1px solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n box-shadow: var(--mrd-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.12));\n z-index: 10;\n min-width: 10rem;\n padding: var(--mrd-space-1) 0;\n}\n\n.mrd-table__create-picker-item {\n display: block;\n width: 100%;\n text-align: left;\n padding: var(--mrd-space-2) var(--mrd-space-3);\n background: none;\n border: none;\n cursor: pointer;\n font-size: var(--mrd-font-size-sm);\n font-family: var(--mrd-font-family);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-table__create-picker-item:hover {\n background: var(--mrd-color-neutral-50);\n color: var(--mrd-color-neutral-900);\n}\n\n/* ── Filter toggle active state ────────────────────────────────────────── */\n.mrd-table__filter-toggle--active {\n background: var(--mrd-color-primary);\n border-color: var(--mrd-color-primary);\n color: var(--mrd-color-white);\n}\n\n.mrd-table__filter-toggle--active:hover {\n background: var(--mrd-color-primary-dark, var(--mrd-color-primary));\n border-color: var(--mrd-color-primary-dark, var(--mrd-color-primary));\n color: var(--mrd-color-white);\n}\n\n/* Badge showing count of active filters */\n.mrd-table__filter-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n min-width: 1.25rem;\n height: 1.25rem;\n padding: 0 3px;\n background: var(--mrd-color-error, #e53e3e);\n color: var(--mrd-color-white);\n border-radius: 9999px;\n font-size: 0.65rem;\n font-weight: var(--mrd-font-weight-medium);\n line-height: 1.25rem;\n text-align: center;\n pointer-events: none;\n}\n\n/* ── Header: filtered indicator ─────────────────────────────────────────── */\n.mrd-table__header--filtered {\n color: var(--mrd-color-primary);\n border-bottom-color: var(--mrd-color-primary);\n}\n\n/* ── Filter popup ───────────────────────────────────────────────────────── */\n.mrd-table__filter-popup {\n position: fixed;\n width: 280px;\n background: var(--mrd-color-white);\n border: 1px solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n box-shadow: var(--mrd-shadow-md, 0 4px 12px rgba(0,0,0,.12));\n z-index: var(--mrd-z-dropdown, 200);\n font-size: var(--mrd-font-size-sm);\n}\n\n.mrd-table__filter-popup-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--mrd-space-2) var(--mrd-space-3);\n border-bottom: 1px solid var(--mrd-border-color);\n}\n\n.mrd-table__filter-popup-title {\n font-weight: var(--mrd-font-weight-medium);\n color: var(--mrd-color-neutral-800);\n font-size: var(--mrd-font-size-sm);\n}\n\n.mrd-table__filter-close {\n background: transparent;\n border: none;\n cursor: pointer;\n color: var(--mrd-color-neutral-500);\n font-size: 0.9rem;\n padding: 2px 4px;\n border-radius: 3px;\n line-height: 1;\n}\n\n.mrd-table__filter-close:hover {\n background: var(--mrd-color-neutral-100);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-table__filter-section {\n padding: var(--mrd-space-2) var(--mrd-space-3);\n}\n\n.mrd-table__filter-section-label {\n font-size: var(--mrd-font-size-xs);\n font-weight: var(--mrd-font-weight-medium);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mrd-color-neutral-500);\n margin-bottom: var(--mrd-space-2);\n}\n\n.mrd-table__filter-sort-buttons {\n display: flex;\n gap: var(--mrd-space-2);\n}\n\n.mrd-table__filter-sort-btn {\n flex: 1;\n padding: var(--mrd-space-1) var(--mrd-space-2);\n background: transparent;\n border: 1px solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n cursor: pointer;\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-neutral-700);\n}\n\n.mrd-table__filter-sort-btn:hover {\n background: var(--mrd-color-neutral-100);\n}\n\n.mrd-table__filter-sort-btn--active {\n background: var(--mrd-color-primary);\n border-color: var(--mrd-color-primary);\n color: var(--mrd-color-white);\n}\n\n.mrd-table__filter-divider {\n height: 1px;\n background: var(--mrd-border-color);\n margin: 0;\n}\n\n/* ── Filter editors ─────────────────────────────────────────────────────── */\n.mrd-table__filter-editor {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-2);\n}\n\n.mrd-table__filter-select,\n.mrd-table__filter-input {\n width: 100%;\n padding: var(--mrd-space-1) var(--mrd-space-2);\n border: 1px solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-900);\n background: var(--mrd-color-white);\n box-sizing: border-box;\n}\n\n.mrd-table__filter-select:focus,\n.mrd-table__filter-input:focus {\n outline: none;\n border-color: var(--mrd-color-primary);\n box-shadow: 0 0 0 2px rgba(0,0,0,.06);\n}\n\n.mrd-table__filter-range {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-1);\n}\n\n.mrd-table__filter-range .mrd-table__filter-input {\n flex: 1;\n min-width: 0;\n}\n\n.mrd-table__filter-range-sep {\n color: var(--mrd-color-neutral-400);\n flex-shrink: 0;\n}\n\n.mrd-table__filter-range--stacked {\n flex-direction: column;\n align-items: stretch;\n gap: var(--mrd-space-2);\n}\n\n.mrd-table__filter-range-label {\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-neutral-500);\n margin-bottom: 2px;\n}\n\n/* Radio group */\n.mrd-table__filter-radio-group {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n}\n\n.mrd-table__filter-radio-group--inline {\n flex-direction: row;\n gap: var(--mrd-space-3);\n}\n\n.mrd-table__filter-radio-label {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-1);\n cursor: pointer;\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-800);\n}\n\n/* List (enum) checkboxes */\n.mrd-table__filter-list {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n max-height: 180px;\n overflow-y: auto;\n}\n\n.mrd-table__filter-list-controls {\n display: flex;\n gap: var(--mrd-space-2);\n margin-bottom: var(--mrd-space-1);\n}\n\n.mrd-table__filter-list-btn {\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-primary);\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n text-decoration: underline;\n}\n\n.mrd-table__filter-checkbox-label {\n display: flex;\n align-items: center;\n gap: var(--mrd-space-1);\n cursor: pointer;\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-table__filter-no-support {\n font-size: var(--mrd-font-size-sm);\n color: var(--mrd-color-neutral-500);\n margin: 0;\n font-style: italic;\n}\n\n/* ── Popup footer ───────────────────────────────────────────────────────── */\n.mrd-table__filter-popup-footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--mrd-space-2);\n padding: var(--mrd-space-2) var(--mrd-space-3);\n border-top: 1px solid var(--mrd-border-color);\n}\n\n.mrd-table__filter-btn {\n padding: var(--mrd-space-1) var(--mrd-space-3);\n border-radius: var(--mrd-border-radius);\n border: 1px solid var(--mrd-border-color);\n font-size: var(--mrd-font-size-sm);\n cursor: pointer;\n}\n\n.mrd-table__filter-btn--clear {\n background: transparent;\n color: var(--mrd-color-neutral-600);\n}\n\n.mrd-table__filter-btn--clear:hover {\n background: var(--mrd-color-neutral-100);\n}\n\n.mrd-table__filter-btn--apply {\n background: var(--mrd-color-primary);\n border-color: var(--mrd-color-primary);\n color: var(--mrd-color-white);\n}\n\n.mrd-table__filter-btn--apply:hover {\n background: var(--mrd-color-primary-dark, var(--mrd-color-primary));\n border-color: var(--mrd-color-primary-dark, var(--mrd-color-primary));\n}\n\n/* ── Totals row ─────────────────────────────────────────────────────────── */\n.mrd-table__totals-row {\n border-top: 2px solid var(--mrd-border-color);\n}\n\n.mrd-table__totals-cell {\n position: sticky;\n bottom: 0;\n z-index: 2;\n padding: var(--mrd-space-2) var(--mrd-space-4);\n background: var(--mrd-color-white);\n font-weight: var(--mrd-font-weight-medium);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n border-top: 2px solid var(--mrd-border-color);\n}\n\n.mrd-table__totals-cell--numeric {\n text-align: right;\n}\n\n/* ── Pagination footer ─────────────────────────────────────────────────── */\n.mrd-table__footer {\n padding: var(--mrd-space-1) var(--mrd-space-2);\n font-size: var(--mrd-font-size-xs);\n color: var(--mrd-color-neutral-500);\n text-align: right;\n}\n\n/* ── Empty state ───────────────────────────────────────────────────────── */\n.mrd-table__empty {\n padding: var(--mrd-space-4) var(--mrd-space-3);\n color: var(--mrd-color-neutral-500);\n font-size: var(--mrd-font-size-sm);\n text-align: center;\n margin: 0;\n}\n\n/* ── File / image download cell ─────────────────────────────────────────── */\n.mrd-table__file-btn {\n display: inline-flex;\n align-items: center;\n gap: var(--mrd-space-1);\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n color: var(--mrd-color-primary);\n font-size: var(--mrd-font-size-sm);\n font-family: inherit;\n max-width: 100%;\n overflow: hidden;\n}\n\n.mrd-table__file-btn:hover {\n text-decoration: underline;\n color: var(--mrd-color-primary-dark);\n}\n\n.mrd-table__file-icon {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n}\n\n/* ── TEXTBLOCK expand button ────────────────────────────────────────────── */\n.mrd-table__textblock-btn {\n display: inline;\n background: none;\n border: none;\n padding: 0 0 0 var(--mrd-space-1);\n cursor: pointer;\n color: var(--mrd-color-primary);\n font-size: var(--mrd-font-size-sm);\n font-family: inherit;\n line-height: inherit;\n vertical-align: middle;\n}\n\n.mrd-table__textblock-btn:hover {\n color: var(--mrd-color-primary-dark);\n}\n\n/* ── TEXTBLOCK modal ────────────────────────────────────────────────────── */\n.mrd-table__modal-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: var(--mrd-z-modal, 300);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mrd-table__modal {\n background: #fff;\n border-radius: var(--mrd-radius-md, 0.5rem);\n padding: var(--mrd-space-6);\n max-width: min(600px, 90vw);\n max-height: 70vh;\n overflow-y: auto;\n position: relative;\n box-shadow: var(--mrd-shadow-lg);\n}\n\n.mrd-table__modal-close {\n position: absolute;\n top: var(--mrd-space-3);\n right: var(--mrd-space-3);\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1.25rem;\n line-height: 1;\n color: var(--mrd-color-text-muted, #6b7280);\n padding: 0;\n}\n\n.mrd-table__modal-close:hover {\n color: var(--mrd-color-text, #111827);\n}\n\n.mrd-table__modal-text {\n margin: 0;\n padding-right: var(--mrd-space-6);\n white-space: pre-wrap;\n word-break: break-word;\n font-size: var(--mrd-font-size-sm);\n line-height: 1.6;\n}\n\n.mrd-table__json-preview {\n font-family: var(--mrd-font-family-mono);\n font-size: var(--mrd-font-size-xs);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: inline-block;\n max-width: calc(100% - 1.5rem);\n vertical-align: middle;\n}\n\n.mrd-table__modal-json {\n margin: 0;\n padding-right: var(--mrd-space-6);\n font-family: var(--mrd-font-family-mono);\n font-size: var(--mrd-font-size-xs);\n white-space: pre-wrap;\n word-break: break-word;\n line-height: 1.6;\n background: none;\n border: none;\n}\n\n","import { Component, Element, Event, EventEmitter, Method, Prop, State, Watch, h, Host } from '@stencil/core';\nimport { CellRenderer, ColumnFilter, TableAction, TableColumn } from '../../utils/cell-renderer';\nimport { t } from '../../utils/i18n';\nimport { formatNumber, formatPercentage, formatCurrency } from '../../utils/format';\nimport { AggregationResult, ClientLayoutItem, ClientViewMetadata } from '../../types/client-layout';\n\nconst BUFFER = 10;\n\n/** Wacht deze tijd (ms) na het laatste scroll-event voordat pagina's worden\n * aangevraagd. Pagina's die de gebruiker snel voorbij scrollt worden zo geskipt. */\nconst REQUEST_DEBOUNCE_MS = 150;\n\n/** Breedte van de filterpopup in px — voor overflow-correctie. */\nconst POPUP_WIDTH = 280;\n\nconst TEXT_TYPES = new Set(['TEXT', 'TEXTBLOCK', 'EMAIL', 'HYPERLINK']);\nconst NUMERIC_TYPES = new Set(['INTEGER', 'DECIMAL', 'PERCENTAGE', 'CURRENCY']);\nconst DATE_TYPES = new Set(['DATE', 'DATETIME', 'TIME']);\nconst NO_FILTER_TYPES = new Set(['FILE', 'IMAGE']);\n\n/** Column types that cannot be sorted or filtered (not stored in PostgreSQL). */\nconst NON_INTERACTIVE_TYPES = new Set(['LONGTEXT', 'JSON', 'FILE', 'IMAGE']);\n\n@Component({\n tag: 'mrd-table',\n styleUrl: 'mrd-table.scss',\n scoped: true,\n})\nexport class MrdTable {\n\n // ── Element ref ────────────────────────────────────────────────────────────\n\n @Element() el!: HTMLElement;\n\n // ── Non-state internals ────────────────────────────────────────────────────\n\n private pendingPages: Set<number> = new Set();\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n private keydownHandler: ((e: KeyboardEvent) => void) | null = null;\n private createPickerClickHandler: ((e: MouseEvent) => void) | null = null;\n private viewPopoverClickHandler: ((e: MouseEvent) => void) | null = null;\n\n // ── Props ──────────────────────────────────────────────────────────────────\n\n /** The VIEW or RELATED_VIEW layout item. Contains view config, dataClass, fromClass, actions etc. */\n @Prop() item: ClientLayoutItem | null = null;\n\n /** Parent record id — required for RELATED_VIEW to build /{fromClass}/{parentId}/{dataClass}. */\n @Prop() parentId: string = '';\n\n /** Direct rows (non-paginated mode, used when totalElements === 0). */\n @Prop() rows: Record<string, any>[] = [];\n\n @Prop() locale: string = navigator.language;\n\n /** Total number of records across all pages. 0 = non-paginated mode. */\n @Prop() totalElements: number = 0;\n\n /** Records per page (must match the API page size). */\n @Prop() pageSize: number = 20;\n\n /** Row height in px — used for spacer and scroll-position maths. */\n @Prop() rowHeight: number = 36;\n\n /** Height of the scroll container in px. */\n @Prop() tableHeight: number = 500;\n\n // ── Prop watchers ─────────────────────────────────────────────────────────\n\n /** Clamp renderEnd when totalElements shrinks (e.g. after a filter is applied). */\n @Watch('totalElements')\n totalElementsChanged(newVal: number) {\n this.renderEnd = Math.min(this.renderEnd, Math.max(0, newVal - 1));\n }\n\n /** Reset to primary view when the item prop is replaced from outside. */\n @Watch('item')\n itemChanged(newVal: ClientLayoutItem | null) {\n this.activeViewIdx = 0;\n this.applyDefaultSort(newVal?.view?.defaultSort ?? '');\n }\n\n // ── Internal state ─────────────────────────────────────────────────────────\n\n /** Index into allViews[] for the currently displayed view. 0 = primary, 1+ = alternatives. */\n @State() private activeViewIdx: number = 0;\n\n @State() loadedPages: Map<number, Record<string, any>[]> = new Map();\n @State() requestedPages: Set<number> = new Set();\n @State() renderStart: number = 0;\n @State() renderEnd: number = 0;\n @State() colWidths: number[] = [];\n @State() sortField: string = '';\n @State() sortDir: 'asc' | 'desc' = 'asc';\n\n /** Whether the filter UI is visible on column headers. */\n @State() filterMode: boolean = false;\n\n /** Active filters keyed by field name. */\n @State() activeFilters: Map<string, ColumnFilter> = new Map();\n\n /** Field name of the currently open filter popup (null = closed). */\n @State() openFilterCol: string | null = null;\n\n /** Filter state being edited in the open popup. */\n @State() pendingFilter: Partial<ColumnFilter> | null = null;\n\n /** Viewport-relative position for the filter popup. */\n @State() popupPos: { top: number; left: number } = { top: 0, left: 0 };\n\n /** Whether the create-type picker dropdown is open. */\n @State() createPickerOpen: boolean = false;\n\n /** Whether the view-switcher popover (full list) is open. */\n @State() private viewPopoverOpen: boolean = false;\n\n /** Current scroll offset of the scroll container — drives pagination footer. */\n @State() scrollTop: number = 0;\n\n /** Full text shown in the TEXTBLOCK expand modal (null = closed). */\n @State() textblockModal: string | null = null;\n\n /** Syntax-highlighted JSON HTML shown in the JSON expand modal (null = closed). */\n @State() jsonModal: string | null = null;\n\n /** Aggregation totals received from the host via setAggregations(). Null = not yet loaded. */\n @State() aggregations: AggregationResult | null = null;\n\n /** Record count received via setAggregations().total; overrides totalElements for display. */\n @State() private aggregationsTotal: number | null = null;\n\n /** True when a fresh aggregations request is needed (set on init / filter change). */\n private aggregationsPending: boolean = false;\n\n /** Lower bound on total derived from setPage() hasNext info; grows as pages load. */\n @State() private minKnownTotal: number = 0;\n\n\n // ── Events ─────────────────────────────────────────────────────────────────\n\n /** Fired when a page needs to be fetched. Host fetches and calls setPage().\n * `sort` is the raw query-param value, e.g. \"name\" or \"name,desc\". */\n @Event() mrdLoadPage!: EventEmitter<{ page: number; sort: string; path: string; qs: string }>;\n\n /** Fired when a data row is clicked. Detail is the full row object including _links. */\n @Event() mrdRowClick!: EventEmitter<Record<string, any>>;\n\n /** Fired when a toolbar action button is clicked.\n * For 'export': includes `path` (relative excel path) and `qs` (current sort+filter params).\n * For 'create': includes `dataClass` (target type) and `parentPath` (e.g. /buyers/123 for RELATED_VIEW). */\n @Event() mrdAction!: EventEmitter<{ action: string; path?: string; qs?: string; dataClass?: string; parentPath?: string | null; basicType?: string }>;\n\n /** Fired when a FILE or IMAGE cell is clicked. Host resolves the href to a signed download URL. */\n @Event() mrdDownload!: EventEmitter<{ href: string; fileName: string }>;\n\n /** Fired when aggregation totals need to be (re-)fetched.\n * `aggQs` is a ready-to-use query string: active filters (no page/sort) + sum/avg/count params.\n * Host calls the /aggregations endpoint and passes the result to setAggregations(). */\n @Event() mrdLoadAggregations!: EventEmitter<{ path: string; qs: string; aggQs: string }>;\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n\n componentWillLoad() {\n this.applyDefaultSort(this.item?.view?.defaultSort ?? '');\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n\n private applyDefaultSort(defaultSort: string) {\n if (defaultSort) {\n const parts = defaultSort.split(',');\n this.sortField = parts[0].trim();\n this.sortDir = parts[1]?.trim() === 'desc' ? 'desc' : 'asc';\n } else {\n this.sortField = '';\n this.sortDir = 'asc';\n }\n }\n\n // ── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Initialise (or reset) the virtual scroll.\n * Call after setting all props and registering the mrdLoadPage listener,\n * but before calling setPage(0, rows).\n */\n @Method()\n async init(): Promise<void> {\n if (this.debounceTimer !== null) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.pendingPages.clear();\n this.loadedPages = new Map();\n this.requestedPages = new Set();\n this.colWidths = [];\n\n this.scrollTop = 0;\n this.renderStart = 0;\n // Always fill the visible viewport on init — totalElements may be stale from a\n // previous view. setPage() clamps renderEnd when the page is shorter than pageSize.\n this.renderEnd = this.visibleCount() - 1;\n\n const scroller = this.el.querySelector('.mrd-table__scroll') as HTMLElement | null;\n if (scroller) scroller.scrollTop = 0;\n\n this.aggregations = null;\n this.aggregationsTotal = null;\n this.aggregationsPending = true;\n this.minKnownTotal = 0;\n // Always request page 0 — totalElements may be unknown (0) on first load.\n this.mrdLoadPage.emit({ page: 0, sort: this.sortParam(), path: this.buildDataPath(), qs: this.buildQueryParams(0) });\n this.requestedPages = new Set([0]);\n }\n\n /**\n * Inject the rows for a given page (0-based).\n * Creates a new Map reference so Stencil detects the state change.\n *\n * When the page contains fewer rows than pageSize it is the last page.\n * renderEnd is clamped immediately so no loading-placeholder rows appear\n * beyond the actual data — without requiring the host to update totalElements.\n *\n * Pass hasNext (from _links.next in the API response) for accurate last-page\n * detection even when rows.length === pageSize (exact multiple of page size).\n */\n @Method()\n async setPage(pageNumber: number, rows: Record<string, any>[], hasNext?: boolean): Promise<void> {\n const isLastPage = hasNext !== undefined ? !hasNext : rows.length < this.pageSize;\n if (isLastPage) {\n // lastRowIdx is -1 when the page is empty; clamp renderEnd to -1 so the\n // render loop does not execute and no shimmer rows appear.\n const lastRowIdx = pageNumber * this.pageSize + rows.length - 1;\n this.renderEnd = Math.min(this.renderEnd, lastRowIdx);\n // Exact total is known: update minKnownTotal so the scroll container has the right height.\n this.minKnownTotal = pageNumber * this.pageSize + rows.length;\n } else {\n // There is at least one more page — ensure the scrollbar covers at least that next page.\n this.minKnownTotal = Math.max(this.minKnownTotal, (pageNumber + 1) * this.pageSize + 1);\n }\n const next = new Map(this.loadedPages);\n next.set(pageNumber, rows);\n this.loadedPages = next;\n\n if (pageNumber === 0 && this.aggregationsPending) {\n this.aggregationsPending = false;\n const hasAggColumns = this.columns.some(c => c.type === 'FIELD' && c.aggregate);\n if (!isLastPage || hasAggColumns) {\n this.emitLoadAggregations();\n }\n }\n }\n\n /** Inject aggregation totals returned by the /aggregations endpoint. */\n @Method()\n async setAggregations(data: AggregationResult): Promise<void> {\n const total = data.total ?? (typeof data.count === 'number' ? data.count : undefined);\n if (total != null) this.aggregationsTotal = total;\n this.aggregations = data;\n }\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n\n disconnectedCallback() {\n if (this.outsideClickHandler) {\n document.removeEventListener('click', this.outsideClickHandler);\n this.outsideClickHandler = null;\n }\n if (this.createPickerClickHandler) {\n document.removeEventListener('click', this.createPickerClickHandler);\n this.createPickerClickHandler = null;\n }\n if (this.keydownHandler) {\n document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n if (this.viewPopoverClickHandler) {\n document.removeEventListener('click', this.viewPopoverClickHandler);\n this.viewPopoverClickHandler = null;\n }\n }\n\n componentDidRender() {\n if (this.colWidths.length === 0 && this.loadedPages.size > 0 && this.totalElements > 0) {\n const ths = this.el.querySelectorAll<HTMLElement>('.mrd-table__header');\n if (ths.length > 0) {\n this.colWidths = Array.from(ths).map(th => th.offsetWidth);\n }\n }\n }\n\n // ── Paging / scroll helpers ────────────────────────────────────────────────\n\n private visibleCount(): number {\n return Math.ceil(this.tableHeight / this.rowHeight);\n }\n\n private sortParam(): string {\n if (!this.sortField) return '';\n return this.sortDir === 'desc' ? `${this.sortField},desc` : this.sortField;\n }\n\n /** Stable ordered list: primary view first, then alternatives (from the item prop). */\n private get allViews(): Array<{ label: string; dataClass?: string; fromClass?: string | null; filterClass?: string | null; view?: ClientViewMetadata }> {\n if (!this.item) return [];\n const it = this.item;\n return [\n { label: it.label ?? it.view?.pluralLabel ?? it.dataClass ?? it.relatedClass ?? '', dataClass: it.dataClass ?? it.relatedClass, fromClass: it.fromClass, filterClass: it.filterClass, view: it.view },\n ...(it.alternativeViews ?? []).map(av => ({\n label: av.label ?? av.view?.pluralLabel ?? av.dataClass ?? '',\n dataClass: av.dataClass,\n fromClass: av.fromClass,\n filterClass: av.filterClass,\n view: av.view,\n })),\n ];\n }\n\n /** Relative excel export path for the current view.\n * VIEW: /excel/{dataClass}\n * RELATED_VIEW: /excel/{fromClass}/{parentId}/{dataClass} */\n private buildExcelPath(): string {\n const v = this.allViews[this.activeViewIdx];\n if (!v) return '';\n if (this.item?.type === 'RELATED_VIEW') {\n return `/excel/${v.fromClass ?? ''}/${this.parentId}/${v.dataClass ?? ''}`;\n }\n return `/excel/${v.dataClass ?? ''}`;\n }\n\n private buildActionDetail(action: string, basicType?: string): { action: string; path?: string; qs?: string; dataClass?: string; parentPath?: string | null; basicType?: string } {\n if (action === 'export') {\n return { action, path: this.buildExcelPath(), qs: this.buildQueryParams(0) };\n }\n if (action === 'create') {\n const v = this.allViews[this.activeViewIdx];\n const parentPath = this.item?.type === 'RELATED_VIEW'\n ? `/${v?.fromClass ?? ''}/${this.parentId}`\n : null;\n return { action, dataClass: v?.dataClass ?? '', parentPath, ...(basicType ? { basicType } : {}) };\n }\n return { action };\n }\n\n /** Relative data path for the current view, without query string.\n * VIEW: /{dataClass}\n * RELATED_VIEW: /{fromClass}/{parentId}/{dataClass} */\n private buildDataPath(): string {\n const v = this.allViews[this.activeViewIdx];\n if (!v) return '';\n if (this.item?.type === 'RELATED_VIEW') {\n return `/${v.fromClass ?? ''}/${this.parentId}/${v.dataClass ?? ''}`;\n }\n return `/${v.dataClass ?? ''}`;\n }\n\n /** Build query params for a page request from current sort, view filters, filterClass and active column filters. */\n private buildQueryParams(page: number): string {\n const v = this.allViews[this.activeViewIdx];\n const p = new URLSearchParams();\n if (page > 0) p.set('page', String(page));\n const sort = this.sortParam();\n if (sort) p.set('sort', sort);\n const filterClass = v?.filterClass;\n if (filterClass) p.set('type', filterClass);\n for (const f of (v?.view?.filter ?? [])) {\n if (!f.name) continue;\n if (f.operator === 'EMPTY') { p.set(f.name, ''); continue; }\n if (f.operator === 'NOT_EMPTY') { p.set(f.name + '_notempty', 'true'); continue; }\n if (f.operator === 'STARTS_WITH') { p.set(f.name + '_startswith', String(f.value ?? '')); continue; }\n if (f.operator === 'FROM') { p.set(f.name + '_from', String(f.value ?? '')); continue; }\n if (f.operator === 'TO') { p.set(f.name + '_to', String(f.value ?? '')); continue; }\n if (f.value != null) { p.set(f.name, String(f.value)); }\n }\n for (const f of this.activeFilters.values()) {\n if (f.operator === 'isEmpty') { p.set(f.field, ''); continue; }\n if (f.operator === 'isNotEmpty') { p.set(f.field + '_notempty', 'true'); continue; }\n if (f.operator === 'startsWith') { p.set(f.field + '_startswith', String(f.value ?? '')); continue; }\n if (f.values?.length) { p.set(f.field, f.values.join(',')); continue; }\n if (f.value != null) p.set(f.field, String(f.value));\n if (f.from != null) p.set(f.field + '_from', String(f.from));\n if (f.to != null) p.set(f.field + '_to', String(f.to));\n }\n return p.toString();\n }\n\n private get columns(): TableColumn[] {\n return (this.allViews[this.activeViewIdx]?.view?.values ?? []) as TableColumn[];\n }\n\n private get tableActions(): TableAction[] {\n const raw = this.item?.actions ?? [];\n return (raw ?? []).reduce<TableAction[]>((acc: TableAction[], a: string) => {\n if (a === 'NEW') acc.push({ action: 'create', label: t('table_new_record', this.locale), icon: 'assets/sprites.svg#icon-plus', variant: 'primary' });\n if (a === 'EXPORT') acc.push({ action: 'export', label: t('table_export_excel', this.locale), icon: 'assets/sprites.svg#icon-file-excel' });\n return acc;\n }, []);\n }\n\n private toggleCreatePicker() {\n if (this.createPickerOpen) {\n this.closeCreatePicker();\n } else {\n this.createPickerOpen = true;\n if (this.createPickerClickHandler) document.removeEventListener('click', this.createPickerClickHandler);\n this.createPickerClickHandler = (ev: MouseEvent) => {\n const wrap = this.el.querySelector('.mrd-table__create-picker-wrap');\n if (wrap && !wrap.contains(ev.target as Node)) this.closeCreatePicker();\n };\n document.addEventListener('click', this.createPickerClickHandler);\n }\n }\n\n private closeCreatePicker() {\n this.createPickerOpen = false;\n if (this.createPickerClickHandler) {\n document.removeEventListener('click', this.createPickerClickHandler);\n this.createPickerClickHandler = null;\n }\n }\n\n private colName(col: TableColumn): string {\n return col.name ?? '';\n }\n\n private colDataType(col: TableColumn): string {\n if (col.type === 'RELATION') return 'RELATION';\n return col.dataType ?? 'TEXT';\n }\n\n /** True when we have a reliable total: either from the aggregations response or because\n * a short page told us it was the last page (exact count from row length). */\n private isTotalKnown(): boolean {\n if (this.aggregationsTotal != null) return true;\n for (const rows of this.loadedPages.values()) {\n if (rows.length < this.pageSize) return true;\n }\n return false;\n }\n\n /** Effective total: aggregations-response > totalElements prop > minKnownTotal from setPage(). */\n private get baseTotal(): number {\n if (this.aggregationsTotal != null) return this.aggregationsTotal;\n if (this.totalElements > 0) return this.totalElements;\n return this.minKnownTotal;\n }\n\n // ── Aggregation helpers ────────────────────────────────────────────────────\n\n private buildAggregationParams(): { sum?: string[]; avg?: string[]; count?: string[] } | null {\n const groups: { sum: string[]; avg: string[]; count: string[] } = { sum: [], avg: [], count: [] };\n for (const col of this.columns) {\n if (col.type !== 'FIELD' || !col.aggregate) continue;\n const fn = col.aggregate.toLowerCase() as 'sum' | 'avg' | 'count';\n if (fn in groups) groups[fn].push(col.name ?? '');\n }\n const params: { sum?: string[]; avg?: string[]; count?: string[] } = {};\n if (groups.sum.length) params.sum = groups.sum;\n if (groups.avg.length) params.avg = groups.avg;\n if (groups.count.length) params.count = groups.count;\n return Object.keys(params).length > 0 ? params : null;\n }\n\n private buildAggregationQs(): string {\n const p = new URLSearchParams(this.buildQueryParams(0));\n p.delete('page');\n p.delete('sort');\n const groups = this.buildAggregationParams();\n if (groups?.sum?.length) p.set('sum', groups.sum.join(','));\n if (groups?.avg?.length) p.set('avg', groups.avg.join(','));\n if (groups?.count?.length) p.set('count', groups.count.join(','));\n return p.toString();\n }\n\n private emitLoadAggregations() {\n this.mrdLoadAggregations.emit({ path: this.buildDataPath(), qs: this.buildQueryParams(0), aggQs: this.buildAggregationQs() });\n }\n\n private renderAggregationValue(col: TableColumn): string {\n if (col.type !== 'FIELD' || !col.aggregate || !this.aggregations) return '';\n const fn = col.aggregate.toLowerCase() as 'sum' | 'avg' | 'count';\n const aggData = this.aggregations[fn];\n const val = typeof aggData === 'object' && aggData !== null\n ? (aggData as Record<string, number>)[col.name ?? '']\n : undefined;\n if (val == null) return '';\n const dt = col.dataType as string;\n if (dt === 'INTEGER') return formatNumber(val, this.locale, { maximumFractionDigits: 0 });\n if (dt === 'PERCENTAGE') return formatPercentage(val, this.locale);\n if (dt === 'CURRENCY' && col.currencyCode)\n return formatCurrency(val, col.currencyCode, this.locale);\n return formatNumber(val, this.locale);\n }\n\n // ── Reset pagination ───────────────────────────────────────────────────────\n\n /** Reset pagination state and scroll to top (used after sort or filter change). */\n private resetPages() {\n if (this.debounceTimer !== null) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.pendingPages.clear();\n this.loadedPages = new Map();\n this.requestedPages = new Set();\n this.colWidths = [];\n this.scrollTop = 0;\n this.renderStart = 0;\n this.minKnownTotal = 0;\n // Mirror init(): use visibleCount so the first page is always requested.\n // setPage() will clamp renderEnd down when the last page is shorter.\n this.renderEnd = this.visibleCount() - 1;\n const scroller = this.el.querySelector('.mrd-table__scroll') as HTMLElement | null;\n if (scroller) scroller.scrollTop = 0;\n }\n\n private handleSortClick(col: TableColumn) {\n const name = this.colName(col);\n if (this.sortField === name) {\n this.sortDir = this.sortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortField = name;\n this.sortDir = 'asc';\n }\n this.resetPages();\n this.emitPagesForWindow(this.renderStart, this.renderEnd);\n }\n\n private applySort(col: TableColumn, dir: 'asc' | 'desc') {\n this.sortField = this.colName(col);\n this.sortDir = dir;\n this.resetPages();\n this.emitPagesForWindow(this.renderStart, this.renderEnd);\n }\n\n private emitPagesForWindow(start: number, end: number) {\n const firstPage = Math.floor(start / this.pageSize);\n const lastPage = Math.floor(end / this.pageSize);\n const next = new Set(this.requestedPages);\n let changed = false;\n\n for (let p = firstPage; p <= lastPage; p++) {\n if (!this.loadedPages.has(p) && !next.has(p)) {\n next.add(p);\n this.mrdLoadPage.emit({ page: p, sort: this.sortParam(), path: this.buildDataPath(), qs: this.buildQueryParams(p) });\n changed = true;\n }\n }\n\n if (changed) this.requestedPages = next;\n }\n\n private getRow(i: number): Record<string, any> | null {\n const page = this.loadedPages.get(Math.floor(i / this.pageSize));\n return page?.[i % this.pageSize] ?? null;\n }\n\n private requestPagesForWindow(start: number, end: number) {\n const firstPage = Math.floor(start / this.pageSize);\n const lastPage = Math.floor(end / this.pageSize);\n let anyNew = false;\n\n for (let p = firstPage; p <= lastPage; p++) {\n if (!this.loadedPages.has(p) && !this.requestedPages.has(p) && !this.pendingPages.has(p)) {\n this.pendingPages.add(p);\n anyNew = true;\n }\n }\n\n if (!anyNew) return;\n if (this.debounceTimer !== null) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => this.flushPendingPages(), REQUEST_DEBOUNCE_MS);\n }\n\n private flushPendingPages() {\n this.debounceTimer = null;\n if (this.pendingPages.size === 0) return;\n\n const next = new Set(this.requestedPages);\n let changed = false;\n\n for (const page of this.pendingPages) {\n if (this.loadedPages.has(page) || next.has(page)) continue;\n const pageStart = page * this.pageSize;\n const pageEnd = pageStart + this.pageSize - 1;\n if (pageEnd < this.renderStart || pageStart > this.renderEnd) continue;\n\n next.add(page);\n this.mrdLoadPage.emit({ page, sort: this.sortParam(), path: this.buildDataPath(), qs: this.buildQueryParams(page) });\n changed = true;\n }\n\n this.pendingPages.clear();\n if (changed) this.requestedPages = next;\n }\n\n private handleScroll = (e: Event) => {\n const scroller = e.currentTarget as HTMLElement;\n const scrollTop = scroller.scrollTop;\n const total = this.baseTotal;\n const visStart = Math.floor(scrollTop / this.rowHeight);\n const visEnd = Math.min(visStart + this.visibleCount(), total - 1);\n\n this.scrollTop = scrollTop;\n this.renderStart = Math.max(0, visStart - BUFFER);\n this.renderEnd = Math.min(total - 1, visEnd + BUFFER);\n this.requestPagesForWindow(this.renderStart, this.renderEnd);\n };\n\n // ── Filter helpers ─────────────────────────────────────────────────────────\n\n private handleFilterToggle() {\n this.filterMode = !this.filterMode;\n if (!this.filterMode) this.closeFilterPopup();\n }\n\n private handleFilterOpen(col: TableColumn, e: MouseEvent) {\n e.stopPropagation();\n const btn = e.currentTarget as HTMLElement;\n const rect = btn.getBoundingClientRect();\n let left = rect.left;\n if (left + POPUP_WIDTH > window.innerWidth - 8) left = rect.right - POPUP_WIDTH;\n this.popupPos = { top: rect.bottom + 4, left: Math.max(8, left) };\n\n const name = this.colName(col);\n const dataType = this.colDataType(col);\n const existing = this.activeFilters.get(name);\n // Set the default operator explicitly so it is present in the ColumnFilter\n // even when the user never touches the operator dropdown.\n const defaultOperator = (TEXT_TYPES.has(dataType) || dataType === 'RELATION')\n ? 'startsWith' as const\n : undefined;\n // For DATETIME, stored values are UTC ISO strings; convert back to local\n // \"YYYY-MM-DD\" dates so the date inputs show what the user originally entered.\n // If from and to cover the same local day it was an exact-date filter — restore\n // to exact mode so the user sees the single-date input again.\n if (dataType === 'DATETIME' && existing && existing.operator !== 'isEmpty' && existing.operator !== 'isNotEmpty') {\n const display = { ...existing };\n if (typeof display.from === 'string' && display.from)\n display.from = this.utcISOToLocalDate(display.from);\n if (typeof display.to === 'string' && display.to)\n display.to = this.utcISOToLocalDateExclusiveEnd(display.to);\n if (display.from && display.to && display.from === display.to) {\n this.pendingFilter = { ...display, value: display.from, from: undefined, to: undefined };\n } else {\n this.pendingFilter = display;\n }\n } else {\n this.pendingFilter = existing ? { ...existing } : { field: name, dataType, operator: defaultOperator };\n }\n this.openFilterCol = name;\n\n // Close on outside click — re-register to replace any stale handler\n if (this.outsideClickHandler) document.removeEventListener('click', this.outsideClickHandler);\n this.outsideClickHandler = (ev: MouseEvent) => {\n const popup = this.el.querySelector('.mrd-table__filter-popup');\n if (popup && !popup.contains(ev.target as Node)) this.closeFilterPopup();\n };\n document.addEventListener('click', this.outsideClickHandler);\n }\n\n private closeFilterPopup() {\n this.openFilterCol = null;\n this.pendingFilter = null;\n if (this.outsideClickHandler) {\n document.removeEventListener('click', this.outsideClickHandler);\n this.outsideClickHandler = null;\n }\n }\n\n private openTextblockModal(text: string) {\n this.textblockModal = text;\n if (this.keydownHandler) document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape') this.closeTextblockModal();\n };\n document.addEventListener('keydown', this.keydownHandler);\n }\n\n private closeTextblockModal() {\n this.textblockModal = null;\n if (this.keydownHandler) {\n document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n }\n\n private openJsonModal(html: string) {\n this.jsonModal = html;\n if (this.keydownHandler) document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = (ev: KeyboardEvent) => {\n if (ev.key === 'Escape') this.closeJsonModal();\n };\n document.addEventListener('keydown', this.keydownHandler);\n }\n\n private closeJsonModal() {\n this.jsonModal = null;\n if (this.keydownHandler) {\n document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n }\n\n private setPending(key: keyof ColumnFilter, val: any) {\n this.pendingFilter = { ...this.pendingFilter, [key]: val };\n }\n\n private togglePendingValue(key: string, checked: boolean) {\n const current = this.pendingFilter?.values ?? [];\n this.pendingFilter = {\n ...this.pendingFilter,\n values: checked ? [...current, key] : current.filter(k => k !== key),\n };\n }\n\n private filterHasValue(f: Partial<ColumnFilter>): boolean {\n if (f.operator === 'isEmpty' || f.operator === 'isNotEmpty') return true;\n if (f.values !== undefined && f.values.length > 0) return true;\n if (f.value != null && f.value !== '') return true;\n if (typeof f.value === 'boolean') return true;\n if (f.from != null && f.from !== '') return true;\n if (f.to != null && f.to !== '') return true;\n return false;\n }\n\n // Convert a local \"YYYY-MM-DD\" date string to the UTC ISO string at the\n // start of that local day (midnight). new Date(y, m, d) uses local time.\n private dateLocalToUTCStart(dateStr: string): string {\n if (!dateStr) return dateStr;\n const [year, month, day] = dateStr.split('-').map(Number);\n return new Date(year, month - 1, day).toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n }\n\n // Start of the day AFTER the given local date (exclusive range end).\n private dateLocalToUTCEndExclusive(dateStr: string): string {\n if (!dateStr) return dateStr;\n const [year, month, day] = dateStr.split('-').map(Number);\n return new Date(year, month - 1, day + 1).toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n }\n\n // Convert a stored UTC ISO string back to the local \"YYYY-MM-DD\" date.\n private utcISOToLocalDate(utcStr: string): string {\n if (!utcStr) return utcStr;\n const d = new Date(utcStr);\n if (isNaN(d.getTime())) return utcStr;\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n }\n\n // The stored \"to\" value is the exclusive end (midnight of the next day).\n // Subtract one day to recover the local date the user entered.\n private utcISOToLocalDateExclusiveEnd(utcStr: string): string {\n if (!utcStr) return utcStr;\n const d = new Date(utcStr);\n if (isNaN(d.getTime())) return utcStr;\n d.setDate(d.getDate() - 1);\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n }\n\n private applyFilter() {\n const f = this.pendingFilter;\n if (!f?.field) { this.closeFilterPopup(); return; }\n\n // For DATETIME fields the user enters local dates; convert to UTC ISO strings.\n // Exact date → range covering the full local day (from = midnight, to = next midnight).\n // \"to\" is always the exclusive end (midnight of the next local day).\n let normalized = { ...f };\n if (f.dataType === 'DATETIME' && f.operator !== 'isEmpty' && f.operator !== 'isNotEmpty') {\n if (typeof normalized.value === 'string' && normalized.value) {\n normalized.from = this.dateLocalToUTCStart(normalized.value as string);\n normalized.to = this.dateLocalToUTCEndExclusive(normalized.value as string);\n normalized.value = undefined;\n } else {\n if (typeof normalized.from === 'string' && normalized.from)\n normalized.from = this.dateLocalToUTCStart(normalized.from);\n if (typeof normalized.to === 'string' && normalized.to)\n normalized.to = this.dateLocalToUTCEndExclusive(normalized.to);\n }\n }\n\n const next = new Map(this.activeFilters);\n if (this.filterHasValue(normalized)) {\n next.set(normalized.field!, normalized as ColumnFilter);\n } else {\n next.delete(normalized.field!);\n }\n this.activeFilters = next;\n this.closeFilterPopup();\n this.aggregations = null;\n this.aggregationsTotal = null;\n this.aggregationsPending = true;\n if (this.totalElements > 0 || this.minKnownTotal > 0) {\n this.resetPages();\n this.emitPagesForWindow(this.renderStart, this.renderEnd);\n }\n }\n\n private clearFilter() {\n const name = this.openFilterCol;\n const next = new Map(this.activeFilters);\n if (name) next.delete(name);\n this.activeFilters = next;\n this.closeFilterPopup();\n this.aggregations = null;\n this.aggregationsTotal = null;\n this.aggregationsPending = true;\n if (this.totalElements > 0 || this.minKnownTotal > 0) {\n this.resetPages();\n this.emitPagesForWindow(this.renderStart, this.renderEnd);\n }\n }\n\n private clearAllFilters() {\n this.activeFilters = new Map();\n this.aggregations = null;\n this.aggregationsTotal = null;\n this.aggregationsPending = true;\n if (this.totalElements > 0 || this.minKnownTotal > 0) {\n this.resetPages();\n this.emitPagesForWindow(this.renderStart, this.renderEnd);\n }\n }\n\n // ── View switcher ──────────────────────────────────────────────────────────\n\n private handleViewSwitch(targetIdx: number) {\n const target = this.allViews[targetIdx];\n if (!target?.view) return;\n this.activeViewIdx = targetIdx;\n this.applyDefaultSort(target.view?.defaultSort ?? '');\n this.activeFilters = new Map();\n this.init();\n }\n\n private toggleViewPopover(e: MouseEvent) {\n e.stopPropagation();\n if (this.viewPopoverOpen) {\n this.viewPopoverOpen = false;\n if (this.viewPopoverClickHandler) {\n document.removeEventListener('click', this.viewPopoverClickHandler);\n this.viewPopoverClickHandler = null;\n }\n return;\n }\n this.viewPopoverOpen = true;\n this.viewPopoverClickHandler = () => {\n this.viewPopoverOpen = false;\n document.removeEventListener('click', this.viewPopoverClickHandler!);\n this.viewPopoverClickHandler = null;\n };\n document.addEventListener('click', this.viewPopoverClickHandler);\n }\n\n // ── Render: toolbar ────────────────────────────────────────────────────────\n\n private renderToolbar() {\n const filterCount = this.activeFilters.size;\n const actions = this.tableActions;\n const allViews = this.allViews;\n const hasActions = actions.length > 0;\n const hasViewSwitcher = allViews.length > 1;\n\n return (\n <div class=\"mrd-table__toolbar\">\n <div class=\"mrd-table__toolbar-left\">\n <button\n class={`mrd-table__action mrd-table__action--secondary mrd-table__filter-toggle${this.filterMode ? ' mrd-table__filter-toggle--active' : ''}`}\n onClick={() => this.handleFilterToggle()}\n >\n {/* Material \"filter list\" icon */}\n <svg class=\"mrd-table__action-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"currentColor\" d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\" />\n </svg>\n {filterCount > 0 && <span class=\"mrd-table__filter-badge\">{filterCount}</span>}\n <span class=\"mrd-table__action-tooltip\">\n {this.filterMode ? t('table_filter_hide', this.locale) : t('table_filter', this.locale)}\n {filterCount > 0 ? ` (${filterCount} ${t('table_filter_active', this.locale)})` : ''}\n </span>\n </button>\n\n {filterCount > 0 && (\n <button\n class=\"mrd-table__action mrd-table__action--secondary\"\n onClick={() => this.clearAllFilters()}\n >\n {/* Close / clear icon */}\n <svg class=\"mrd-table__action-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"currentColor\" d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n <span class=\"mrd-table__action-tooltip\">{t('table_filter_clear_all', this.locale)}</span>\n </button>\n )}\n </div>\n\n {hasViewSwitcher && (\n <div class=\"mrd-table__toolbar-center\">\n <div class=\"mrd-table__view-switcher\">\n <button\n class=\"mrd-table__view-arrow\"\n aria-label=\"Previous view\"\n onClick={() => this.handleViewSwitch((this.activeViewIdx - 1 + allViews.length) % allViews.length)}\n >\n ◀\n </button>\n <div class=\"mrd-table__view-title-wrap\">\n <button\n class=\"mrd-table__view-title\"\n onClick={(e) => this.toggleViewPopover(e)}\n >\n {allViews[this.activeViewIdx]?.label}\n </button>\n {this.viewPopoverOpen && (\n <div class=\"mrd-table__view-popover\" onClick={(e) => e.stopPropagation()}>\n {allViews.map((v, i) => (\n <button\n key={String(i)}\n class={`mrd-table__view-popover-item${i === this.activeViewIdx ? ' mrd-table__view-popover-item--active' : ''}`}\n onClick={() => {\n if (i !== this.activeViewIdx) this.handleViewSwitch(i);\n this.viewPopoverOpen = false;\n if (this.viewPopoverClickHandler) {\n document.removeEventListener('click', this.viewPopoverClickHandler);\n this.viewPopoverClickHandler = null;\n }\n }}\n >\n {v.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <button\n class=\"mrd-table__view-arrow\"\n aria-label=\"Next view\"\n onClick={() => this.handleViewSwitch((this.activeViewIdx + 1) % allViews.length)}\n >\n ▶\n </button>\n </div>\n </div>\n )}\n\n {hasActions && (\n <div class=\"mrd-table__toolbar-right\">\n {actions.map(a => {\n const createTypes = a.action === 'create' ? this.item?.createTypes : null;\n if (createTypes?.length) {\n return (\n <div class=\"mrd-table__create-picker-wrap\" key={`action-${a.action}`}>\n <button\n class={`mrd-table__action mrd-table__action--${a.variant ?? 'secondary'}`}\n onClick={() => this.toggleCreatePicker()}\n >\n {a.icon\n ? <svg class=\"mrd-table__action-icon\" aria-hidden=\"true\"><use href={a.icon} /></svg>\n : a.label\n }\n <span class=\"mrd-table__action-tooltip\">{a.label}</span>\n </button>\n {this.createPickerOpen && (\n <div class=\"mrd-table__create-picker\">\n {createTypes.map(ct => (\n <button\n key={ct.type}\n class=\"mrd-table__create-picker-item\"\n onClick={() => {\n this.mrdAction.emit(this.buildActionDetail('create', ct.type));\n this.closeCreatePicker();\n }}\n >\n {ct.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n }\n return (\n <button\n key={`action-${a.action}`}\n class={`mrd-table__action mrd-table__action--${a.variant ?? 'secondary'}`}\n disabled={a.disabled}\n onClick={() => this.mrdAction.emit(this.buildActionDetail(a.action))}\n >\n {a.icon\n ? <svg class=\"mrd-table__action-icon\" aria-hidden=\"true\"><use href={a.icon} /></svg>\n : a.label\n }\n <span class=\"mrd-table__action-tooltip\">{a.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n }\n\n // ── Render: filter popup ───────────────────────────────────────────────────\n\n private renderFilterEditor(col: TableColumn): any {\n const pf = this.pendingFilter ?? {};\n const dataType = this.colDataType(col);\n\n if (NO_FILTER_TYPES.has(dataType)) {\n return <p class=\"mrd-table__filter-no-support\">{t('filter_no_support', this.locale)}</p>;\n }\n\n if (dataType === 'BOOLEAN') {\n const boolOp = pf.operator;\n const noValueOp = boolOp === 'isEmpty' || boolOp === 'isNotEmpty';\n return (\n <div class=\"mrd-table__filter-radio-group\">\n {([\n { labelKey: 'filter_all', value: null },\n { labelKey: 'yes', value: true },\n { labelKey: 'no', value: false },\n ] as { labelKey: string; value: boolean | null }[]).map(opt => (\n <label class=\"mrd-table__filter-radio-label\">\n <input\n type=\"radio\"\n name={`bf-${this.openFilterCol}`}\n checked={!noValueOp && pf.value === opt.value}\n onChange={() => { this.pendingFilter = { ...pf, operator: undefined, value: opt.value }; }}\n />\n {t(opt.labelKey, this.locale)}\n </label>\n ))}\n <label class=\"mrd-table__filter-radio-label\">\n <input\n type=\"radio\"\n name={`bf-${this.openFilterCol}`}\n checked={boolOp === 'isEmpty'}\n onChange={() => { this.pendingFilter = { ...pf, operator: 'isEmpty', value: undefined }; }}\n />\n {t('filter_is_empty', this.locale)}\n </label>\n <label class=\"mrd-table__filter-radio-label\">\n <input\n type=\"radio\"\n name={`bf-${this.openFilterCol}`}\n checked={boolOp === 'isNotEmpty'}\n onChange={() => { this.pendingFilter = { ...pf, operator: 'isNotEmpty', value: undefined }; }}\n />\n {t('filter_is_not_empty', this.locale)}\n </label>\n </div>\n );\n }\n\n if (dataType === 'LIST') {\n const items = col.listItems ?? [];\n const selected = pf.values ?? [];\n return (\n <div class=\"mrd-table__filter-list\">\n <div class=\"mrd-table__filter-list-controls\">\n <button class=\"mrd-table__filter-list-btn\"\n onClick={() => { this.pendingFilter = { ...pf, values: items.map(i => i.key) }; }}>\n {t('filter_select_all', this.locale)}\n </button>\n <button class=\"mrd-table__filter-list-btn\"\n onClick={() => { this.pendingFilter = { ...pf, values: [] }; }}>\n {t('filter_select_none', this.locale)}\n </button>\n </div>\n {items.map(item => (\n <label class=\"mrd-table__filter-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={selected.includes(item.key)}\n onChange={(e) => this.togglePendingValue(item.key, (e.target as HTMLInputElement).checked)}\n />\n {item.label}\n </label>\n ))}\n </div>\n );\n }\n\n if (TEXT_TYPES.has(dataType) || dataType === 'RELATION') {\n const op = pf.operator ?? 'startsWith';\n const noInput = op === 'isEmpty' || op === 'isNotEmpty';\n return (\n <div class=\"mrd-table__filter-editor\">\n <select\n class=\"mrd-table__filter-select\"\n onChange={(e) => this.setPending('operator', (e.target as HTMLSelectElement).value)}\n >\n {[\n { val: 'startsWith', labelKey: 'filter_starts_with' },\n { val: 'equals', labelKey: 'filter_equals' },\n { val: 'isEmpty', labelKey: 'filter_is_empty' },\n { val: 'isNotEmpty', labelKey: 'filter_is_not_empty' },\n ].map(o => <option value={o.val} selected={op === o.val}>{t(o.labelKey, this.locale)}</option>)}\n </select>\n {!noInput && (\n <input\n type=\"text\"\n class=\"mrd-table__filter-input\"\n value={String(pf.value ?? '')}\n placeholder={t('filter_search_value', this.locale)}\n onInput={(e) => this.setPending('value', (e.target as HTMLInputElement).value)}\n />\n )}\n </div>\n );\n }\n\n if (NUMERIC_TYPES.has(dataType)) {\n const numOp = pf.operator;\n const noInput = numOp === 'isEmpty' || numOp === 'isNotEmpty';\n const rangeMode = !noInput && (pf.from !== undefined || pf.to !== undefined);\n return (\n <div class=\"mrd-table__filter-editor\">\n <select\n class=\"mrd-table__filter-select\"\n onChange={(e) => {\n const val = (e.target as HTMLSelectElement).value;\n if (val === 'isEmpty' || val === 'isNotEmpty') {\n this.pendingFilter = { ...pf, operator: val as 'isEmpty' | 'isNotEmpty', value: undefined, from: undefined, to: undefined };\n } else {\n this.pendingFilter = { ...pf, operator: undefined };\n }\n }}\n >\n <option value=\"\" selected={!noInput}>{t('filter_has_value', this.locale)}</option>\n <option value=\"isEmpty\" selected={numOp === 'isEmpty'}>{t('filter_is_empty', this.locale)}</option>\n <option value=\"isNotEmpty\" selected={numOp === 'isNotEmpty'}>{t('filter_is_not_empty', this.locale)}</option>\n </select>\n {!noInput && (\n <div class=\"mrd-table__filter-editor\">\n <div class=\"mrd-table__filter-radio-group mrd-table__filter-radio-group--inline\">\n <label class=\"mrd-table__filter-radio-label\">\n <input type=\"radio\" name={`nm-${this.openFilterCol}`} checked={!rangeMode}\n onChange={() => { this.pendingFilter = { ...pf, from: undefined, to: undefined }; }} />\n {t('filter_exact', this.locale)}\n </label>\n <label class=\"mrd-table__filter-radio-label\">\n <input type=\"radio\" name={`nm-${this.openFilterCol}`} checked={rangeMode}\n onChange={() => { this.pendingFilter = { ...pf, value: undefined, from: null, to: null }; }} />\n {t('filter_range', this.locale)}\n </label>\n </div>\n {!rangeMode ? (\n <input type=\"number\" class=\"mrd-table__filter-input\"\n value={pf.value != null ? String(pf.value) : ''}\n onInput={(e) => this.setPending('value', (e.target as HTMLInputElement).value)} />\n ) : (\n <div class=\"mrd-table__filter-range\">\n <input type=\"number\" class=\"mrd-table__filter-input\" placeholder={t('filter_from', this.locale)}\n value={pf.from != null ? String(pf.from) : ''}\n onInput={(e) => this.setPending('from', (e.target as HTMLInputElement).value)} />\n <span class=\"mrd-table__filter-range-sep\">–</span>\n <input type=\"number\" class=\"mrd-table__filter-input\" placeholder={t('filter_to', this.locale)}\n value={pf.to != null ? String(pf.to) : ''}\n onInput={(e) => this.setPending('to', (e.target as HTMLInputElement).value)} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n\n if (dataType === 'DATETIME') {\n const dtOp = pf.operator;\n const noInput = dtOp === 'isEmpty' || dtOp === 'isNotEmpty';\n const rangeMode = !noInput && (pf.from !== undefined || pf.to !== undefined);\n return (\n <div class=\"mrd-table__filter-editor\">\n <select\n class=\"mrd-table__filter-select\"\n onChange={(e) => {\n const val = (e.target as HTMLSelectElement).value;\n if (val === 'isEmpty' || val === 'isNotEmpty') {\n this.pendingFilter = { ...pf, operator: val as 'isEmpty' | 'isNotEmpty', value: undefined, from: undefined, to: undefined };\n } else {\n this.pendingFilter = { ...pf, operator: undefined };\n }\n }}\n >\n <option value=\"\" selected={!noInput}>{t('filter_has_value', this.locale)}</option>\n <option value=\"isEmpty\" selected={dtOp === 'isEmpty'}>{t('filter_is_empty', this.locale)}</option>\n <option value=\"isNotEmpty\" selected={dtOp === 'isNotEmpty'}>{t('filter_is_not_empty', this.locale)}</option>\n </select>\n {!noInput && (\n <div class=\"mrd-table__filter-editor\">\n <div class=\"mrd-table__filter-radio-group mrd-table__filter-radio-group--inline\">\n <label class=\"mrd-table__filter-radio-label\">\n <input type=\"radio\" name={`dt-${this.openFilterCol}`} checked={!rangeMode}\n onChange={() => { this.pendingFilter = { ...pf, from: undefined, to: undefined }; }} />\n {t('filter_exact', this.locale)}\n </label>\n <label class=\"mrd-table__filter-radio-label\">\n <input type=\"radio\" name={`dt-${this.openFilterCol}`} checked={rangeMode}\n onChange={() => { this.pendingFilter = { ...pf, value: undefined, from: null, to: null }; }} />\n {t('filter_range', this.locale)}\n </label>\n </div>\n {!rangeMode ? (\n <input type=\"date\" class=\"mrd-table__filter-input\"\n value={String(pf.value ?? '')}\n onInput={(e) => this.setPending('value', (e.target as HTMLInputElement).value)} />\n ) : (\n <div class=\"mrd-table__filter-range mrd-table__filter-range--stacked\">\n <label class=\"mrd-table__filter-range-label\">{t('filter_from', this.locale)}</label>\n <input type=\"date\" class=\"mrd-table__filter-input\"\n value={pf.from != null ? String(pf.from) : ''}\n onInput={(e) => this.setPending('from', (e.target as HTMLInputElement).value)} />\n <label class=\"mrd-table__filter-range-label\">{t('filter_to', this.locale)}</label>\n <input type=\"date\" class=\"mrd-table__filter-input\"\n value={pf.to != null ? String(pf.to) : ''}\n onInput={(e) => this.setPending('to', (e.target as HTMLInputElement).value)} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n\n if (DATE_TYPES.has(dataType)) {\n const inputType = dataType === 'DATE' ? 'date' : 'time';\n const dtdOp = pf.operator;\n const noInput = dtdOp === 'isEmpty' || dtdOp === 'isNotEmpty';\n const rangeMode = !noInput && (pf.from !== undefined || pf.to !== undefined);\n return (\n <div class=\"mrd-table__filter-editor\">\n <select\n class=\"mrd-table__filter-select\"\n onChange={(e) => {\n const val = (e.target as HTMLSelectElement).value;\n if (val === 'isEmpty' || val === 'isNotEmpty') {\n this.pendingFilter = { ...pf, operator: val as 'isEmpty' | 'isNotEmpty', value: undefined, from: undefined, to: undefined };\n } else {\n this.pendingFilter = { ...pf, operator: undefined };\n }\n }}\n >\n <option value=\"\" selected={!noInput}>{t('filter_has_value', this.locale)}</option>\n <option value=\"isEmpty\" selected={dtdOp === 'isEmpty'}>{t('filter_is_empty', this.locale)}</option>\n <option value=\"isNotEmpty\" selected={dtdOp === 'isNotEmpty'}>{t('filter_is_not_empty', this.locale)}</option>\n </select>\n {!noInput && (\n <div class=\"mrd-table__filter-editor\">\n <div class=\"mrd-table__filter-radio-group mrd-table__filter-radio-group--inline\">\n <label class=\"mrd-table__filter-radio-label\">\n <input type=\"radio\" name={`dt-${this.openFilterCol}`} checked={!rangeMode}\n onChange={() => { this.pendingFilter = { ...pf, from: undefined, to: undefined }; }} />\n {t('filter_exact', this.locale)}\n </label>\n <label class=\"mrd-table__filter-radio-label\">\n <input type=\"radio\" name={`dt-${this.openFilterCol}`} checked={rangeMode}\n onChange={() => { this.pendingFilter = { ...pf, value: undefined, from: null, to: null }; }} />\n {t('filter_range', this.locale)}\n </label>\n </div>\n {!rangeMode ? (\n <input type={inputType} class=\"mrd-table__filter-input\"\n value={String(pf.value ?? '')}\n onInput={(e) => this.setPending('value', (e.target as HTMLInputElement).value)} />\n ) : (\n <div class=\"mrd-table__filter-range\">\n <input type={inputType} class=\"mrd-table__filter-input\" placeholder={t('filter_from', this.locale)}\n value={pf.from != null ? String(pf.from) : ''}\n onInput={(e) => this.setPending('from', (e.target as HTMLInputElement).value)} />\n <input type={inputType} class=\"mrd-table__filter-input\" placeholder={t('filter_to', this.locale)}\n value={pf.to != null ? String(pf.to) : ''}\n onInput={(e) => this.setPending('to', (e.target as HTMLInputElement).value)} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n\n return null;\n }\n\n private renderFilterPopup() {\n if (!this.openFilterCol || !this.pendingFilter) return null;\n const col = this.columns.find(c => this.colName(c) === this.openFilterCol);\n if (!col) return null;\n\n const label = col.label ?? this.openFilterCol;\n const sortActive = this.sortField === this.openFilterCol;\n\n return (\n <div\n class=\"mrd-table__filter-popup\"\n style={{ top: `${this.popupPos.top}px`, left: `${this.popupPos.left}px` }}\n onClick={(e) => e.stopPropagation()}\n >\n <div class=\"mrd-table__filter-popup-header\">\n <span class=\"mrd-table__filter-popup-title\">{label}</span>\n <button class=\"mrd-table__filter-close\" onClick={() => this.closeFilterPopup()}>✕</button>\n </div>\n\n <div class=\"mrd-table__filter-section\">\n <div class=\"mrd-table__filter-section-label\">{t('filter_sorting', this.locale)}</div>\n <div class=\"mrd-table__filter-sort-buttons\">\n <button\n class={`mrd-table__filter-sort-btn${sortActive && this.sortDir === 'asc' ? ' mrd-table__filter-sort-btn--active' : ''}`}\n onClick={() => this.applySort(col, 'asc')}\n >▲ {t('filter_ascending', this.locale)}</button>\n <button\n class={`mrd-table__filter-sort-btn${sortActive && this.sortDir === 'desc' ? ' mrd-table__filter-sort-btn--active' : ''}`}\n onClick={() => this.applySort(col, 'desc')}\n >▼ {t('filter_descending', this.locale)}</button>\n </div>\n </div>\n\n <div class=\"mrd-table__filter-divider\" />\n\n <div class=\"mrd-table__filter-section\">\n <div class=\"mrd-table__filter-section-label\">{t('filter_section', this.locale)}</div>\n {this.renderFilterEditor(col)}\n </div>\n\n <div class=\"mrd-table__filter-popup-footer\">\n <button class=\"mrd-table__filter-btn mrd-table__filter-btn--clear\"\n onClick={() => this.clearFilter()}>{t('filter_clear', this.locale)}</button>\n <button class=\"mrd-table__filter-btn mrd-table__filter-btn--apply\"\n onClick={() => this.applyFilter()}>{t('filter_apply', this.locale)}</button>\n </div>\n </div>\n );\n }\n\n // ── Render: footer ────────────────────────────────────────────────────────\n\n private renderFooter(rowCount?: number, effectiveTotal?: number, isTotalKnown: boolean = true) {\n // Non-paginated mode: totalElements=0 and no paginated data loaded yet\n if (this.totalElements === 0 && this.loadedPages.size === 0) {\n const count = rowCount ?? 0;\n if (count === 0) return null;\n return (\n <div class=\"mrd-table__footer\">\n {count} {t('table_of', this.locale)} {count}\n </div>\n );\n }\n\n // Paginated mode: only show once page 0 has loaded (avoids stale total during filter reset)\n if (!this.loadedPages.has(0)) return null;\n\n // effectiveTotal from render(); fall back to baseTotal when not provided.\n const displayTotal = effectiveTotal ?? this.baseTotal;\n // Compute from/to independently so partial rows at top/bottom are included.\n const from = Math.min(Math.floor(this.scrollTop / this.rowHeight) + 1, displayTotal);\n const to = Math.min(Math.ceil((this.scrollTop + this.tableHeight) / this.rowHeight), displayTotal);\n // Show '…' for the total until we have a reliable count (aggregations or last page loaded).\n const totalLabel = isTotalKnown ? String(displayTotal) : '…';\n return (\n <div class=\"mrd-table__footer\">\n {from}–{to} {t('table_of', this.locale)} {totalLabel}\n </div>\n );\n }\n\n // ── Render: cell ──────────────────────────────────────────────────────────\n\n private renderCell(col: TableColumn, row: Record<string, any>) {\n const numericTypes = new Set(['INTEGER', 'DECIMAL', 'PERCENTAGE', 'CURRENCY']);\n const dataType = col.dataType ?? '';\n const isNumeric = col.type === 'FIELD' && numericTypes.has(dataType);\n const isFile = col.type === 'FIELD' && (dataType === 'FILE' || dataType === 'IMAGE');\n\n if (isFile) {\n const name = col.name ?? '';\n const fileVal = row?.[name];\n const href = fileVal?.href as string | undefined;\n const fileName = fileVal?.fileName as string | undefined;\n\n return (\n <td class=\"mrd-table__cell\">\n {href && fileName ? (\n <button\n class=\"mrd-table__file-btn\"\n title={fileName}\n onClick={(e) => {\n e.stopPropagation();\n this.mrdDownload.emit({ href, fileName });\n }}\n >\n <svg class=\"mrd-table__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 </td>\n );\n }\n\n if (dataType === 'JSON') {\n const name = col.name ?? '';\n const rawValue = name ? row?.[name] : undefined;\n if (rawValue == null || rawValue === '') return <td class=\"mrd-table__cell\"></td>;\n const compactHtml = CellRenderer.formatJson(rawValue, true);\n const prettyHtml = CellRenderer.formatJson(rawValue, false);\n return (\n <td class=\"mrd-table__cell\">\n <span class=\"mrd-table__json-preview\" innerHTML={compactHtml} />\n <button\n class=\"mrd-table__textblock-btn\"\n onClick={(e) => { e.stopPropagation(); this.openJsonModal(prettyHtml); }}\n aria-label={t('textblock_show_more', this.locale)}\n >⋯</button>\n </td>\n );\n }\n\n const TEXTBLOCK_MAX = 200;\n\n if (dataType === 'TEXTBLOCK') {\n const full = CellRenderer.render(col, row, this.locale);\n if (full.length <= TEXTBLOCK_MAX) {\n return <td class=\"mrd-table__cell\">{full}</td>;\n }\n const preview = full.slice(0, TEXTBLOCK_MAX) + '…';\n return (\n <td class=\"mrd-table__cell\">\n {preview}\n <button\n class=\"mrd-table__textblock-btn\"\n onClick={(e) => { e.stopPropagation(); this.openTextblockModal(full); }}\n aria-label={t('textblock_show_more', this.locale)}\n >⋯</button>\n </td>\n );\n }\n\n const value = CellRenderer.render(col, row, this.locale);\n return (\n <td class={`mrd-table__cell${isNumeric ? ' mrd-table__cell--numeric' : ''}`}>\n {value}\n </td>\n );\n }\n\n // ── Render: totals row ────────────────────────────────────────────────────\n\n private renderTotalsRow() {\n if (!this.aggregations) return null;\n if (!this.columns.some(c => c.type === 'FIELD' && c.aggregate)) return null;\n\n return (\n <tfoot>\n <tr class=\"mrd-table__totals-row\">\n {this.columns.map(col => {\n const val = this.renderAggregationValue(col);\n const isNumeric = col.type === 'FIELD' && NUMERIC_TYPES.has(col.dataType ?? '');\n return (\n <td class={`mrd-table__totals-cell${isNumeric ? ' mrd-table__totals-cell--numeric' : ''}`}>\n {val}\n </td>\n );\n })}\n </tr>\n </tfoot>\n );\n }\n\n // ── Render ─────────────────────────────────────────────────────────────────\n\n render() {\n if (!this.columns?.length) return null;\n\n // ── Non-paginated mode ──────────────────────────────────────────────────\n // Only enter non-paginated mode when totalElements is 0 AND no paginated data\n // has been loaded yet — prevents the wrong branch when the host omits totalElements.\n\n if (this.totalElements === 0 && this.loadedPages.size === 0) {\n return (\n <Host>\n {this.renderToolbar()}\n <div class=\"mrd-table\">\n <table class=\"mrd-table__table\">\n <thead>\n <tr>\n {this.columns.map(col => {\n const name = this.colName(col);\n const isFiltered = this.activeFilters.has(name);\n const cls = [\n 'mrd-table__header',\n isFiltered ? 'mrd-table__header--filtered' : '',\n this.filterMode ? 'mrd-table__header--sortable' : '',\n ].filter(Boolean).join(' ');\n return (\n <th\n class={cls}\n onClick={this.filterMode ? (e) => this.handleFilterOpen(col, e) : undefined}\n >\n <span class=\"mrd-table__header-label\">\n {col.label ?? ''}\n </span>\n {isFiltered && this.renderFilterIcon()}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {this.rows?.map((row, i) => (\n <tr\n class=\"mrd-table__row mrd-table__row--clickable\"\n style={{ background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }}\n onClick={() => this.mrdRowClick.emit(row)}\n >\n {this.columns.map(col => this.renderCell(col, row))}\n </tr>\n ))}\n </tbody>\n {this.renderTotalsRow()}\n </table>\n {(!this.rows || this.rows.length === 0) && (\n <p class=\"mrd-table__empty\">{t('no_results', this.locale)}</p>\n )}\n </div>\n {this.renderFooter(this.rows?.length)}\n {this.renderFilterPopup()}\n {this.renderTextblockModal()}\n {this.renderJsonModal()}\n </Host>\n );\n }\n\n // ── Paginated / virtual-scroll mode ────────────────────────────────────\n\n // Derive the authoritative row count from loaded pages:\n // if any loaded page is shorter than pageSize it is the last page,\n // so the true total cannot exceed (pageNum * pageSize + pageRows.length).\n // aggregationsTotal (from setAggregations) takes priority over the totalElements prop.\n let effectiveTotal = this.baseTotal;\n for (const [pageNum, pageRows] of this.loadedPages) {\n if (pageRows.length < this.pageSize) {\n effectiveTotal = Math.min(effectiveTotal, pageNum * this.pageSize + pageRows.length);\n }\n }\n\n // Clamp renderEnd to what we actually know exists (-1 when empty)\n const clampedEnd = Math.min(this.renderEnd, effectiveTotal - 1);\n\n const colCount = this.columns.length;\n const topSpacerHeight = this.renderStart * this.rowHeight;\n const bottomSpacerHeight = Math.max(0, (effectiveTotal - 1 - clampedEnd) * this.rowHeight);\n const tableStyle = this.colWidths.length > 0\n ? { tableLayout: 'fixed' as const }\n : undefined;\n\n const renderedRows: any[] = [];\n for (let i = this.renderStart; i <= clampedEnd; i++) {\n const row = this.getRow(i);\n if (row === null) {\n renderedRows.push(\n <tr class=\"mrd-table__row mrd-table__row--loading\">\n <td class=\"mrd-table__cell--placeholder\" colSpan={colCount}>\n <span class=\"mrd-table__placeholder-bar\" />\n </td>\n </tr>\n );\n } else {\n renderedRows.push(\n <tr\n class=\"mrd-table__row mrd-table__row--clickable\"\n style={{ background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }}\n onClick={() => this.mrdRowClick.emit(row)}\n >\n {this.columns.map(col => this.renderCell(col, row))}\n </tr>\n );\n }\n }\n\n return (\n <Host>\n {this.renderToolbar()}\n <div\n class=\"mrd-table__scroll\"\n style={{ height: `${this.tableHeight}px` }}\n onScroll={this.handleScroll}\n >\n <table class=\"mrd-table__table\" style={tableStyle}>\n <thead>\n <tr>\n {this.columns.map((col, idx) => {\n const name = this.colName(col);\n const isActive = this.sortField === name;\n const isFiltered = this.activeFilters.has(name);\n const isInteractive = !NON_INTERACTIVE_TYPES.has(this.colDataType(col));\n const cls = [\n 'mrd-table__header',\n isInteractive ? 'mrd-table__header--sortable' : '',\n isActive ? `mrd-table__header--sorted-${this.sortDir}` : '',\n isFiltered ? 'mrd-table__header--filtered' : '',\n ].filter(Boolean).join(' ');\n return (\n <th\n class={cls}\n style={this.colWidths[idx] ? { width: `${this.colWidths[idx]}px` } : undefined}\n onClick={isInteractive ? ((e) => this.filterMode ? this.handleFilterOpen(col, e) : this.handleSortClick(col)) : undefined}\n >\n <span class=\"mrd-table__header-label\">\n {col.label ?? ''}\n </span>\n {isInteractive && isActive && (\n <span class=\"mrd-table__sort-icon\" aria-hidden=\"true\">\n {this.sortDir === 'asc' ? '▲' : '▼'}\n </span>\n )}\n {isInteractive && !isActive && !this.filterMode && (\n <span class=\"mrd-table__sort-icon\" aria-hidden=\"true\">⇅</span>\n )}\n {isInteractive && isFiltered && this.renderFilterIcon()}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {topSpacerHeight > 0 && (\n <tr class=\"mrd-table__spacer\" style={{ height: `${topSpacerHeight}px` }}>\n <td colSpan={colCount} />\n </tr>\n )}\n {renderedRows}\n {bottomSpacerHeight > 0 && (\n <tr class=\"mrd-table__spacer\" style={{ height: `${bottomSpacerHeight}px` }}>\n <td colSpan={colCount} />\n </tr>\n )}\n </tbody>\n {this.renderTotalsRow()}\n </table>\n </div>\n {effectiveTotal === 0 && this.loadedPages.has(0) && (\n <p class=\"mrd-table__empty\">{t('no_results', this.locale)}</p>\n )}\n {effectiveTotal > 0 && this.renderFooter(undefined, effectiveTotal, this.isTotalKnown())}\n {this.renderFilterPopup()}\n {this.renderTextblockModal()}\n </Host>\n );\n }\n\n private renderFilterIcon() {\n return (\n <span class=\"mrd-table__filter-icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\">\n <path d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"/>\n </svg>\n </span>\n );\n }\n\n private renderTextblockModal() {\n if (this.textblockModal === null) return null;\n return (\n <div\n class=\"mrd-table__modal-backdrop\"\n onClick={() => this.closeTextblockModal()}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div class=\"mrd-table__modal\" onClick={(e) => e.stopPropagation()}>\n <button\n class=\"mrd-table__modal-close\"\n onClick={() => this.closeTextblockModal()}\n aria-label={t('close', this.locale)}\n >✕</button>\n <p class=\"mrd-table__modal-text\">{this.textblockModal}</p>\n </div>\n </div>\n );\n }\n\n private renderJsonModal() {\n if (this.jsonModal === null) return null;\n return (\n <div\n class=\"mrd-table__modal-backdrop\"\n onClick={() => this.closeJsonModal()}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div class=\"mrd-table__modal\" onClick={(e) => e.stopPropagation()}>\n <button\n class=\"mrd-table__modal-close\"\n onClick={() => this.closeJsonModal()}\n aria-label={t('close', this.locale)}\n >✕</button>\n <pre class=\"mrd-table__modal-json\" innerHTML={this.jsonModal} />\n </div>\n </div>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,47 @@
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 } from './validation-ixb43cqU.js';
4
+ import './index-I5SuYv7a.js';
5
+ import './client-layout-D88nn5zf.js';
6
+
7
+ const mrdTextFieldScss = () => `.sc-mrd-text-field-h{display:block}.mrd-text-field.sc-mrd-text-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-text-field__label.sc-mrd-text-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-text-field__label--required.sc-mrd-text-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-text-field__input.sc-mrd-text-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-text-field__input.sc-mrd-text-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-text-field__input.sc-mrd-text-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-text-field__input.sc-mrd-text-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-text-field__input--error.sc-mrd-text-field{border-color:var(--mrd-border-color-error)}.mrd-text-field__input--error.sc-mrd-text-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-text-field__error.sc-mrd-text-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
8
+
9
+ const MrdTextField = 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.error = '';
22
+ this.handleInput = (e) => {
23
+ const val = e.target.value;
24
+ this.mrdChange.emit({ name: this.name, value: val });
25
+ };
26
+ this.handleBlur = (e) => {
27
+ const val = e.target.value;
28
+ if (this.required && !validateRequired(val)) {
29
+ this.error = t('required', this.locale);
30
+ }
31
+ else {
32
+ this.error = '';
33
+ }
34
+ this.mrdBlur.emit({ name: this.name, value: val });
35
+ };
36
+ }
37
+ render() {
38
+ const hasError = !!this.error;
39
+ return (h(Host, { key: 'fd4e1f389cb452ab80a1e1c7295d884ca935999e' }, h("div", { key: '7b7bde7a18fcd9b8d5779daab88ddabb45dd8692', class: "mrd-text-field" }, this.label && (h("label", { key: '8e2ad4053473cfad4eae4c4634b863ac5ef32fea', class: `mrd-text-field__label${this.required ? ' mrd-text-field__label--required' : ''}` }, this.label)), h("input", { key: 'd32712a6dc2aee4691bc4a580d5ca2ad81e0ff9f', class: `mrd-text-field__input${hasError ? ' mrd-text-field__input--error' : ''}`, type: "text", name: this.name, value: this.value, placeholder: this.placeholder, required: this.required, disabled: this.disabled, onInput: this.handleInput, onBlur: this.handleBlur }), hasError && h("span", { key: '31585dbf82020c81834e1eeada5cd9907a5ead56', class: "mrd-text-field__error" }, this.error))));
40
+ }
41
+ };
42
+ MrdTextField.style = mrdTextFieldScss();
43
+
44
+ export { MrdTextField as mrd_text_field };
45
+ //# sourceMappingURL=mrd-text-field.entry.esm.js.map
46
+
47
+ //# sourceMappingURL=mrd-text-field.entry.js.map
@@ -0,0 +1 @@
1
+ {"file":"mrd-text-field.entry.js","mappings":";;;;;;AAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,smDAAsmD,CAAC;;MCS1nD,YAAY,GAAA,MAAA;AALzB,IAAA,WAAA,CAAA,OAAA,EAAA;;;;AAMU,QAAA,IAAA,CAAA,IAAI,GAAW,EAAE;AACjB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,WAAW,GAAW,EAAE;AACxB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,MAAM,GAAW,SAAS,CAAC,QAAQ;AAElC,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAKnB,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAQ,KAAI;AACjC,YAAA,MAAM,GAAG,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtD,SAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAQ,KAAI;AAChC,YAAA,MAAM,GAAG,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK;YAChD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;gBAC3C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;;iBAClC;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEjB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACpD,SAAC;AA4BF;IA1BC,MAAM,GAAA;AACJ,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;AAC7B,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,gBAAgB,EAAA,EACxB,IAAI,CAAC,KAAK,KACT,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAE,CAAA,qBAAA,EAAwB,IAAI,CAAC,QAAQ,GAAG,kCAAkC,GAAG,EAAE,CAAA,CAAE,EAAA,EAC5F,IAAI,CAAC,KAAK,CACL,CACT,EACD,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAE,CAAA,qBAAA,EAAwB,QAAQ,GAAG,+BAA+B,GAAG,EAAE,CAAA,CAAE,EAChF,IAAI,EAAC,MAAM,EACX,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAA,CACvB,EACD,QAAQ,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,uBAAuB,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CAChE,CACD;;;;;;;","names":[],"sources":["src/components/mrd-text-field/mrd-text-field.scss?tag=mrd-text-field&encapsulation=scoped","src/components/mrd-text-field/mrd-text-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-text-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-text-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-text-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-text-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-text-field__input::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-text-field__input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-text-field__input:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-text-field__input--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-text-field__input--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-text-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 } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\n\n@Component({\n tag: 'mrd-text-field',\n styleUrl: 'mrd-text-field.scss',\n scoped: true,\n})\nexport class MrdTextField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: string = '';\n @Prop() placeholder: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: string }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: string }>;\n\n private handleInput = (e: Event) => {\n const val = (e.target as HTMLInputElement).value;\n this.mrdChange.emit({ name: this.name, value: val });\n };\n\n private handleBlur = (e: Event) => {\n const val = (e.target as HTMLInputElement).value;\n if (this.required && !validateRequired(val)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n this.mrdBlur.emit({ name: this.name, value: val });\n };\n\n render() {\n const hasError = !!this.error;\n return (\n <Host>\n <div class=\"mrd-text-field\">\n {this.label && (\n <label class={`mrd-text-field__label${this.required ? ' mrd-text-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <input\n class={`mrd-text-field__input${hasError ? ' mrd-text-field__input--error' : ''}`}\n type=\"text\"\n name={this.name}\n value={this.value}\n placeholder={this.placeholder}\n required={this.required}\n disabled={this.disabled}\n onInput={this.handleInput}\n onBlur={this.handleBlur}\n />\n {hasError && <span class=\"mrd-text-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,86 @@
1
+ import { r as registerInstance, a as createEvent, h, d as Host, e as getElement } from './index-B_tPFIvS.js';
2
+ import { t } from './i18n-hoGGKbKU.js';
3
+ import { v as validateRequired } from './validation-ixb43cqU.js';
4
+ import './index-I5SuYv7a.js';
5
+ import './client-layout-D88nn5zf.js';
6
+
7
+ const mrdTextareaFieldScss = () => `.sc-mrd-textarea-field-h{display:block}.mrd-textarea-field.sc-mrd-textarea-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-textarea-field__label.sc-mrd-textarea-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-textarea-field__label--required.sc-mrd-textarea-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-textarea-field__container.sc-mrd-textarea-field{border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow:hidden;background-color:var(--mrd-input-bg);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition)}.mrd-textarea-field__container.sc-mrd-textarea-field:focus-within{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-textarea-field__container--error.sc-mrd-textarea-field{border-color:var(--mrd-border-color-error)}.mrd-textarea-field__container--error.sc-mrd-textarea-field:focus-within{box-shadow:var(--mrd-shadow-focus-error)}.mrd-textarea-field__editor.sc-mrd-textarea-field{min-height:150px;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base)}.mrd-textarea-field__editor.sc-mrd-textarea-field .ql-toolbar.sc-mrd-textarea-field{border:none;border-bottom:var(--mrd-border-width) solid var(--mrd-border-color);font-family:var(--mrd-font-family)}.mrd-textarea-field__editor.sc-mrd-textarea-field .ql-container.sc-mrd-textarea-field{border:none;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base)}.mrd-textarea-field__editor.sc-mrd-textarea-field .ql-editor.sc-mrd-textarea-field{min-height:120px;padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x)}.mrd-textarea-field__editor.sc-mrd-textarea-field .ql-editor.ql-blank.sc-mrd-textarea-field::before{color:var(--mrd-input-placeholder-color);font-style:normal}.mrd-textarea-field__error.sc-mrd-textarea-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
8
+
9
+ const MrdTextareaField = 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.error = '';
22
+ this.editorReady = false;
23
+ }
24
+ componentDidLoad() {
25
+ this.initQuill();
26
+ }
27
+ async initQuill() {
28
+ try {
29
+ // Dynamically import Quill
30
+ const Quill = (await import('./quill-C9pgw_k-.js')).default;
31
+ this.editorEl = this.el.querySelector('.mrd-textarea-field__editor');
32
+ if (!this.editorEl)
33
+ return;
34
+ const quill = new Quill(this.editorEl, {
35
+ theme: 'snow',
36
+ placeholder: this.placeholder,
37
+ readOnly: this.disabled,
38
+ modules: {
39
+ toolbar: [
40
+ ['bold', 'italic', 'underline', 'strike'],
41
+ [{ list: 'ordered' }, { list: 'bullet' }],
42
+ [{ header: [1, 2, 3, false] }],
43
+ ['link'],
44
+ ['clean'],
45
+ ],
46
+ },
47
+ });
48
+ if (this.value) {
49
+ quill.clipboard.dangerouslyPasteHTML(this.value);
50
+ }
51
+ quill.on('text-change', () => {
52
+ var _a, _b;
53
+ const html = (_b = (_a = this.editorEl.querySelector('.ql-editor')) === null || _a === void 0 ? void 0 : _a.innerHTML) !== null && _b !== void 0 ? _b : '';
54
+ this.mrdChange.emit({ name: this.name, value: html });
55
+ });
56
+ quill.on('selection-change', (range) => {
57
+ var _a, _b;
58
+ if (!range) {
59
+ const html = (_b = (_a = this.editorEl.querySelector('.ql-editor')) === null || _a === void 0 ? void 0 : _a.innerHTML) !== null && _b !== void 0 ? _b : '';
60
+ if (this.required && !validateRequired(html)) {
61
+ this.error = t('required', this.locale);
62
+ }
63
+ else {
64
+ this.error = '';
65
+ }
66
+ this.mrdBlur.emit({ name: this.name, value: html });
67
+ }
68
+ });
69
+ void quill; // hold reference if needed later
70
+ this.editorReady = true;
71
+ }
72
+ catch (err) {
73
+ console.error('Failed to load Quill editor:', err);
74
+ }
75
+ }
76
+ render() {
77
+ return (h(Host, { key: 'e1fd819c598f01e3986946357ec18d608f2c7adc' }, h("div", { key: '20c28e54e61429655b2d4f297bd84e183ad7e971', class: "mrd-textarea-field" }, this.label && (h("label", { key: 'fa46a20badc35c931563600f24a32e0a8c8c07ad', class: `mrd-textarea-field__label${this.required ? ' mrd-textarea-field__label--required' : ''}` }, this.label)), h("div", { key: 'ee928eca0a1b85401b346b7fae8adbe9214a7664', class: `mrd-textarea-field__container${this.error ? ' mrd-textarea-field__container--error' : ''}` }, h("div", { key: '89b00f3c526623c47f0aff7ad862f70dfdc2fe15', class: "mrd-textarea-field__editor" })), this.error && h("span", { key: '458cf8fddee36ddbc384ce4d25765e5aacd3c9d5', class: "mrd-textarea-field__error" }, this.error))));
78
+ }
79
+ get el() { return getElement(this); }
80
+ };
81
+ MrdTextareaField.style = mrdTextareaFieldScss();
82
+
83
+ export { MrdTextareaField as mrd_textarea_field };
84
+ //# sourceMappingURL=mrd-textarea-field.entry.esm.js.map
85
+
86
+ //# sourceMappingURL=mrd-textarea-field.entry.js.map
@@ -0,0 +1 @@
1
+ {"file":"mrd-textarea-field.entry.js","mappings":";;;;;;AAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,wiEAAwiE,CAAC;;MCShkE,gBAAgB,GAAA,MAAA;AAL7B,IAAA,WAAA,CAAA,OAAA,EAAA;;;;AAQU,QAAA,IAAA,CAAA,IAAI,GAAW,EAAE;AACjB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,WAAW,GAAW,EAAE;AACxB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAY,KAAK;AACzB,QAAA,IAAA,CAAA,MAAM,GAAW,SAAS,CAAC,QAAQ;AAElC,QAAA,IAAA,CAAA,KAAK,GAAW,EAAE;AAClB,QAAA,IAAA,CAAA,WAAW,GAAY,KAAK;AA+EtC;IAxEC,gBAAgB,GAAA;QACd,IAAI,CAAC,SAAS,EAAE;;AAGV,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI;;YAEF,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,qBAAO,CAAC,EAAE,OAAO;YAE7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,6BAA6B,CAAmB;YACtF,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;YAEpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;AACrC,gBAAA,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,OAAO,EAAE;AACP,oBAAA,OAAO,EAAE;AACP,wBAAA,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;wBACzC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACzC,wBAAA,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;AAC9B,wBAAA,CAAC,MAAM,CAAC;AACR,wBAAA,CAAC,OAAO,CAAC;AACV,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;AAEF,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlD,YAAA,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;;gBAC3B,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE;AACvE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACvD,aAAC,CAAC;YAEF,KAAK,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAc,KAAI;;gBAC9C,IAAI,CAAC,KAAK,EAAE;oBACV,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE;oBACvE,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;wBAC5C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;;yBAClC;AACL,wBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEjB,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;AAEvD,aAAC,CAAC;YAEF,KAAK,KAAK,CAAC;AACX,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;QACvB,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC;;;IAItD,MAAM,GAAA;AACJ,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,oBAAoB,EAAA,EAC5B,IAAI,CAAC,KAAK,KACT,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAO,KAAK,EAAE,CAAA,yBAAA,EAA4B,IAAI,CAAC,QAAQ,GAAG,sCAAsC,GAAG,EAAE,CAAA,CAAE,EAAA,EACpG,IAAI,CAAC,KAAK,CACL,CACT,EACD,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAA,6BAAA,EAAgC,IAAI,CAAC,KAAK,GAAG,uCAAuC,GAAG,EAAE,CAAA,CAAE,EAAA,EACrG,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,4BAA4B,EAAA,CAAO,CAC1C,EACL,IAAI,CAAC,KAAK,IAAI,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,2BAA2B,EAAA,EAAE,IAAI,CAAC,KAAK,CAAQ,CACtE,CACD;;;;;;;;","names":[],"sources":["src/components/mrd-textarea-field/mrd-textarea-field.scss?tag=mrd-textarea-field&encapsulation=scoped","src/components/mrd-textarea-field/mrd-textarea-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-textarea-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-textarea-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-textarea-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-textarea-field__container {\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n overflow: hidden;\n background-color: var(--mrd-input-bg);\n transition: border-color var(--mrd-transition), box-shadow var(--mrd-transition);\n}\n\n.mrd-textarea-field__container:focus-within {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-textarea-field__container--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-textarea-field__container--error:focus-within {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-textarea-field__editor {\n min-height: 150px;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n}\n\n/* Override Quill borders since container handles them */\n.mrd-textarea-field__editor .ql-toolbar {\n border: none;\n border-bottom: var(--mrd-border-width) solid var(--mrd-border-color);\n font-family: var(--mrd-font-family);\n}\n\n.mrd-textarea-field__editor .ql-container {\n border: none;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n}\n\n.mrd-textarea-field__editor .ql-editor {\n min-height: 120px;\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n}\n\n.mrd-textarea-field__editor .ql-editor.ql-blank::before {\n color: var(--mrd-input-placeholder-color);\n font-style: normal;\n}\n\n.mrd-textarea-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, Element, ComponentDidLoad } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\n\n@Component({\n tag: 'mrd-textarea-field',\n styleUrl: 'mrd-textarea-field.scss',\n scoped: true,\n})\nexport class MrdTextareaField implements ComponentDidLoad {\n @Element() el!: HTMLElement;\n\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: string = '';\n @Prop() placeholder: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n\n @State() error: string = '';\n @State() editorReady: boolean = false;\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: string }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: string }>;\n\n private editorEl!: HTMLDivElement;\n\n componentDidLoad() {\n this.initQuill();\n }\n\n private async initQuill() {\n try {\n // Dynamically import Quill\n const Quill = (await import('quill')).default;\n\n this.editorEl = this.el.querySelector('.mrd-textarea-field__editor') as HTMLDivElement;\n if (!this.editorEl) return;\n\n const quill = new Quill(this.editorEl, {\n theme: 'snow',\n placeholder: this.placeholder,\n readOnly: this.disabled,\n modules: {\n toolbar: [\n ['bold', 'italic', 'underline', 'strike'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n [{ header: [1, 2, 3, false] }],\n ['link'],\n ['clean'],\n ],\n },\n });\n\n if (this.value) {\n quill.clipboard.dangerouslyPasteHTML(this.value);\n }\n\n quill.on('text-change', () => {\n const html = this.editorEl.querySelector('.ql-editor')?.innerHTML ?? '';\n this.mrdChange.emit({ name: this.name, value: html });\n });\n\n quill.on('selection-change', (range: unknown) => {\n if (!range) {\n const html = this.editorEl.querySelector('.ql-editor')?.innerHTML ?? '';\n if (this.required && !validateRequired(html)) {\n this.error = t('required', this.locale);\n } else {\n this.error = '';\n }\n this.mrdBlur.emit({ name: this.name, value: html });\n }\n });\n\n void quill; // hold reference if needed later\n this.editorReady = true;\n } catch (err) {\n console.error('Failed to load Quill editor:', err);\n }\n }\n\n render() {\n return (\n <Host>\n <div class=\"mrd-textarea-field\">\n {this.label && (\n <label class={`mrd-textarea-field__label${this.required ? ' mrd-textarea-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <div class={`mrd-textarea-field__container${this.error ? ' mrd-textarea-field__container--error' : ''}`}>\n <div class=\"mrd-textarea-field__editor\"></div>\n </div>\n {this.error && <span class=\"mrd-textarea-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}