@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
@@ -1,9 +1,19 @@
1
- import { Host, h } from "@stencil/core";
2
- import { ClientLayoutItemType, ClientLayoutItemRelationEditBehavior } from "../../types";
3
- import { t } from "../../utils/i18n";
4
- import { validateRequired } from "../../utils/validation";
5
- export class MrdForm {
6
- constructor() {
1
+ import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
2
+ import './index-I5SuYv7a.js';
3
+ import { t } from './i18n-hoGGKbKU.js';
4
+ import { v as validateRequired } from './validation-ixb43cqU.js';
5
+ import { a as ClientLayoutItemType, d as ClientLayoutItemRelationEditBehavior } from './client-layout-D88nn5zf.js';
6
+
7
+ const mrdFormScss = () => `.sc-mrd-form-h{display:block}.mrd-form.sc-mrd-form{font-family:var(--mrd-font-family);width:100%}.mrd-form__title.sc-mrd-form{font-size:var(--mrd-font-size-2xl);font-weight:var(--mrd-font-weight-bold);color:var(--mrd-color-neutral-900);margin:0 0 var(--mrd-space-6) 0}.mrd-form__body.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-5)}.mrd-form__field.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-1)}.mrd-form__field-error.sc-mrd-form{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}.mrd-form__section.sc-mrd-form{border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius-md);padding:var(--mrd-space-4) var(--mrd-space-5);margin:0}.mrd-form__section-legend.sc-mrd-form{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-700);padding:0 var(--mrd-space-2)}.mrd-form__section-body.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-4);margin-top:var(--mrd-space-2)}.mrd-form__group.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-2)}.mrd-form__group-label.sc-mrd-form{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-semibold);color:var(--mrd-color-neutral-500);text-transform:uppercase;letter-spacing:0.05em}.mrd-form__group-body.sc-mrd-form{display:flex;flex-direction:column;gap:var(--mrd-space-4);padding-left:var(--mrd-space-4);border-left:3px solid var(--mrd-color-neutral-200)}.mrd-form__footer.sc-mrd-form{margin-top:var(--mrd-space-8);padding-top:var(--mrd-space-5);border-top:var(--mrd-border-width) solid var(--mrd-border-color);display:flex;justify-content:flex-end;gap:var(--mrd-space-3)}.mrd-form__submit.sc-mrd-form{display:inline-flex;align-items:center;justify-content:center;height:var(--mrd-input-height);padding:0 var(--mrd-space-6);background-color:var(--mrd-color-primary);color:var(--mrd-color-white);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);border:none;border-radius:var(--mrd-border-radius);cursor:pointer;transition:background-color var(--mrd-transition)}.mrd-form__submit.sc-mrd-form:hover{background-color:var(--mrd-color-primary-hover)}.mrd-form__submit.sc-mrd-form:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-form__submit.sc-mrd-form:active{background-color:var(--mrd-color-primary-dark)}.mrd-form__cancel.sc-mrd-form{display:inline-flex;align-items:center;justify-content:center;height:var(--mrd-input-height);padding:0 var(--mrd-space-6);background-color:transparent;color:var(--mrd-color-neutral-600);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);cursor:pointer;transition:background-color var(--mrd-transition), color var(--mrd-transition)}.mrd-form__cancel.sc-mrd-form:hover{background-color:var(--mrd-color-neutral-100);color:var(--mrd-color-neutral-800)}.mrd-form__cancel.sc-mrd-form:focus{outline:none;box-shadow:var(--mrd-shadow-focus)}.mrd-form__cancel.sc-mrd-form:active{background-color:var(--mrd-color-neutral-200)}`;
8
+
9
+ const MrdForm = class {
10
+ constructor(hostRef) {
11
+ registerInstance(this, hostRef);
12
+ this.mrdSubmit = createEvent(this, "mrdSubmit", 7);
13
+ this.mrdCancel = createEvent(this, "mrdCancel", 7);
14
+ this.mrdSearch = createEvent(this, "mrdSearch", 7);
15
+ this.mrdFetchAll = createEvent(this, "mrdFetchAll", 7);
16
+ this.mrdUpload = createEvent(this, "mrdUpload", 7);
7
17
  this.locale = navigator.language;
8
18
  this.values = {};
9
19
  /**
@@ -27,6 +37,12 @@ export class MrdForm {
27
37
  this.referenceClass = '';
28
38
  /** When true, a cancel button is shown next to the submit button. */
29
39
  this.showCancel = false;
40
+ /**
41
+ * The currently logged-in user, resolved by the host via /accounts/me.
42
+ * Used to pre-fill RELATION fields whose defaultValue is "@me".
43
+ * May be null when not authenticated or not yet resolved.
44
+ */
45
+ this.me = null;
30
46
  this.formValues = {};
31
47
  this.errors = {};
32
48
  this.submitted = false;
@@ -84,6 +100,7 @@ export class MrdForm {
84
100
  var _a, _b;
85
101
  this.initialValues = Object.assign({}, ((_a = this.values) !== null && _a !== void 0 ? _a : {}));
86
102
  this.formValues = Object.assign({}, ((_b = this.values) !== null && _b !== void 0 ? _b : {}));
103
+ this.applyDefaultValues();
87
104
  }
88
105
  componentDidLoad() {
89
106
  // Apply reference pre-fill and emit mrdFetchAll for dependent DROPDOWN fields.
@@ -99,11 +116,55 @@ export class MrdForm {
99
116
  this.initialValues = Object.assign({}, (newValues !== null && newValues !== void 0 ? newValues : {}));
100
117
  this.formValues = Object.assign({}, (newValues !== null && newValues !== void 0 ? newValues : {}));
101
118
  this.applyReferenceValue();
119
+ this.applyDefaultValues();
102
120
  this.errors = {};
103
121
  this.submitted = false;
104
122
  // Re-check DROPDOWN dependencies now that formValues are updated
105
123
  setTimeout(() => this.emitDependentFetchAll(), 0);
106
124
  }
125
+ /** Re-apply @me defaults when the me prop arrives after mount. */
126
+ meChanged() {
127
+ this.applyDefaultValues();
128
+ }
129
+ /** Apply defaultValue from layout items to fields that have no value yet.
130
+ * Tokens: today() → YYYY-MM-DD, now() → YYYY-MM-DDTHH:mm, @me → this.me. */
131
+ applyDefaultValues() {
132
+ var _a, _b, _c, _d, _e, _f, _g, _h;
133
+ const allFields = this.collectFields((_b = (_a = this.layout) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : []);
134
+ const updates = {};
135
+ for (const item of allFields) {
136
+ if (!item.name)
137
+ continue;
138
+ const current = this.formValues[item.name];
139
+ if (current != null && current !== '')
140
+ continue;
141
+ const dv = (_e = (_c = item.defaultValue) !== null && _c !== void 0 ? _c : (_d = item.field) === null || _d === void 0 ? void 0 : _d.defaultValue) !== null && _e !== void 0 ? _e : (_f = item.relation) === null || _f === void 0 ? void 0 : _f.defaultValue;
142
+ if (!dv)
143
+ continue;
144
+ if (item.type === ClientLayoutItemType.FIELD) {
145
+ const resolved = this.resolveFieldDefault(dv, (_g = item.dataType) !== null && _g !== void 0 ? _g : (_h = item.field) === null || _h === void 0 ? void 0 : _h.dataType);
146
+ if (resolved != null)
147
+ updates[item.name] = resolved;
148
+ }
149
+ else if (item.type === ClientLayoutItemType.RELATION) {
150
+ if (dv === 'me()' && this.me) {
151
+ updates[item.name] = this.me;
152
+ }
153
+ }
154
+ }
155
+ if (Object.keys(updates).length > 0) {
156
+ this.formValues = Object.assign(Object.assign({}, this.formValues), updates);
157
+ }
158
+ }
159
+ resolveFieldDefault(dv, _dataType) {
160
+ if (dv === 'today()') {
161
+ return new Date().toISOString().slice(0, 10);
162
+ }
163
+ if (dv === 'now()') {
164
+ return new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
165
+ }
166
+ return dv;
167
+ }
107
168
  /**
108
169
  * When referenceHref + referenceClass are set, find the matching layout field
109
170
  * and inject its value into formValues. This allows dependent DROPDOWN fields
@@ -301,277 +362,18 @@ export class MrdForm {
301
362
  const dir = this.locale.startsWith('ar') ? 'rtl' : 'ltr';
302
363
  return (h(Host, null, h("form", { class: "mrd-form", dir: dir, onSubmit: this.handleSubmit, noValidate: true }, this.layout.title && h("h2", { class: "mrd-form__title" }, this.layout.title), h("div", { class: "mrd-form__body" }, this.renderItems(this.layout.items)), h("div", { class: "mrd-form__footer" }, h("button", { type: "submit", class: "mrd-form__submit" }, t('submit', this.locale)), this.showCancel && (h("button", { type: "button", class: "mrd-form__cancel", onClick: () => this.mrdCancel.emit() }, t('cancel', this.locale)))))));
303
364
  }
304
- static get is() { return "mrd-form"; }
305
- static get encapsulation() { return "scoped"; }
306
- static get originalStyleUrls() {
307
- return {
308
- "$": ["mrd-form.scss"]
309
- };
310
- }
311
- static get styleUrls() {
312
- return {
313
- "$": ["mrd-form.css"]
314
- };
315
- }
316
- static get properties() {
317
- return {
318
- "layout": {
319
- "type": "unknown",
320
- "mutable": false,
321
- "complexType": {
322
- "original": "ClientLayout",
323
- "resolved": "ClientLayout",
324
- "references": {
325
- "ClientLayout": {
326
- "location": "import",
327
- "path": "../../types",
328
- "id": "src/types/index.ts::ClientLayout",
329
- "referenceLocation": "ClientLayout"
330
- }
331
- }
332
- },
333
- "required": true,
334
- "optional": false,
335
- "docs": {
336
- "tags": [],
337
- "text": ""
338
- },
339
- "getter": false,
340
- "setter": false
341
- },
342
- "locale": {
343
- "type": "string",
344
- "mutable": false,
345
- "complexType": {
346
- "original": "string",
347
- "resolved": "string",
348
- "references": {}
349
- },
350
- "required": false,
351
- "optional": false,
352
- "docs": {
353
- "tags": [],
354
- "text": ""
355
- },
356
- "getter": false,
357
- "setter": false,
358
- "reflect": false,
359
- "attribute": "locale",
360
- "defaultValue": "navigator.language"
361
- },
362
- "values": {
363
- "type": "unknown",
364
- "mutable": false,
365
- "complexType": {
366
- "original": "Record<string, unknown>",
367
- "resolved": "string | unknown",
368
- "references": {
369
- "Record": {
370
- "location": "global",
371
- "id": "global::Record"
372
- }
373
- }
374
- },
375
- "required": false,
376
- "optional": false,
377
- "docs": {
378
- "tags": [],
379
- "text": ""
380
- },
381
- "getter": false,
382
- "setter": false,
383
- "defaultValue": "{}"
384
- },
385
- "referenceHref": {
386
- "type": "string",
387
- "mutable": false,
388
- "complexType": {
389
- "original": "string",
390
- "resolved": "string",
391
- "references": {}
392
- },
393
- "required": false,
394
- "optional": false,
395
- "docs": {
396
- "tags": [],
397
- "text": "Absolute href of the parent/reference object (e.g. the clientAgreement href\nwhen creating an invoice from within a client agreement).\nCombined with `referenceClass`, mrd-form will automatically pre-fill the\nmatching relation field so dependent DROPDOWN fields can be fetched on load."
398
- },
399
- "getter": false,
400
- "setter": false,
401
- "reflect": false,
402
- "attribute": "reference-href",
403
- "defaultValue": "''"
404
- },
405
- "referenceClass": {
406
- "type": "string",
407
- "mutable": false,
408
- "complexType": {
409
- "original": "string",
410
- "resolved": "string",
411
- "references": {}
412
- },
413
- "required": false,
414
- "optional": false,
415
- "docs": {
416
- "tags": [],
417
- "text": "The `mostSignificantClass` of the parent/reference object\n(e.g. `'clientAgreements'`). Used to locate the matching RELATION field."
418
- },
419
- "getter": false,
420
- "setter": false,
421
- "reflect": false,
422
- "attribute": "reference-class",
423
- "defaultValue": "''"
424
- },
425
- "showCancel": {
426
- "type": "boolean",
427
- "mutable": false,
428
- "complexType": {
429
- "original": "boolean",
430
- "resolved": "boolean",
431
- "references": {}
432
- },
433
- "required": false,
434
- "optional": false,
435
- "docs": {
436
- "tags": [],
437
- "text": "When true, a cancel button is shown next to the submit button."
438
- },
439
- "getter": false,
440
- "setter": false,
441
- "reflect": false,
442
- "attribute": "show-cancel",
443
- "defaultValue": "false"
444
- }
445
- };
446
- }
447
- static get states() {
448
- return {
449
- "formValues": {},
450
- "errors": {},
451
- "submitted": {}
452
- };
453
- }
454
- static get events() {
455
- return [{
456
- "method": "mrdSubmit",
457
- "name": "mrdSubmit",
458
- "bubbles": true,
459
- "cancelable": true,
460
- "composed": true,
461
- "docs": {
462
- "tags": [],
463
- "text": ""
464
- },
465
- "complexType": {
466
- "original": "Record<string, unknown>",
467
- "resolved": "string | unknown",
468
- "references": {
469
- "Record": {
470
- "location": "global",
471
- "id": "global::Record"
472
- }
473
- }
474
- }
475
- }, {
476
- "method": "mrdCancel",
477
- "name": "mrdCancel",
478
- "bubbles": true,
479
- "cancelable": true,
480
- "composed": true,
481
- "docs": {
482
- "tags": [],
483
- "text": ""
484
- },
485
- "complexType": {
486
- "original": "void",
487
- "resolved": "void",
488
- "references": {}
489
- }
490
- }, {
491
- "method": "mrdSearch",
492
- "name": "mrdSearch",
493
- "bubbles": true,
494
- "cancelable": true,
495
- "composed": true,
496
- "docs": {
497
- "tags": [],
498
- "text": ""
499
- },
500
- "complexType": {
501
- "original": "{ name: string; query: string; relatedClass: string }",
502
- "resolved": "{ name: string; query: string; relatedClass: string; }",
503
- "references": {}
504
- }
505
- }, {
506
- "method": "mrdFetchAll",
507
- "name": "mrdFetchAll",
508
- "bubbles": true,
509
- "cancelable": true,
510
- "composed": true,
511
- "docs": {
512
- "tags": [],
513
- "text": ""
514
- },
515
- "complexType": {
516
- "original": "{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }",
517
- "resolved": "{ name: string; relatedClass: string; mostSignificantClass?: string | undefined; commonRelation?: string | undefined; filter?: string | undefined; filterValue?: string | undefined; }",
518
- "references": {}
519
- }
520
- }, {
521
- "method": "mrdUpload",
522
- "name": "mrdUpload",
523
- "bubbles": true,
524
- "cancelable": true,
525
- "composed": true,
526
- "docs": {
527
- "tags": [],
528
- "text": ""
529
- },
530
- "complexType": {
531
- "original": "{ name: string; file: File }",
532
- "resolved": "{ name: string; file: File; }",
533
- "references": {
534
- "File": {
535
- "location": "global",
536
- "id": "global::File"
537
- }
538
- }
539
- }
540
- }];
541
- }
542
- static get methods() {
543
- return {
544
- "setFieldValue": {
545
- "complexType": {
546
- "signature": "(name: string, value: unknown) => Promise<void>",
547
- "parameters": [{
548
- "name": "name",
549
- "type": "string",
550
- "docs": ""
551
- }, {
552
- "name": "value",
553
- "type": "unknown",
554
- "docs": ""
555
- }],
556
- "references": {
557
- "Promise": {
558
- "location": "global",
559
- "id": "global::Promise"
560
- }
561
- },
562
- "return": "Promise<void>"
563
- },
564
- "docs": {
565
- "text": "",
566
- "tags": []
567
- }
568
- }
569
- };
570
- }
571
- static get watchers() {
572
- return [{
573
- "propName": "values",
574
- "methodName": "valuesChanged"
575
- }];
576
- }
577
- }
365
+ static get watchers() { return {
366
+ "values": [{
367
+ "valuesChanged": 0
368
+ }],
369
+ "me": [{
370
+ "meChanged": 0
371
+ }]
372
+ }; }
373
+ };
374
+ MrdForm.style = mrdFormScss();
375
+
376
+ export { MrdForm as mrd_form };
377
+ //# sourceMappingURL=mrd-form.entry.esm.js.map
378
+
379
+ //# sourceMappingURL=mrd-form.entry.js.map
@@ -0,0 +1 @@
1
+ {"file":"mrd-form.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-form/mrd-form.scss?tag=mrd-form&encapsulation=scoped","src/components/mrd-form/mrd-form.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-form {\n font-family: var(--mrd-font-family);\n width: 100%;\n}\n\n.mrd-form__title {\n font-size: var(--mrd-font-size-2xl);\n font-weight: var(--mrd-font-weight-bold);\n color: var(--mrd-color-neutral-900);\n margin: 0 0 var(--mrd-space-6) 0;\n}\n\n.mrd-form__body {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-5);\n}\n\n.mrd-form__field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n}\n\n.mrd-form__field-error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n\n.mrd-form__section {\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius-md);\n padding: var(--mrd-space-4) var(--mrd-space-5);\n margin: 0;\n}\n\n.mrd-form__section-legend {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-700);\n padding: 0 var(--mrd-space-2);\n}\n\n.mrd-form__section-body {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-4);\n margin-top: var(--mrd-space-2);\n}\n\n.mrd-form__group {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-2);\n}\n\n.mrd-form__group-label {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-sm);\n font-weight: var(--mrd-font-weight-semibold);\n color: var(--mrd-color-neutral-500);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.mrd-form__group-body {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-4);\n padding-left: var(--mrd-space-4);\n border-left: 3px solid var(--mrd-color-neutral-200);\n}\n\n.mrd-form__footer {\n margin-top: var(--mrd-space-8);\n padding-top: var(--mrd-space-5);\n border-top: var(--mrd-border-width) solid var(--mrd-border-color);\n display: flex;\n justify-content: flex-end;\n gap: var(--mrd-space-3);\n}\n\n.mrd-form__submit {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--mrd-input-height);\n padding: 0 var(--mrd-space-6);\n background-color: var(--mrd-color-primary);\n color: var(--mrd-color-white);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-medium);\n border: none;\n border-radius: var(--mrd-border-radius);\n cursor: pointer;\n transition: background-color var(--mrd-transition);\n}\n\n.mrd-form__submit:hover {\n background-color: var(--mrd-color-primary-hover);\n}\n\n.mrd-form__submit:focus {\n outline: none;\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-form__submit:active {\n background-color: var(--mrd-color-primary-dark);\n}\n\n.mrd-form__cancel {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--mrd-input-height);\n padding: 0 var(--mrd-space-6);\n background-color: transparent;\n color: var(--mrd-color-neutral-600);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n font-weight: var(--mrd-font-weight-medium);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n cursor: pointer;\n transition: background-color var(--mrd-transition), color var(--mrd-transition);\n}\n\n.mrd-form__cancel:hover {\n background-color: var(--mrd-color-neutral-100);\n color: var(--mrd-color-neutral-800);\n}\n\n.mrd-form__cancel:focus {\n outline: none;\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-form__cancel:active {\n background-color: var(--mrd-color-neutral-200);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Method, Watch } from '@stencil/core';\nimport { ClientLayout, ClientLayoutItem, ClientLayoutItemFieldDataType, ClientLayoutItemType, ClientLayoutItemRelationEditBehavior, RelationSearchResult } from '../../types';\nimport { t } from '../../utils/i18n';\nimport { validateRequired } from '../../utils/validation';\n\n@Component({\n tag: 'mrd-form',\n styleUrl: 'mrd-form.scss',\n scoped: true,\n})\nexport class MrdForm {\n @Prop() layout!: ClientLayout;\n @Prop() locale: string = navigator.language;\n @Prop() values: Record<string, unknown> = {};\n /**\n * Absolute href of the parent/reference object (e.g. the clientAgreement href\n * when creating an invoice from within a client agreement).\n * Combined with `referenceClass`, mrd-form will automatically pre-fill the\n * matching relation field so dependent DROPDOWN fields can be fetched on load\n * — without the host app needing to know anything about the form layout.\n */\n /**\n * Absolute href of the parent/reference object (e.g. the clientAgreement href\n * when creating an invoice from within a client agreement).\n * Combined with `referenceClass`, mrd-form will automatically pre-fill the\n * matching relation field so dependent DROPDOWN fields can be fetched on load.\n */\n @Prop() referenceHref: string = '';\n /**\n * The `mostSignificantClass` of the parent/reference object\n * (e.g. `'clientAgreements'`). Used to locate the matching RELATION field.\n */\n @Prop() referenceClass: string = '';\n /** When true, a cancel button is shown next to the submit button. */\n @Prop() showCancel: boolean = false;\n /**\n * The currently logged-in user, resolved by the host via /accounts/me.\n * Used to pre-fill RELATION fields whose defaultValue is \"@me\".\n * May be null when not authenticated or not yet resolved.\n */\n @Prop() me: RelationSearchResult | null = null;\n\n @State() formValues: Record<string, unknown> = {};\n @State() errors: Record<string, string> = {};\n @State() submitted: boolean = false;\n\n private initialValues: Record<string, unknown> = {};\n\n @Event() mrdSubmit!: EventEmitter<Record<string, unknown>>;\n @Event() mrdCancel!: EventEmitter<void>;\n @Event() mrdSearch!: EventEmitter<{ name: string; query: string; relatedClass: string }>;\n @Event() mrdFetchAll!: EventEmitter<{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }>;\n @Event() mrdUpload!: EventEmitter<{ name: string; file: File }>;\n\n componentWillLoad() {\n this.initialValues = { ...(this.values ?? {}) };\n this.formValues = { ...(this.values ?? {}) };\n this.applyDefaultValues();\n }\n\n componentDidLoad() {\n // Apply reference pre-fill and emit mrdFetchAll for dependent DROPDOWN fields.\n // Deferred so Angular/host prop bindings are settled before we read them.\n setTimeout(() => {\n this.applyReferenceValue();\n this.emitDependentFetchAll();\n }, 0);\n }\n\n /** Sync formValues when the values prop is set from outside after mount\n * (e.g. when pre-filling an existing record in edit mode). */\n @Watch('values')\n valuesChanged(newValues: Record<string, unknown>) {\n this.initialValues = { ...(newValues ?? {}) };\n this.formValues = { ...(newValues ?? {}) };\n this.applyReferenceValue();\n this.applyDefaultValues();\n this.errors = {};\n this.submitted = false;\n // Re-check DROPDOWN dependencies now that formValues are updated\n setTimeout(() => this.emitDependentFetchAll(), 0);\n }\n\n /** Re-apply @me defaults when the me prop arrives after mount. */\n @Watch('me')\n meChanged() {\n this.applyDefaultValues();\n }\n\n /** Apply defaultValue from layout items to fields that have no value yet.\n * Tokens: today() → YYYY-MM-DD, now() → YYYY-MM-DDTHH:mm, @me → this.me. */\n private applyDefaultValues() {\n const allFields = this.collectFields(this.layout?.items ?? []);\n const updates: Record<string, unknown> = {};\n\n for (const item of allFields) {\n if (!item.name) continue;\n const current = this.formValues[item.name];\n if (current != null && current !== '') continue;\n\n const dv = item.defaultValue ?? item.field?.defaultValue ?? item.relation?.defaultValue;\n if (!dv) continue;\n\n if (item.type === ClientLayoutItemType.FIELD) {\n const resolved = this.resolveFieldDefault(dv, item.dataType ?? item.field?.dataType);\n if (resolved != null) updates[item.name] = resolved;\n } else if (item.type === ClientLayoutItemType.RELATION) {\n if (dv === 'me()' && this.me) {\n updates[item.name] = this.me;\n }\n }\n }\n\n if (Object.keys(updates).length > 0) {\n this.formValues = { ...this.formValues, ...updates };\n }\n }\n\n private resolveFieldDefault(dv: string, _dataType?: ClientLayoutItemFieldDataType): unknown {\n if (dv === 'today()') {\n return new Date().toISOString().slice(0, 10);\n }\n if (dv === 'now()') {\n return new Date().toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n }\n return dv;\n }\n\n /**\n * When referenceHref + referenceClass are set, find the matching layout field\n * and inject its value into formValues. This allows dependent DROPDOWN fields\n * (those with commonRelation pointing to that field) to be fetched on load\n * without the host app doing any form-domain logic.\n *\n * Two lookup strategies:\n * 1. Find a RELATION whose mostSignificantClass matches referenceClass.\n * 2. Fallback: find a DROPDOWN whose commonRelation field is absent from the\n * layout (API omitted it because it is implied by the reference context).\n */\n private applyReferenceValue() {\n if (!this.referenceHref || !this.referenceClass) return;\n const fieldName = this.resolveReferenceFieldName();\n if (!fieldName) return;\n // Only set when not already present (don't overwrite an explicit value)\n if (!this.formValues[fieldName]) {\n this.formValues = { ...this.formValues, [fieldName]: this.referenceHref };\n }\n }\n\n private resolveReferenceFieldName(): string | null {\n const allItems = this.collectFields(this.layout?.items ?? []);\n\n // Strategy 1: direct match on mostSignificantClass\n const direct = allItems.find(\n item =>\n item.type === ClientLayoutItemType.RELATION &&\n item.mostSignificantClass === this.referenceClass,\n );\n if (direct?.name) return direct.name;\n\n // Strategy 2: a DROPDOWN whose commonRelation field was omitted from the layout\n const layoutRelationNames = new Set(\n allItems\n .filter(item => item.type === ClientLayoutItemType.RELATION)\n .map(item => item.name!),\n );\n for (const item of allItems) {\n if (\n item.type === ClientLayoutItemType.RELATION &&\n item.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN &&\n item.commonRelation &&\n !layoutRelationNames.has(item.commonRelation)\n ) {\n return item.commonRelation;\n }\n }\n\n return null;\n }\n\n @Method()\n async setFieldValue(name: string, value: unknown) {\n this.formValues = { ...this.formValues, [name]: value };\n if (this.errors[name]) {\n this.errors = { ...this.errors, [name]: '' };\n }\n }\n\n /** Collect all RELATION items that use editBehavior=DROPDOWN with a commonRelation. */\n private collectDependentDropdowns(): ClientLayoutItem[] {\n return this.collectFields(this.layout?.items ?? [])\n .filter(item =>\n item.type === ClientLayoutItemType.RELATION &&\n item.editBehavior === ClientLayoutItemRelationEditBehavior.DROPDOWN &&\n !!item.commonRelation,\n );\n }\n\n /** Emit mrdFetchAll for every dependent DROPDOWN whose filter value is currently set. */\n private emitDependentFetchAll() {\n for (const item of this.collectDependentDropdowns()) {\n const filterValue = this.getHref(this.formValues[item.commonRelation!]);\n if (filterValue) {\n this.mrdFetchAll.emit({\n name: item.name!,\n relatedClass: item.relatedClass!,\n mostSignificantClass: item.mostSignificantClass,\n commonRelation: item.commonRelation,\n filter: item.commonRelation + '_href',\n filterValue,\n });\n }\n }\n }\n\n /** Extract a plain href string from a form value, which can be a string or\n * a RelationSearchResult-like object with an `id` field. */\n private getHref(value: unknown): string {\n if (!value) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'object' && 'id' in (value as object)) return (value as { id: string }).id;\n return '';\n }\n\n private handleFieldChange = (e: CustomEvent<{ name: string; value: unknown }>) => {\n const { name, value } = e.detail;\n const prevHref = this.getHref(this.formValues[name]);\n this.formValues = { ...this.formValues, [name]: value };\n if (this.errors[name]) {\n this.errors = { ...this.errors, [name]: '' };\n }\n\n // When a field changes, check if it is the commonRelation dependency for any\n // DROPDOWN relation. If so, reset the dependent field and re-fetch its options.\n // Skip when the effective href did not change (e.g. mrdBlur fires after mrdChange\n // with the same value, which would otherwise trigger a duplicate fetch).\n const newHref = this.getHref(value);\n if (newHref === prevHref) return;\n\n for (const item of this.collectDependentDropdowns()) {\n if (item.commonRelation !== name) continue;\n\n // Clear the dependent field's current selection (options have changed)\n this.formValues = { ...this.formValues, [item.name!]: null };\n\n this.mrdFetchAll.emit({\n name: item.name!,\n relatedClass: item.relatedClass!,\n mostSignificantClass: item.mostSignificantClass,\n commonRelation: item.commonRelation,\n filter: item.commonRelation + '_href',\n filterValue: newHref, // empty string when dependency was cleared → host should clear the list\n });\n }\n };\n\n private handleSearch = (e: CustomEvent<{ name: string; query: string; relatedClass: string }>) => {\n e.stopPropagation();\n this.mrdSearch.emit(e.detail);\n };\n\n private handleFetchAll = (e: CustomEvent<{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }>) => {\n e.stopPropagation();\n this.mrdFetchAll.emit(e.detail);\n };\n\n private handleUpload = (e: CustomEvent<{ name: string; file: File }>) => {\n e.stopPropagation();\n this.mrdUpload.emit(e.detail);\n };\n\n private collectFields(items: ClientLayoutItem[]): ClientLayoutItem[] {\n const fields: ClientLayoutItem[] = [];\n for (const item of items) {\n if (item.type === ClientLayoutItemType.FIELD || item.type === ClientLayoutItemType.RELATION) {\n fields.push(item);\n }\n if (item.items) {\n fields.push(...this.collectFields(item.items));\n }\n }\n return fields;\n }\n\n private validate(): boolean {\n const newErrors: Record<string, string> = {};\n const allFields = this.collectFields(this.layout?.items ?? []);\n\n for (const item of allFields) {\n if (!item.name) continue;\n if (item.required && !validateRequired(this.formValues[item.name])) {\n newErrors[item.name] = t('required', this.locale);\n }\n }\n\n this.errors = newErrors;\n return Object.keys(newErrors).length === 0;\n }\n\n private normalizeFieldValue(value: unknown): unknown {\n return (value === '' || value == null) ? null : value;\n }\n\n private normalizeRelationValue(value: unknown): string | string[] | null {\n if (value == null || value === '') return null;\n if (typeof value === 'string') return value || null;\n if (Array.isArray(value)) {\n return (value as unknown[]).map(v =>\n typeof v === 'object' && v !== null && 'id' in v ? (v as { id: string }).id : String(v),\n );\n }\n if (typeof value === 'object' && 'id' in (value as object)) {\n return (value as { id: string }).id || null;\n }\n return null;\n }\n\n private deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n const sa = [...(a as unknown[])].sort();\n const sb = [...(b as unknown[])].sort();\n return JSON.stringify(sa) === JSON.stringify(sb);\n }\n return JSON.stringify(a) === JSON.stringify(b);\n }\n\n /** Build a submit payload containing only fields that changed relative to\n * initialValues. For a new record (POST) initialValues is empty, so every\n * non-null field is included. For edit (PATCH) only modified fields are sent,\n * including fields explicitly cleared to null.\n */\n private buildSubmitPayload(): Record<string, unknown> {\n const payload: Record<string, unknown> = {};\n const allFields = this.collectFields(this.layout?.items ?? []);\n\n for (const item of allFields) {\n if (!item.name) continue;\n const name = item.name;\n if (item.type === ClientLayoutItemType.FIELD) {\n const rawValue = this.formValues[name];\n if (rawValue instanceof File) continue;\n const current = this.normalizeFieldValue(rawValue);\n const initial = this.normalizeFieldValue(this.initialValues[name]);\n if (this.deepEqual(current, initial)) continue;\n payload[name] = current;\n } else if (item.type === ClientLayoutItemType.RELATION) {\n const current = this.normalizeRelationValue(this.formValues[name]);\n const initial = this.normalizeRelationValue(this.initialValues[name]);\n if (this.deepEqual(current, initial)) continue;\n payload[name] = current;\n }\n }\n\n return payload;\n }\n\n private handleSubmit = (e: Event) => {\n e.preventDefault();\n this.submitted = true;\n if (this.validate()) {\n this.mrdSubmit.emit(this.buildSubmitPayload());\n }\n };\n\n private renderItems(items: ClientLayoutItem[]) {\n return items.map(item => {\n if (item.type === ClientLayoutItemType.SECTION) {\n return (\n <fieldset class=\"mrd-form__section\">\n {item.label && <legend class=\"mrd-form__section-legend\">{item.label}</legend>}\n <div class=\"mrd-form__section-body\">\n {item.items && this.renderItems(item.items)}\n </div>\n </fieldset>\n );\n }\n\n if (item.type === ClientLayoutItemType.GROUP) {\n return (\n <div class=\"mrd-form__group\">\n {item.label && <div class=\"mrd-form__group-label\">{item.label}</div>}\n <div class=\"mrd-form__group-body\">\n {item.items && this.renderItems(item.items)}\n </div>\n </div>\n );\n }\n\n const fieldName = item.name ?? '';\n const fieldValue = this.formValues[fieldName];\n\n return (\n <div class=\"mrd-form__field\">\n <mrd-field\n item={item}\n locale={this.locale}\n value={fieldValue}\n onMrdChange={this.handleFieldChange}\n onMrdBlur={this.handleFieldChange}\n onMrdSearch={this.handleSearch}\n onMrdFetchAll={this.handleFetchAll}\n onMrdUpload={this.handleUpload}\n />\n {this.errors[fieldName] && (\n <span class=\"mrd-form__field-error\">{this.errors[fieldName]}</span>\n )}\n </div>\n );\n });\n }\n\n render() {\n if (!this.layout) {\n return <Host></Host>;\n }\n\n const dir = this.locale.startsWith('ar') ? 'rtl' : 'ltr';\n\n return (\n <Host>\n <form\n class=\"mrd-form\"\n dir={dir}\n onSubmit={this.handleSubmit}\n noValidate\n >\n {this.layout.title && <h2 class=\"mrd-form__title\">{this.layout.title}</h2>}\n <div class=\"mrd-form__body\">\n {this.renderItems(this.layout.items)}\n </div>\n <div class=\"mrd-form__footer\">\n <button type=\"submit\" class=\"mrd-form__submit\">\n {t('submit', this.locale)}\n </button>\n {this.showCancel && (\n <button\n type=\"button\"\n class=\"mrd-form__cancel\"\n onClick={() => this.mrdCancel.emit()}\n >\n {t('cancel', this.locale)}\n </button>\n )}\n </div>\n </form>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,87 @@
1
+ import { r as registerInstance, a as createEvent, h, d as Host } from './index-B_tPFIvS.js';
2
+ import { t } from './i18n-hoGGKbKU.js';
3
+ import { v as validateRequired, b as validateUrl } from './validation-ixb43cqU.js';
4
+ import './index-I5SuYv7a.js';
5
+ import './client-layout-D88nn5zf.js';
6
+
7
+ const mrdHyperlinkFieldScss = () => `.sc-mrd-hyperlink-field-h{display:block}.mrd-hyperlink-field.sc-mrd-hyperlink-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%}.mrd-hyperlink-field__label.sc-mrd-hyperlink-field{display:block;font-family:var(--mrd-font-family);font-size:var(--mrd-label-font-size);font-weight:var(--mrd-label-font-weight);color:var(--mrd-label-color)}.mrd-hyperlink-field__label--required.sc-mrd-hyperlink-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);transition:border-color var(--mrd-transition), box-shadow var(--mrd-transition);outline:none;appearance:none;box-sizing:border-box}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-hyperlink-field__input.sc-mrd-hyperlink-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-hyperlink-field__input--error.sc-mrd-hyperlink-field{border-color:var(--mrd-border-color-error)}.mrd-hyperlink-field__input--error.sc-mrd-hyperlink-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-hyperlink-field__input--name.sc-mrd-hyperlink-field{margin-top:var(--mrd-space-1)}.mrd-hyperlink-field__link.sc-mrd-hyperlink-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-primary);text-decoration:underline;word-break:break-all}.mrd-hyperlink-field__link.sc-mrd-hyperlink-field:hover{opacity:0.8}.mrd-hyperlink-field__empty.sc-mrd-hyperlink-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-400)}.mrd-hyperlink-field__error.sc-mrd-hyperlink-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}`;
8
+
9
+ const MrdHyperlinkField = class {
10
+ constructor(hostRef) {
11
+ registerInstance(this, hostRef);
12
+ this.mrdChange = createEvent(this, "mrdChange", 7);
13
+ this.mrdBlur = createEvent(this, "mrdBlur", 7);
14
+ this.name = '';
15
+ this.label = '';
16
+ this.value = '';
17
+ this.placeholder = '';
18
+ this.required = false;
19
+ this.disabled = false;
20
+ this.locale = navigator.language;
21
+ this.internalHref = '';
22
+ this.internalName = '';
23
+ this.error = '';
24
+ this.handleHrefInput = (e) => {
25
+ this.internalHref = e.target.value;
26
+ this.mrdChange.emit({ name: this.name, value: this.buildValue() });
27
+ };
28
+ this.handleNameInput = (e) => {
29
+ this.internalName = e.target.value;
30
+ this.mrdChange.emit({ name: this.name, value: this.buildValue() });
31
+ };
32
+ this.handleBlur = () => {
33
+ if (this.required && !validateRequired(this.internalHref)) {
34
+ this.error = t('required', this.locale);
35
+ }
36
+ else if (this.internalHref && !validateUrl(this.internalHref)) {
37
+ this.error = t('invalid_url', this.locale);
38
+ }
39
+ else {
40
+ this.error = '';
41
+ }
42
+ this.mrdBlur.emit({ name: this.name, value: this.buildValue() });
43
+ };
44
+ }
45
+ componentWillLoad() {
46
+ this.parseValue(this.value);
47
+ }
48
+ valueChanged(val) {
49
+ this.parseValue(val);
50
+ }
51
+ parseValue(val) {
52
+ var _a, _b, _c;
53
+ if (val !== null && val !== undefined && typeof val === 'object' && 'href' in val) {
54
+ this.internalHref = (_a = val.href) !== null && _a !== void 0 ? _a : '';
55
+ this.internalName = (_b = val.name) !== null && _b !== void 0 ? _b : '';
56
+ }
57
+ else {
58
+ this.internalHref = (_c = val) !== null && _c !== void 0 ? _c : '';
59
+ this.internalName = '';
60
+ }
61
+ }
62
+ buildValue() {
63
+ return this.internalName.trim()
64
+ ? { href: this.internalHref, name: this.internalName }
65
+ : { href: this.internalHref };
66
+ }
67
+ render() {
68
+ const hasError = !!this.error;
69
+ if (this.disabled) {
70
+ return (h(Host, null, h("div", { class: "mrd-hyperlink-field" }, this.label && h("span", { class: "mrd-hyperlink-field__label" }, this.label), this.internalHref
71
+ ? h("a", { class: "mrd-hyperlink-field__link", href: this.internalHref, target: "_blank", rel: "noopener noreferrer" }, this.internalName || this.internalHref)
72
+ : h("span", { class: "mrd-hyperlink-field__empty" }, "\u2014"))));
73
+ }
74
+ return (h(Host, null, h("div", { class: "mrd-hyperlink-field" }, this.label && (h("label", { class: `mrd-hyperlink-field__label${this.required ? ' mrd-hyperlink-field__label--required' : ''}` }, this.label)), h("input", { class: `mrd-hyperlink-field__input${hasError ? ' mrd-hyperlink-field__input--error' : ''}`, type: "url", name: this.name, value: this.internalHref, placeholder: this.placeholder || 'https://', required: this.required, onInput: this.handleHrefInput, onBlur: this.handleBlur }), h("input", { class: "mrd-hyperlink-field__input mrd-hyperlink-field__input--name", type: "text", value: this.internalName, placeholder: t('hyperlink_name', this.locale), onInput: this.handleNameInput, onBlur: this.handleBlur }), hasError && h("span", { class: "mrd-hyperlink-field__error" }, this.error))));
75
+ }
76
+ static get watchers() { return {
77
+ "value": [{
78
+ "valueChanged": 0
79
+ }]
80
+ }; }
81
+ };
82
+ MrdHyperlinkField.style = mrdHyperlinkFieldScss();
83
+
84
+ export { MrdHyperlinkField as mrd_hyperlink_field };
85
+ //# sourceMappingURL=mrd-hyperlink-field.entry.esm.js.map
86
+
87
+ //# sourceMappingURL=mrd-hyperlink-field.entry.js.map
@@ -0,0 +1 @@
1
+ {"file":"mrd-hyperlink-field.entry.js","mappings":"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","names":[],"sources":["src/components/mrd-hyperlink-field/mrd-hyperlink-field.scss?tag=mrd-hyperlink-field&encapsulation=scoped","src/components/mrd-hyperlink-field/mrd-hyperlink-field.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.mrd-hyperlink-field {\n display: flex;\n flex-direction: column;\n gap: var(--mrd-space-1);\n width: 100%;\n}\n\n.mrd-hyperlink-field__label {\n display: block;\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-label-font-size);\n font-weight: var(--mrd-label-font-weight);\n color: var(--mrd-label-color);\n}\n\n.mrd-hyperlink-field__label--required::after {\n content: ' *';\n color: var(--mrd-color-danger);\n}\n\n.mrd-hyperlink-field__input {\n display: block;\n width: 100%;\n height: var(--mrd-input-height);\n padding: var(--mrd-input-padding-y) var(--mrd-input-padding-x);\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-input-color);\n background-color: var(--mrd-input-bg);\n border: var(--mrd-border-width) solid var(--mrd-border-color);\n border-radius: var(--mrd-border-radius);\n transition: border-color var(--mrd-transition), box-shadow var(--mrd-transition);\n outline: none;\n appearance: none;\n box-sizing: border-box;\n}\n\n.mrd-hyperlink-field__input::placeholder {\n color: var(--mrd-input-placeholder-color);\n}\n\n.mrd-hyperlink-field__input:focus {\n border-color: var(--mrd-border-color-focus);\n box-shadow: var(--mrd-shadow-focus);\n}\n\n.mrd-hyperlink-field__input:disabled {\n background-color: var(--mrd-input-bg-disabled);\n cursor: not-allowed;\n opacity: 0.7;\n}\n\n.mrd-hyperlink-field__input--error {\n border-color: var(--mrd-border-color-error);\n}\n\n.mrd-hyperlink-field__input--error:focus {\n box-shadow: var(--mrd-shadow-focus-error);\n}\n\n.mrd-hyperlink-field__input--name {\n margin-top: var(--mrd-space-1);\n}\n\n.mrd-hyperlink-field__link {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-primary);\n text-decoration: underline;\n word-break: break-all;\n}\n\n.mrd-hyperlink-field__link:hover {\n opacity: 0.8;\n}\n\n.mrd-hyperlink-field__empty {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-font-size-base);\n color: var(--mrd-color-neutral-400);\n}\n\n.mrd-hyperlink-field__error {\n font-family: var(--mrd-font-family);\n font-size: var(--mrd-error-font-size);\n color: var(--mrd-error-color);\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\nimport { t } from '../../utils/i18n';\nimport { validateRequired, validateUrl } from '../../utils/validation';\nimport { HyperlinkValue } from '../../types/client-layout';\n\n@Component({\n tag: 'mrd-hyperlink-field',\n styleUrl: 'mrd-hyperlink-field.scss',\n scoped: true,\n})\nexport class MrdHyperlinkField {\n @Prop() name: string = '';\n @Prop() label: string = '';\n @Prop() value: HyperlinkValue | string = '';\n @Prop() placeholder: string = '';\n @Prop() required: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() locale: string = navigator.language;\n\n @State() internalHref: string = '';\n @State() internalName: string = '';\n @State() error: string = '';\n\n @Event() mrdChange!: EventEmitter<{ name: string; value: HyperlinkValue }>;\n @Event() mrdBlur!: EventEmitter<{ name: string; value: HyperlinkValue }>;\n\n componentWillLoad() {\n this.parseValue(this.value);\n }\n\n @Watch('value')\n valueChanged(val: HyperlinkValue | string) {\n this.parseValue(val);\n }\n\n private parseValue(val: HyperlinkValue | string) {\n if (val !== null && val !== undefined && typeof val === 'object' && 'href' in (val as object)) {\n this.internalHref = (val as HyperlinkValue).href ?? '';\n this.internalName = (val as HyperlinkValue).name ?? '';\n } else {\n this.internalHref = (val as string) ?? '';\n this.internalName = '';\n }\n }\n\n private buildValue(): HyperlinkValue {\n return this.internalName.trim()\n ? { href: this.internalHref, name: this.internalName }\n : { href: this.internalHref };\n }\n\n private handleHrefInput = (e: Event) => {\n this.internalHref = (e.target as HTMLInputElement).value;\n this.mrdChange.emit({ name: this.name, value: this.buildValue() });\n };\n\n private handleNameInput = (e: Event) => {\n this.internalName = (e.target as HTMLInputElement).value;\n this.mrdChange.emit({ name: this.name, value: this.buildValue() });\n };\n\n private handleBlur = () => {\n if (this.required && !validateRequired(this.internalHref)) {\n this.error = t('required', this.locale);\n } else if (this.internalHref && !validateUrl(this.internalHref)) {\n this.error = t('invalid_url', this.locale);\n } else {\n this.error = '';\n }\n this.mrdBlur.emit({ name: this.name, value: this.buildValue() });\n };\n\n render() {\n const hasError = !!this.error;\n\n if (this.disabled) {\n return (\n <Host>\n <div class=\"mrd-hyperlink-field\">\n {this.label && <span class=\"mrd-hyperlink-field__label\">{this.label}</span>}\n {this.internalHref\n ? <a class=\"mrd-hyperlink-field__link\" href={this.internalHref} target=\"_blank\" rel=\"noopener noreferrer\">\n {this.internalName || this.internalHref}\n </a>\n : <span class=\"mrd-hyperlink-field__empty\">—</span>\n }\n </div>\n </Host>\n );\n }\n\n return (\n <Host>\n <div class=\"mrd-hyperlink-field\">\n {this.label && (\n <label class={`mrd-hyperlink-field__label${this.required ? ' mrd-hyperlink-field__label--required' : ''}`}>\n {this.label}\n </label>\n )}\n <input\n class={`mrd-hyperlink-field__input${hasError ? ' mrd-hyperlink-field__input--error' : ''}`}\n type=\"url\"\n name={this.name}\n value={this.internalHref}\n placeholder={this.placeholder || 'https://'}\n required={this.required}\n onInput={this.handleHrefInput}\n onBlur={this.handleBlur}\n />\n <input\n class=\"mrd-hyperlink-field__input mrd-hyperlink-field__input--name\"\n type=\"text\"\n value={this.internalName}\n placeholder={t('hyperlink_name', this.locale)}\n onInput={this.handleNameInput}\n onBlur={this.handleBlur}\n />\n {hasError && <span class=\"mrd-hyperlink-field__error\">{this.error}</span>}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}