@mmlogic/components 0.1.0 → 0.1.1

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 (29) hide show
  1. package/dist/cjs/{index-OvnIRO4Y.js → index-BPj2cBXs.js} +48 -1
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/mosterdcomponents.cjs.js +2 -2
  4. package/dist/cjs/mrd-boolean-field_16.cjs.entry.js +31 -1
  5. package/dist/cjs/mrd-table.cjs.entry.js +5 -4
  6. package/dist/collection/components/mrd-form/mrd-form.js +13 -0
  7. package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +29 -4
  8. package/dist/collection/components/mrd-table/mrd-table.js +22 -2
  9. package/dist/collection/components/mrd-table/mrd-table.scss +4 -0
  10. package/dist/components/mrd-form.js +1 -1
  11. package/dist/components/mrd-relation-field2.js +1 -1
  12. package/dist/components/mrd-table.js +1 -1
  13. package/dist/esm/{index-DQ_he8te.js → index-_tsCCkAi.js} +48 -1
  14. package/dist/esm/loader.js +3 -3
  15. package/dist/esm/mosterdcomponents.js +3 -3
  16. package/dist/esm/mrd-boolean-field_16.entry.js +31 -1
  17. package/dist/esm/mrd-table.entry.js +5 -4
  18. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  19. package/dist/mosterdcomponents/p-3bc76431.entry.js +1 -0
  20. package/dist/mosterdcomponents/p-61dac880.entry.js +1 -0
  21. package/dist/mosterdcomponents/p-_tsCCkAi.js +2 -0
  22. package/dist/types/components/mrd-form/mrd-form.d.ts +3 -0
  23. package/dist/types/components/mrd-relation-field/mrd-relation-field.d.ts +3 -1
  24. package/dist/types/components/mrd-table/mrd-table.d.ts +2 -0
  25. package/dist/types/components.d.ts +10 -3
  26. package/package.json +1 -1
  27. package/dist/mosterdcomponents/p-88cd0930.entry.js +0 -1
  28. package/dist/mosterdcomponents/p-926ed331.entry.js +0 -1
  29. package/dist/mosterdcomponents/p-DQ_he8te.js +0 -2
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const NAMESPACE = 'mosterdcomponents';
4
- const BUILD = /* mosterdcomponents */ { hotModuleReplacement: false, hydratedSelectorName: "hydrated", lazyLoad: true, propChangeCallback: false, state: true, updatable: true};
4
+ const BUILD = /* mosterdcomponents */ { hotModuleReplacement: false, hydratedSelectorName: "hydrated", lazyLoad: true, propChangeCallback: true, state: true, updatable: true};
5
5
 
6
6
  /*
7
7
  Stencil Client Platform v4.43.2 | MIT Licensed | https://stenciljs.com
@@ -1077,6 +1077,7 @@ var setValue = (ref, propName, newVal, cmpMeta) => {
1077
1077
  `Couldn't find host element for "${cmpMeta.$tagName$}" as it is unknown to this Stencil runtime. This usually happens when integrating a 3rd party Stencil component with another Stencil component or application. Please reach out to the maintainers of the 3rd party Stencil component or report this on the Stencil Discord server (https://chat.stenciljs.com) or comment on this similar [GitHub issue](https://github.com/stenciljs/core/issues/5457).`
1078
1078
  );
1079
1079
  }
1080
+ const elm = hostRef.$hostElement$ ;
1080
1081
  const oldVal = hostRef.$instanceValues$.get(propName);
1081
1082
  const flags = hostRef.$flags$;
1082
1083
  const instance = hostRef.$lazyInstance$ ;
@@ -1087,6 +1088,27 @@ var setValue = (ref, propName, newVal, cmpMeta) => {
1087
1088
  const didValueChange = newVal !== oldVal && !areBothNaN;
1088
1089
  if ((!(flags & 8 /* isConstructingInstance */) || oldVal === void 0) && didValueChange) {
1089
1090
  hostRef.$instanceValues$.set(propName, newVal);
1091
+ if (cmpMeta.$watchers$) {
1092
+ const watchMethods = cmpMeta.$watchers$[propName];
1093
+ if (watchMethods) {
1094
+ watchMethods.map((watcher) => {
1095
+ try {
1096
+ const [[watchMethodName, watcherFlags]] = Object.entries(watcher);
1097
+ if (flags & 128 /* isWatchReady */ || watcherFlags & 1 /* Immediate */) {
1098
+ if (!instance) {
1099
+ hostRef.$fetchedCbList$.push(() => {
1100
+ hostRef.$lazyInstance$[watchMethodName](newVal, oldVal, propName);
1101
+ });
1102
+ } else {
1103
+ instance[watchMethodName](newVal, oldVal, propName);
1104
+ }
1105
+ }
1106
+ } catch (e) {
1107
+ consoleError(e, elm);
1108
+ }
1109
+ });
1110
+ }
1111
+ }
1090
1112
  if (flags & 2 /* hasRendered */) {
1091
1113
  if (instance.componentShouldUpdate) {
1092
1114
  const shouldUpdate = instance.componentShouldUpdate(newVal, oldVal, propName);
@@ -1106,6 +1128,17 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
1106
1128
  var _a, _b;
1107
1129
  const prototype = Cstr.prototype;
1108
1130
  if (cmpMeta.$members$ || BUILD.propChangeCallback) {
1131
+ {
1132
+ if (Cstr.watchers && !cmpMeta.$watchers$) {
1133
+ cmpMeta.$watchers$ = Cstr.watchers;
1134
+ }
1135
+ if (Cstr.deserializers && !cmpMeta.$deserializers$) {
1136
+ cmpMeta.$deserializers$ = Cstr.deserializers;
1137
+ }
1138
+ if (Cstr.serializers && !cmpMeta.$serializers$) {
1139
+ cmpMeta.$serializers$ = Cstr.serializers;
1140
+ }
1141
+ }
1109
1142
  const members = Object.entries((_a = cmpMeta.$members$) != null ? _a : {});
1110
1143
  members.map(([memberName, [memberFlags]]) => {
1111
1144
  if ((memberFlags & 31 /* Prop */ || (flags & 2 /* proxyState */) && memberFlags & 32 /* State */)) {
@@ -1267,6 +1300,11 @@ var initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId) => {
1267
1300
  throw new Error(`Constructor for "${cmpMeta.$tagName$}#${hostRef.$modeName$}" was not found`);
1268
1301
  }
1269
1302
  if (!Cstr.isProxied) {
1303
+ {
1304
+ cmpMeta.$watchers$ = Cstr.watchers;
1305
+ cmpMeta.$serializers$ = Cstr.serializers;
1306
+ cmpMeta.$deserializers$ = Cstr.deserializers;
1307
+ }
1270
1308
  proxyComponent(Cstr, cmpMeta, 2 /* proxyState */);
1271
1309
  Cstr.isProxied = true;
1272
1310
  }
@@ -1282,6 +1320,9 @@ var initializeComponent = async (elm, hostRef, cmpMeta, hmrVersionId) => {
1282
1320
  {
1283
1321
  hostRef.$flags$ &= -9 /* isConstructingInstance */;
1284
1322
  }
1323
+ {
1324
+ hostRef.$flags$ |= 128 /* isWatchReady */;
1325
+ }
1285
1326
  endNewInstance();
1286
1327
  {
1287
1328
  fireConnectedCallback(hostRef.$lazyInstance$, elm);
@@ -1413,6 +1454,7 @@ var bootstrapLazy = (lazyBundles, options = {}) => {
1413
1454
  plt.$resourcesUrl$ = new URL(options.resourcesUrl || "./", win.document.baseURI).href;
1414
1455
  lazyBundles.map((lazyBundle) => {
1415
1456
  lazyBundle[1].map((compactMeta) => {
1457
+ var _a2, _b, _c;
1416
1458
  const cmpMeta = {
1417
1459
  $flags$: compactMeta[0],
1418
1460
  $tagName$: compactMeta[1],
@@ -1422,6 +1464,11 @@ var bootstrapLazy = (lazyBundles, options = {}) => {
1422
1464
  {
1423
1465
  cmpMeta.$members$ = compactMeta[2];
1424
1466
  }
1467
+ {
1468
+ cmpMeta.$watchers$ = (_a2 = compactMeta[4]) != null ? _a2 : {};
1469
+ cmpMeta.$serializers$ = (_b = compactMeta[5]) != null ? _b : {};
1470
+ cmpMeta.$deserializers$ = (_c = compactMeta[6]) != null ? _c : {};
1471
+ }
1425
1472
  const tagName = transformTag(cmpMeta.$tagName$);
1426
1473
  const HostElement = class extends HTMLElement {
1427
1474
  ["s-p"];
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-OvnIRO4Y.js');
3
+ var index = require('./index-BPj2cBXs.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["mrd-table.cjs",[[2,"mrd-table",{"columns":[16],"rows":[16],"locale":[1],"totalElements":[2,"total-elements"],"pageSize":[2,"page-size"],"rowHeight":[2,"row-height"],"tableHeight":[2,"table-height"],"defaultSort":[1,"default-sort"],"loadedPages":[32],"requestedPages":[32],"renderStart":[32],"renderEnd":[32],"colWidths":[32],"sortField":[32],"sortDir":[32],"init":[64],"setPage":[64]}]]],["mrd-boolean-field_16.cjs",[[2,"mrd-form",{"layout":[16],"locale":[1],"values":[16],"formValues":[32],"errors":[32],"submitted":[32],"setFieldValue":[64]}],[2,"mrd-field",{"item":[16],"locale":[1],"value":[16]}],[2,"mrd-boolean-field",{"name":[1],"label":[1],"value":[4],"required":[4],"disabled":[4],"locale":[1],"checked":[32]}],[2,"mrd-currency-field",{"name":[1],"label":[1],"value":[16],"required":[4],"disabled":[4],"locale":[1],"amountDisplay":[32],"currency":[32],"error":[32]}],[2,"mrd-date-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-datetime-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-email-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-file-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-hyperlink-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-image-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"previewUrl":[32],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-list-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"multiple":[4],"locale":[1],"listValues":[16],"error":[32],"selected":[32]}],[2,"mrd-number-field",{"name":[1],"label":[1],"value":[2],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"dataType":[1,"data-type"],"decimalPrecision":[2,"decimal-precision"],"displayValue":[32],"error":[32]}],[2,"mrd-relation-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"relatedClass":[1,"related-class"],"displayType":[1,"display-type"],"multiple":[4],"dropdownValues":[16],"value":[1],"searchQuery":[32],"searchResults":[32],"isLoading":[32],"selectedItems":[32],"showResults":[32],"error":[32],"highlightedIndex":[32],"setSearchResults":[64],"setLoading":[64]}],[2,"mrd-text-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-textarea-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32],"editorReady":[32]}],[2,"mrd-time-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}]]]], options);
9
+ return index.bootstrapLazy([["mrd-table.cjs",[[2,"mrd-table",{"columns":[16],"rows":[16],"locale":[1],"totalElements":[2,"total-elements"],"pageSize":[2,"page-size"],"rowHeight":[2,"row-height"],"tableHeight":[2,"table-height"],"defaultSort":[1,"default-sort"],"loadedPages":[32],"requestedPages":[32],"renderStart":[32],"renderEnd":[32],"colWidths":[32],"sortField":[32],"sortDir":[32],"init":[64],"setPage":[64]}]]],["mrd-boolean-field_16.cjs",[[2,"mrd-form",{"layout":[16],"locale":[1],"values":[16],"formValues":[32],"errors":[32],"submitted":[32],"setFieldValue":[64]},null,{"values":[{"valuesChanged":0}]}],[2,"mrd-field",{"item":[16],"locale":[1],"value":[16]}],[2,"mrd-boolean-field",{"name":[1],"label":[1],"value":[4],"required":[4],"disabled":[4],"locale":[1],"checked":[32]}],[2,"mrd-currency-field",{"name":[1],"label":[1],"value":[16],"required":[4],"disabled":[4],"locale":[1],"amountDisplay":[32],"currency":[32],"error":[32]}],[2,"mrd-date-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-datetime-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-email-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-file-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-hyperlink-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-image-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"previewUrl":[32],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-list-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"multiple":[4],"locale":[1],"listValues":[16],"error":[32],"selected":[32]}],[2,"mrd-number-field",{"name":[1],"label":[1],"value":[2],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"dataType":[1,"data-type"],"decimalPrecision":[2,"decimal-precision"],"displayValue":[32],"error":[32]}],[2,"mrd-relation-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"relatedClass":[1,"related-class"],"displayType":[1,"display-type"],"multiple":[4],"dropdownValues":[16],"value":[1],"searchQuery":[32],"searchResults":[32],"isLoading":[32],"selectedItems":[32],"showResults":[32],"error":[32],"highlightedIndex":[32],"setSearchResults":[64],"setLoading":[64]}],[2,"mrd-text-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-textarea-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32],"editorReady":[32]}],[2,"mrd-time-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-OvnIRO4Y.js');
3
+ var index = require('./index-BPj2cBXs.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["mrd-table.cjs",[[2,"mrd-table",{"columns":[16],"rows":[16],"locale":[1],"totalElements":[2,"total-elements"],"pageSize":[2,"page-size"],"rowHeight":[2,"row-height"],"tableHeight":[2,"table-height"],"defaultSort":[1,"default-sort"],"loadedPages":[32],"requestedPages":[32],"renderStart":[32],"renderEnd":[32],"colWidths":[32],"sortField":[32],"sortDir":[32],"init":[64],"setPage":[64]}]]],["mrd-boolean-field_16.cjs",[[2,"mrd-form",{"layout":[16],"locale":[1],"values":[16],"formValues":[32],"errors":[32],"submitted":[32],"setFieldValue":[64]}],[2,"mrd-field",{"item":[16],"locale":[1],"value":[16]}],[2,"mrd-boolean-field",{"name":[1],"label":[1],"value":[4],"required":[4],"disabled":[4],"locale":[1],"checked":[32]}],[2,"mrd-currency-field",{"name":[1],"label":[1],"value":[16],"required":[4],"disabled":[4],"locale":[1],"amountDisplay":[32],"currency":[32],"error":[32]}],[2,"mrd-date-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-datetime-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-email-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-file-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-hyperlink-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-image-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"previewUrl":[32],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-list-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"multiple":[4],"locale":[1],"listValues":[16],"error":[32],"selected":[32]}],[2,"mrd-number-field",{"name":[1],"label":[1],"value":[2],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"dataType":[1,"data-type"],"decimalPrecision":[2,"decimal-precision"],"displayValue":[32],"error":[32]}],[2,"mrd-relation-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"relatedClass":[1,"related-class"],"displayType":[1,"display-type"],"multiple":[4],"dropdownValues":[16],"value":[1],"searchQuery":[32],"searchResults":[32],"isLoading":[32],"selectedItems":[32],"showResults":[32],"error":[32],"highlightedIndex":[32],"setSearchResults":[64],"setLoading":[64]}],[2,"mrd-text-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-textarea-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32],"editorReady":[32]}],[2,"mrd-time-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}]]]], options);
22
+ return index.bootstrapLazy([["mrd-table.cjs",[[2,"mrd-table",{"columns":[16],"rows":[16],"locale":[1],"totalElements":[2,"total-elements"],"pageSize":[2,"page-size"],"rowHeight":[2,"row-height"],"tableHeight":[2,"table-height"],"defaultSort":[1,"default-sort"],"loadedPages":[32],"requestedPages":[32],"renderStart":[32],"renderEnd":[32],"colWidths":[32],"sortField":[32],"sortDir":[32],"init":[64],"setPage":[64]}]]],["mrd-boolean-field_16.cjs",[[2,"mrd-form",{"layout":[16],"locale":[1],"values":[16],"formValues":[32],"errors":[32],"submitted":[32],"setFieldValue":[64]},null,{"values":[{"valuesChanged":0}]}],[2,"mrd-field",{"item":[16],"locale":[1],"value":[16]}],[2,"mrd-boolean-field",{"name":[1],"label":[1],"value":[4],"required":[4],"disabled":[4],"locale":[1],"checked":[32]}],[2,"mrd-currency-field",{"name":[1],"label":[1],"value":[16],"required":[4],"disabled":[4],"locale":[1],"amountDisplay":[32],"currency":[32],"error":[32]}],[2,"mrd-date-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-datetime-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-email-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-file-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-hyperlink-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-image-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"accept":[1],"maxSize":[2,"max-size"],"previewUrl":[32],"fileName":[32],"isDragging":[32],"error":[32]}],[2,"mrd-list-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"multiple":[4],"locale":[1],"listValues":[16],"error":[32],"selected":[32]}],[2,"mrd-number-field",{"name":[1],"label":[1],"value":[2],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"dataType":[1,"data-type"],"decimalPrecision":[2,"decimal-precision"],"displayValue":[32],"error":[32]}],[2,"mrd-relation-field",{"name":[1],"label":[1],"required":[4],"disabled":[4],"locale":[1],"relatedClass":[1,"related-class"],"displayType":[1,"display-type"],"multiple":[4],"dropdownValues":[16],"value":[1],"searchQuery":[32],"searchResults":[32],"isLoading":[32],"selectedItems":[32],"showResults":[32],"error":[32],"highlightedIndex":[32],"setSearchResults":[64],"setLoading":[64]}],[2,"mrd-text-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}],[2,"mrd-textarea-field",{"name":[1],"label":[1],"value":[1],"placeholder":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32],"editorReady":[32]}],[2,"mrd-time-field",{"name":[1],"label":[1],"value":[1],"required":[4],"disabled":[4],"locale":[1],"error":[32]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-OvnIRO4Y.js');
3
+ var index = require('./index-BPj2cBXs.js');
4
4
  var index$1 = require('./index.cjs.js');
5
5
  var format = require('./format-CDw-zie_.js');
6
6
 
@@ -511,6 +511,13 @@ const MrdForm = class {
511
511
  var _a;
512
512
  this.formValues = Object.assign({}, ((_a = this.values) !== null && _a !== void 0 ? _a : {}));
513
513
  }
514
+ /** Sync formValues when the values prop is set from outside after mount
515
+ * (e.g. when pre-filling an existing record in edit mode). */
516
+ valuesChanged(newValues) {
517
+ this.formValues = Object.assign({}, (newValues !== null && newValues !== void 0 ? newValues : {}));
518
+ this.errors = {};
519
+ this.submitted = false;
520
+ }
514
521
  async setFieldValue(name, value) {
515
522
  this.formValues = Object.assign(Object.assign({}, this.formValues), { [name]: value });
516
523
  if (this.errors[name]) {
@@ -565,6 +572,11 @@ const MrdForm = class {
565
572
  const dir = this.locale.startsWith('ar') ? 'rtl' : 'ltr';
566
573
  return (index.h(index.Host, null, index.h("form", { class: "mrd-form", dir: dir, onSubmit: this.handleSubmit, noValidate: true }, this.layout.title && index.h("h2", { class: "mrd-form__title" }, this.layout.title), index.h("div", { class: "mrd-form__body" }, this.renderItems(this.layout.items)), index.h("div", { class: "mrd-form__footer" }, index.h("button", { type: "submit", class: "mrd-form__submit" }, t('submit', this.locale))))));
567
574
  }
575
+ static get watchers() { return {
576
+ "values": [{
577
+ "valuesChanged": 0
578
+ }]
579
+ }; }
568
580
  };
569
581
  MrdForm.style = mrdFormScss();
570
582
 
@@ -881,6 +893,7 @@ const MrdRelationField = class {
881
893
  this.displayType = index$1.ClientLayoutItemRelationDisplayType.SEARCH;
882
894
  this.multiple = false;
883
895
  this.dropdownValues = [];
896
+ /** Plain href string/array for normal use; pass { id, label } objects to pre-fill a loaded record. */
884
897
  this.value = null;
885
898
  this.searchQuery = '';
886
899
  this.searchResults = [];
@@ -1001,6 +1014,23 @@ const MrdRelationField = class {
1001
1014
  async setLoading(loading) {
1002
1015
  this.isLoading = loading;
1003
1016
  }
1017
+ componentWillLoad() {
1018
+ var _a;
1019
+ // Pre-fill selectedItems when value is passed as { id, label } objects
1020
+ // (e.g. when editing an existing record fetched from the API).
1021
+ if (!this.value)
1022
+ return;
1023
+ if (Array.isArray(this.value)) {
1024
+ if (this.value.length > 0 && typeof this.value[0] === 'object') {
1025
+ this.selectedItems = this.value;
1026
+ this.searchQuery = '';
1027
+ }
1028
+ }
1029
+ else if (typeof this.value === 'object') {
1030
+ this.selectedItems = [this.value];
1031
+ this.searchQuery = (_a = this.value.label) !== null && _a !== void 0 ? _a : '';
1032
+ }
1033
+ }
1004
1034
  render() {
1005
1035
  var _a, _b;
1006
1036
  const hasError = !!this.error;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-OvnIRO4Y.js');
3
+ var index = require('./index-BPj2cBXs.js');
4
4
  var format = require('./format-CDw-zie_.js');
5
5
 
6
6
  class CellRenderer {
@@ -60,7 +60,7 @@ class CellRenderer {
60
60
  }
61
61
  }
62
62
 
63
- const mrdTableScss = () => `.sc-mrd-table-h{display:block;width:100%}.mrd-table__scroll.sc-mrd-table{overflow-y:auto;overflow-x:auto;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow-anchor:none}.mrd-table.sc-mrd-table{overflow-x:auto}.mrd-table__table.sc-mrd-table{width:auto;min-width:100%;border-collapse:collapse;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-table__scroll.sc-mrd-table .mrd-table__table.sc-mrd-table{min-width:max-content}.mrd-table__header.sc-mrd-table{position:sticky;top:0;z-index:1;background:var(--mrd-color-white);text-align:left;padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:2px solid var(--mrd-border-color);color:var(--mrd-color-neutral-600);font-weight:var(--mrd-font-weight-medium);white-space:nowrap;font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em}.mrd-table__header--sortable.sc-mrd-table{cursor:pointer;user-select:none}.mrd-table__header--sortable.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-800)}.mrd-table__header--sorted-asc.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__header-label.sc-mrd-table{margin-right:var(--mrd-space-1)}.mrd-table__sort-icon.sc-mrd-table{font-size:0.65rem;opacity:0.4;vertical-align:middle}.mrd-table__header--sorted-asc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table{opacity:1;color:var(--mrd-color-primary)}.mrd-table__row.sc-mrd-table{border-bottom:1px solid var(--mrd-border-color)}.mrd-table__row.sc-mrd-table:hover{background:var(--mrd-color-neutral-200) !important}.mrd-table__spacer.sc-mrd-table{border:none}.mrd-table__spacer.sc-mrd-table td.sc-mrd-table{padding:0;border:none}.mrd-table__cell.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);vertical-align:top;white-space:nowrap}.mrd-table__cell--numeric.sc-mrd-table{text-align:right;font-variant-numeric:tabular-nums}.mrd-table__row--loading.sc-mrd-table{background:transparent}.mrd-table__cell--placeholder.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__placeholder-bar.sc-mrd-table{display:block;height:0.75rem;width:55%;border-radius:var(--mrd-border-radius-sm);background:linear-gradient( 90deg, var(--mrd-color-neutral-200) 25%, var(--mrd-color-neutral-100) 50%, var(--mrd-color-neutral-200) 75% );background-size:200% 100%;animation:mrd-shimmer 1.4s ease infinite}@keyframes mrd-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.mrd-table__empty.sc-mrd-table{padding:var(--mrd-space-4) var(--mrd-space-3);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center;margin:0}`;
63
+ const mrdTableScss = () => `.sc-mrd-table-h{display:block;width:100%}.mrd-table__scroll.sc-mrd-table{overflow-y:auto;overflow-x:auto;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow-anchor:none}.mrd-table.sc-mrd-table{overflow-x:auto}.mrd-table__table.sc-mrd-table{width:auto;min-width:100%;border-collapse:collapse;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-table__scroll.sc-mrd-table .mrd-table__table.sc-mrd-table{min-width:max-content}.mrd-table__header.sc-mrd-table{position:sticky;top:0;z-index:1;background:var(--mrd-color-white);text-align:left;padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:2px solid var(--mrd-border-color);color:var(--mrd-color-neutral-600);font-weight:var(--mrd-font-weight-medium);white-space:nowrap;font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em}.mrd-table__header--sortable.sc-mrd-table{cursor:pointer;user-select:none}.mrd-table__header--sortable.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-800)}.mrd-table__header--sorted-asc.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__header-label.sc-mrd-table{margin-right:var(--mrd-space-1)}.mrd-table__sort-icon.sc-mrd-table{font-size:0.65rem;opacity:0.4;vertical-align:middle}.mrd-table__header--sorted-asc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table{opacity:1;color:var(--mrd-color-primary)}.mrd-table__row.sc-mrd-table{border-bottom:1px solid var(--mrd-border-color)}.mrd-table__row.sc-mrd-table:hover{background:var(--mrd-color-neutral-200) !important}.mrd-table__row--clickable.sc-mrd-table{cursor:pointer}.mrd-table__spacer.sc-mrd-table{border:none}.mrd-table__spacer.sc-mrd-table td.sc-mrd-table{padding:0;border:none}.mrd-table__cell.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);vertical-align:top;white-space:nowrap}.mrd-table__cell--numeric.sc-mrd-table{text-align:right;font-variant-numeric:tabular-nums}.mrd-table__row--loading.sc-mrd-table{background:transparent}.mrd-table__cell--placeholder.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__placeholder-bar.sc-mrd-table{display:block;height:0.75rem;width:55%;border-radius:var(--mrd-border-radius-sm);background:linear-gradient( 90deg, var(--mrd-color-neutral-200) 25%, var(--mrd-color-neutral-100) 50%, var(--mrd-color-neutral-200) 75% );background-size:200% 100%;animation:mrd-shimmer 1.4s ease infinite}@keyframes mrd-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.mrd-table__empty.sc-mrd-table{padding:var(--mrd-space-4) var(--mrd-space-3);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center;margin:0}`;
64
64
 
65
65
  const BUFFER = 10;
66
66
  /** Wacht deze tijd (ms) na het laatste scroll-event voordat pagina's worden
@@ -70,6 +70,7 @@ const MrdTable = class {
70
70
  constructor(hostRef) {
71
71
  index.registerInstance(this, hostRef);
72
72
  this.mrdLoadPage = index.createEvent(this, "mrdLoadPage");
73
+ this.mrdRowClick = index.createEvent(this, "mrdRowClick");
73
74
  // ── Debounce internals (geen @State — triggert geen re-render) ─────────────
74
75
  /** Pagina's die wachten op debounce-flush. */
75
76
  this.pendingPages = new Set();
@@ -279,7 +280,7 @@ const MrdTable = class {
279
280
  const numericTypes = new Set(['INTEGER', 'DECIMAL', 'PERCENTAGE', 'CURRENCY']);
280
281
  // ── Non-paginated mode ──────────────────────────────────────────────────
281
282
  if (this.totalElements === 0) {
282
- return (index.h(index.Host, null, index.h("div", { class: "mrd-table" }, index.h("table", { class: "mrd-table__table" }, index.h("thead", null, index.h("tr", null, this.columns.map(col => (index.h("th", { class: "mrd-table__header" }, col.label))))), index.h("tbody", null, (_b = this.rows) === null || _b === void 0 ? void 0 : _b.map((row, i) => (index.h("tr", { class: "mrd-table__row", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' } }, this.columns.map(col => {
283
+ return (index.h(index.Host, null, index.h("div", { class: "mrd-table" }, index.h("table", { class: "mrd-table__table" }, index.h("thead", null, index.h("tr", null, this.columns.map(col => (index.h("th", { class: "mrd-table__header" }, col.label))))), index.h("tbody", null, (_b = this.rows) === null || _b === void 0 ? void 0 : _b.map((row, i) => (index.h("tr", { class: "mrd-table__row mrd-table__row--clickable", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }, onClick: () => this.mrdRowClick.emit(row) }, this.columns.map(col => {
283
284
  var _a;
284
285
  const value = CellRenderer.render(col, row, this.locale);
285
286
  const isNumeric = col.type === 'FIELD' && numericTypes.has((_a = col.dataType) !== null && _a !== void 0 ? _a : '');
@@ -298,7 +299,7 @@ const MrdTable = class {
298
299
  renderedRows.push(index.h("tr", { class: "mrd-table__row mrd-table__row--loading" }, index.h("td", { class: "mrd-table__cell--placeholder", colSpan: colCount }, index.h("span", { class: "mrd-table__placeholder-bar" }))));
299
300
  }
300
301
  else {
301
- renderedRows.push(index.h("tr", { class: "mrd-table__row", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' } }, this.columns.map(col => {
302
+ renderedRows.push(index.h("tr", { class: "mrd-table__row mrd-table__row--clickable", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }, onClick: () => this.mrdRowClick.emit(row) }, this.columns.map(col => {
302
303
  var _a;
303
304
  const value = CellRenderer.render(col, row, this.locale);
304
305
  const isNumeric = col.type === 'FIELD' && numericTypes.has((_a = col.dataType) !== null && _a !== void 0 ? _a : '');
@@ -31,6 +31,13 @@ export class MrdForm {
31
31
  var _a;
32
32
  this.formValues = Object.assign({}, ((_a = this.values) !== null && _a !== void 0 ? _a : {}));
33
33
  }
34
+ /** Sync formValues when the values prop is set from outside after mount
35
+ * (e.g. when pre-filling an existing record in edit mode). */
36
+ valuesChanged(newValues) {
37
+ this.formValues = Object.assign({}, (newValues !== null && newValues !== void 0 ? newValues : {}));
38
+ this.errors = {};
39
+ this.submitted = false;
40
+ }
34
41
  async setFieldValue(name, value) {
35
42
  this.formValues = Object.assign(Object.assign({}, this.formValues), { [name]: value });
36
43
  if (this.errors[name]) {
@@ -242,4 +249,10 @@ export class MrdForm {
242
249
  }
243
250
  };
244
251
  }
252
+ static get watchers() {
253
+ return [{
254
+ "propName": "values",
255
+ "methodName": "valuesChanged"
256
+ }];
257
+ }
245
258
  }
@@ -13,6 +13,7 @@ export class MrdRelationField {
13
13
  this.displayType = ClientLayoutItemRelationDisplayType.SEARCH;
14
14
  this.multiple = false;
15
15
  this.dropdownValues = [];
16
+ /** Plain href string/array for normal use; pass { id, label } objects to pre-fill a loaded record. */
16
17
  this.value = null;
17
18
  this.searchQuery = '';
18
19
  this.searchResults = [];
@@ -133,6 +134,23 @@ export class MrdRelationField {
133
134
  async setLoading(loading) {
134
135
  this.isLoading = loading;
135
136
  }
137
+ componentWillLoad() {
138
+ var _a;
139
+ // Pre-fill selectedItems when value is passed as { id, label } objects
140
+ // (e.g. when editing an existing record fetched from the API).
141
+ if (!this.value)
142
+ return;
143
+ if (Array.isArray(this.value)) {
144
+ if (this.value.length > 0 && typeof this.value[0] === 'object') {
145
+ this.selectedItems = this.value;
146
+ this.searchQuery = '';
147
+ }
148
+ }
149
+ else if (typeof this.value === 'object') {
150
+ this.selectedItems = [this.value];
151
+ this.searchQuery = (_a = this.value.label) !== null && _a !== void 0 ? _a : '';
152
+ }
153
+ }
136
154
  render() {
137
155
  var _a, _b;
138
156
  const hasError = !!this.error;
@@ -358,15 +376,22 @@ export class MrdRelationField {
358
376
  "type": "string",
359
377
  "mutable": false,
360
378
  "complexType": {
361
- "original": "string | string[] | null",
362
- "resolved": "null | string | string[]",
363
- "references": {}
379
+ "original": "string | string[] | RelationSearchResult | RelationSearchResult[] | null",
380
+ "resolved": "RelationSearchResult | RelationSearchResult[] | null | string | string[]",
381
+ "references": {
382
+ "RelationSearchResult": {
383
+ "location": "import",
384
+ "path": "../../types",
385
+ "id": "src/types/index.ts::RelationSearchResult",
386
+ "referenceLocation": "RelationSearchResult"
387
+ }
388
+ }
364
389
  },
365
390
  "required": false,
366
391
  "optional": false,
367
392
  "docs": {
368
393
  "tags": [],
369
- "text": ""
394
+ "text": "Plain href string/array for normal use; pass { id, label } objects to pre-fill a loaded record."
370
395
  },
371
396
  "getter": false,
372
397
  "setter": false,
@@ -215,7 +215,7 @@ export class MrdTable {
215
215
  const numericTypes = new Set(['INTEGER', 'DECIMAL', 'PERCENTAGE', 'CURRENCY']);
216
216
  // ── Non-paginated mode ──────────────────────────────────────────────────
217
217
  if (this.totalElements === 0) {
218
- return (h(Host, null, h("div", { class: "mrd-table" }, h("table", { class: "mrd-table__table" }, h("thead", null, h("tr", null, this.columns.map(col => (h("th", { class: "mrd-table__header" }, col.label))))), h("tbody", null, (_b = this.rows) === null || _b === void 0 ? void 0 : _b.map((row, i) => (h("tr", { class: "mrd-table__row", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' } }, this.columns.map(col => {
218
+ return (h(Host, null, h("div", { class: "mrd-table" }, h("table", { class: "mrd-table__table" }, h("thead", null, h("tr", null, this.columns.map(col => (h("th", { class: "mrd-table__header" }, col.label))))), h("tbody", null, (_b = this.rows) === null || _b === void 0 ? void 0 : _b.map((row, i) => (h("tr", { class: "mrd-table__row mrd-table__row--clickable", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }, onClick: () => this.mrdRowClick.emit(row) }, this.columns.map(col => {
219
219
  var _a;
220
220
  const value = CellRenderer.render(col, row, this.locale);
221
221
  const isNumeric = col.type === 'FIELD' && numericTypes.has((_a = col.dataType) !== null && _a !== void 0 ? _a : '');
@@ -234,7 +234,7 @@ export class MrdTable {
234
234
  renderedRows.push(h("tr", { class: "mrd-table__row mrd-table__row--loading" }, h("td", { class: "mrd-table__cell--placeholder", colSpan: colCount }, h("span", { class: "mrd-table__placeholder-bar" }))));
235
235
  }
236
236
  else {
237
- renderedRows.push(h("tr", { class: "mrd-table__row", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' } }, this.columns.map(col => {
237
+ renderedRows.push(h("tr", { class: "mrd-table__row mrd-table__row--clickable", style: { background: i % 2 === 0 ? '' : 'var(--mrd-color-neutral-100)' }, onClick: () => this.mrdRowClick.emit(row) }, this.columns.map(col => {
238
238
  var _a;
239
239
  const value = CellRenderer.render(col, row, this.locale);
240
240
  const isNumeric = col.type === 'FIELD' && numericTypes.has((_a = col.dataType) !== null && _a !== void 0 ? _a : '');
@@ -462,6 +462,26 @@ export class MrdTable {
462
462
  "resolved": "{ page: number; sort: string; }",
463
463
  "references": {}
464
464
  }
465
+ }, {
466
+ "method": "mrdRowClick",
467
+ "name": "mrdRowClick",
468
+ "bubbles": true,
469
+ "cancelable": true,
470
+ "composed": true,
471
+ "docs": {
472
+ "tags": [],
473
+ "text": "Fired when a data row is clicked. Detail is the full row object including _links."
474
+ },
475
+ "complexType": {
476
+ "original": "Record<string, any>",
477
+ "resolved": "any | string",
478
+ "references": {
479
+ "Record": {
480
+ "location": "global",
481
+ "id": "global::Record"
482
+ }
483
+ }
484
+ }
465
485
  }];
466
486
  }
467
487
  static get methods() {
@@ -96,6 +96,10 @@
96
96
  background: var(--mrd-color-neutral-200) !important;
97
97
  }
98
98
 
99
+ .mrd-table__row--clickable {
100
+ cursor: pointer;
101
+ }
102
+
99
103
  /* ── Spacer rows (virtual scroll padding above/below render window) ─────── */
100
104
  .mrd-table__spacer {
101
105
  border: none;
@@ -1 +1 @@
1
- import{proxyCustomElement as r,HTMLElement as e,createEvent as m,h as d,Host as o,transformTag as t}from"@stencil/core/internal/client";import{C as i}from"./client-layout.js";import{t as s}from"./i18n.js";import{v as a}from"./validation.js";import{d as l}from"./mrd-boolean-field2.js";import{d as f}from"./mrd-currency-field2.js";import{d as n}from"./mrd-date-field2.js";import{d as c}from"./mrd-datetime-field2.js";import{d as u}from"./mrd-email-field2.js";import{d as h}from"./mrd-field2.js";import{d as p}from"./mrd-file-field2.js";import{d as v}from"./mrd-hyperlink-field2.js";import{d as b}from"./mrd-image-field2.js";import{d as _}from"./mrd-list-field2.js";import{d as g}from"./mrd-number-field2.js";import{d as y}from"./mrd-relation-field2.js";import{d as j}from"./mrd-text-field2.js";import{d as x}from"./mrd-textarea-field2.js";import{d as k}from"./mrd-time-field2.js";const E=r(class extends e{constructor(r){super(),!1!==r&&this.__registerHost(),this.mrdSubmit=m(this,"mrdSubmit",7),this.mrdSearch=m(this,"mrdSearch",7),this.locale=navigator.language,this.values={},this.formValues={},this.errors={},this.submitted=!1,this.handleFieldChange=r=>{const{name:e,value:m}=r.detail;this.formValues=Object.assign(Object.assign({},this.formValues),{[e]:m}),this.errors[e]&&(this.errors=Object.assign(Object.assign({},this.errors),{[e]:""}))},this.handleSearch=r=>{this.mrdSearch.emit(r.detail)},this.handleSubmit=r=>{r.preventDefault(),this.submitted=!0,this.validate()&&this.mrdSubmit.emit(Object.assign({},this.formValues))}}componentWillLoad(){var r;this.formValues=Object.assign({},null!==(r=this.values)&&void 0!==r?r:{})}async setFieldValue(r,e){this.formValues=Object.assign(Object.assign({},this.formValues),{[r]:e}),this.errors[r]&&(this.errors=Object.assign(Object.assign({},this.errors),{[r]:""}))}collectFields(r){const e=[];for(const m of r)m.type!==i.FIELD&&m.type!==i.RELATION||e.push(m),m.items&&e.push(...this.collectFields(m.items));return e}validate(){var r,e,m;const d={},o=this.collectFields(null!==(e=null===(r=this.layout)||void 0===r?void 0:r.items)&&void 0!==e?e:[]);for(const r of o){const e=null!==(m=r.field)&&void 0!==m?m:r.relation;e&&e.required&&!a(this.formValues[e.name])&&(d[e.name]=s("required",this.locale))}return this.errors=d,0===Object.keys(d).length}renderItems(r){return r.map((r=>{var e,m,o,t;if(r.type===i.SECTION)return d("fieldset",{class:"mrd-form__section"},r.label&&d("legend",{class:"mrd-form__section-legend"},r.label),d("div",{class:"mrd-form__section-body"},r.items&&this.renderItems(r.items)));if(r.type===i.GROUP)return d("div",{class:"mrd-form__group"},r.label&&d("div",{class:"mrd-form__group-label"},r.label),d("div",{class:"mrd-form__group-body"},r.items&&this.renderItems(r.items)));const s=null!==(t=null!==(m=null===(e=r.field)||void 0===e?void 0:e.name)&&void 0!==m?m:null===(o=r.relation)||void 0===o?void 0:o.name)&&void 0!==t?t:"";return d("div",{class:"mrd-form__field"},d("mrd-field",{item:r,locale:this.locale,value:this.formValues[s],onMrdChange:this.handleFieldChange,onMrdBlur:this.handleFieldChange,onMrdSearch:this.handleSearch}),this.errors[s]&&d("span",{class:"mrd-form__field-error"},this.errors[s]))}))}render(){if(!this.layout)return d(o,null);const r=this.locale.startsWith("ar")?"rtl":"ltr";return d(o,null,d("form",{class:"mrd-form",dir:r,onSubmit:this.handleSubmit,noValidate:!0},this.layout.title&&d("h2",{class:"mrd-form__title"},this.layout.title),d("div",{class:"mrd-form__body"},this.renderItems(this.layout.items)),d("div",{class:"mrd-form__footer"},d("button",{type:"submit",class:"mrd-form__submit"},s("submit",this.locale)))))}static get style(){return".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}.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)}"}},[2,"mrd-form",{layout:[16],locale:[1],values:[16],formValues:[32],errors:[32],submitted:[32],setFieldValue:[64]}]),w=E,O=function(){"undefined"!=typeof customElements&&["mrd-form","mrd-boolean-field","mrd-currency-field","mrd-date-field","mrd-datetime-field","mrd-email-field","mrd-field","mrd-file-field","mrd-hyperlink-field","mrd-image-field","mrd-list-field","mrd-number-field","mrd-relation-field","mrd-text-field","mrd-textarea-field","mrd-time-field"].forEach((r=>{switch(r){case"mrd-form":customElements.get(t(r))||customElements.define(t(r),E);break;case"mrd-boolean-field":customElements.get(t(r))||l();break;case"mrd-currency-field":customElements.get(t(r))||f();break;case"mrd-date-field":customElements.get(t(r))||n();break;case"mrd-datetime-field":customElements.get(t(r))||c();break;case"mrd-email-field":customElements.get(t(r))||u();break;case"mrd-field":customElements.get(t(r))||h();break;case"mrd-file-field":customElements.get(t(r))||p();break;case"mrd-hyperlink-field":customElements.get(t(r))||v();break;case"mrd-image-field":customElements.get(t(r))||b();break;case"mrd-list-field":customElements.get(t(r))||_();break;case"mrd-number-field":customElements.get(t(r))||g();break;case"mrd-relation-field":customElements.get(t(r))||y();break;case"mrd-text-field":customElements.get(t(r))||j();break;case"mrd-textarea-field":customElements.get(t(r))||x();break;case"mrd-time-field":customElements.get(t(r))||k()}}))};export{w as MrdForm,O as defineCustomElement}
1
+ import{proxyCustomElement as r,HTMLElement as e,createEvent as m,h as d,Host as o,transformTag as t}from"@stencil/core/internal/client";import{C as i}from"./client-layout.js";import{t as s}from"./i18n.js";import{v as a}from"./validation.js";import{d as l}from"./mrd-boolean-field2.js";import{d as f}from"./mrd-currency-field2.js";import{d as n}from"./mrd-date-field2.js";import{d as c}from"./mrd-datetime-field2.js";import{d as u}from"./mrd-email-field2.js";import{d as h}from"./mrd-field2.js";import{d as v}from"./mrd-file-field2.js";import{d as p}from"./mrd-hyperlink-field2.js";import{d as b}from"./mrd-image-field2.js";import{d as _}from"./mrd-list-field2.js";import{d as g}from"./mrd-number-field2.js";import{d as y}from"./mrd-relation-field2.js";import{d as j}from"./mrd-text-field2.js";import{d as x}from"./mrd-textarea-field2.js";import{d as k}from"./mrd-time-field2.js";const E=r(class extends e{constructor(r){super(),!1!==r&&this.__registerHost(),this.mrdSubmit=m(this,"mrdSubmit",7),this.mrdSearch=m(this,"mrdSearch",7),this.locale=navigator.language,this.values={},this.formValues={},this.errors={},this.submitted=!1,this.handleFieldChange=r=>{const{name:e,value:m}=r.detail;this.formValues=Object.assign(Object.assign({},this.formValues),{[e]:m}),this.errors[e]&&(this.errors=Object.assign(Object.assign({},this.errors),{[e]:""}))},this.handleSearch=r=>{this.mrdSearch.emit(r.detail)},this.handleSubmit=r=>{r.preventDefault(),this.submitted=!0,this.validate()&&this.mrdSubmit.emit(Object.assign({},this.formValues))}}componentWillLoad(){var r;this.formValues=Object.assign({},null!==(r=this.values)&&void 0!==r?r:{})}valuesChanged(r){this.formValues=Object.assign({},null!=r?r:{}),this.errors={},this.submitted=!1}async setFieldValue(r,e){this.formValues=Object.assign(Object.assign({},this.formValues),{[r]:e}),this.errors[r]&&(this.errors=Object.assign(Object.assign({},this.errors),{[r]:""}))}collectFields(r){const e=[];for(const m of r)m.type!==i.FIELD&&m.type!==i.RELATION||e.push(m),m.items&&e.push(...this.collectFields(m.items));return e}validate(){var r,e,m;const d={},o=this.collectFields(null!==(e=null===(r=this.layout)||void 0===r?void 0:r.items)&&void 0!==e?e:[]);for(const r of o){const e=null!==(m=r.field)&&void 0!==m?m:r.relation;e&&e.required&&!a(this.formValues[e.name])&&(d[e.name]=s("required",this.locale))}return this.errors=d,0===Object.keys(d).length}renderItems(r){return r.map((r=>{var e,m,o,t;if(r.type===i.SECTION)return d("fieldset",{class:"mrd-form__section"},r.label&&d("legend",{class:"mrd-form__section-legend"},r.label),d("div",{class:"mrd-form__section-body"},r.items&&this.renderItems(r.items)));if(r.type===i.GROUP)return d("div",{class:"mrd-form__group"},r.label&&d("div",{class:"mrd-form__group-label"},r.label),d("div",{class:"mrd-form__group-body"},r.items&&this.renderItems(r.items)));const s=null!==(t=null!==(m=null===(e=r.field)||void 0===e?void 0:e.name)&&void 0!==m?m:null===(o=r.relation)||void 0===o?void 0:o.name)&&void 0!==t?t:"";return d("div",{class:"mrd-form__field"},d("mrd-field",{item:r,locale:this.locale,value:this.formValues[s],onMrdChange:this.handleFieldChange,onMrdBlur:this.handleFieldChange,onMrdSearch:this.handleSearch}),this.errors[s]&&d("span",{class:"mrd-form__field-error"},this.errors[s]))}))}render(){if(!this.layout)return d(o,null);const r=this.locale.startsWith("ar")?"rtl":"ltr";return d(o,null,d("form",{class:"mrd-form",dir:r,onSubmit:this.handleSubmit,noValidate:!0},this.layout.title&&d("h2",{class:"mrd-form__title"},this.layout.title),d("div",{class:"mrd-form__body"},this.renderItems(this.layout.items)),d("div",{class:"mrd-form__footer"},d("button",{type:"submit",class:"mrd-form__submit"},s("submit",this.locale)))))}static get watchers(){return{values:[{valuesChanged:0}]}}static get style(){return".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}.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)}"}},[2,"mrd-form",{layout:[16],locale:[1],values:[16],formValues:[32],errors:[32],submitted:[32],setFieldValue:[64]},void 0,{values:[{valuesChanged:0}]}]),w=E,O=function(){"undefined"!=typeof customElements&&["mrd-form","mrd-boolean-field","mrd-currency-field","mrd-date-field","mrd-datetime-field","mrd-email-field","mrd-field","mrd-file-field","mrd-hyperlink-field","mrd-image-field","mrd-list-field","mrd-number-field","mrd-relation-field","mrd-text-field","mrd-textarea-field","mrd-time-field"].forEach((r=>{switch(r){case"mrd-form":customElements.get(t(r))||customElements.define(t(r),E);break;case"mrd-boolean-field":customElements.get(t(r))||l();break;case"mrd-currency-field":customElements.get(t(r))||f();break;case"mrd-date-field":customElements.get(t(r))||n();break;case"mrd-datetime-field":customElements.get(t(r))||c();break;case"mrd-email-field":customElements.get(t(r))||u();break;case"mrd-field":customElements.get(t(r))||h();break;case"mrd-file-field":customElements.get(t(r))||v();break;case"mrd-hyperlink-field":customElements.get(t(r))||p();break;case"mrd-image-field":customElements.get(t(r))||b();break;case"mrd-list-field":customElements.get(t(r))||_();break;case"mrd-number-field":customElements.get(t(r))||g();break;case"mrd-relation-field":customElements.get(t(r))||y();break;case"mrd-text-field":customElements.get(t(r))||j();break;case"mrd-textarea-field":customElements.get(t(r))||x();break;case"mrd-time-field":customElements.get(t(r))||k()}}))};export{w as MrdForm,O as defineCustomElement}
@@ -1 +1 @@
1
- import{proxyCustomElement as r,HTMLElement as e,createEvent as i,h as t,Host as o,transformTag as l}from"@stencil/core/internal/client";import{t as d}from"./i18n.js";import{v as a}from"./validation.js";import{b as s}from"./client-layout.js";const n=r(class extends e{constructor(r){super(),!1!==r&&this.__registerHost(),this.mrdChange=i(this,"mrdChange",7),this.mrdBlur=i(this,"mrdBlur",7),this.mrdSearch=i(this,"mrdSearch",7),this.name="",this.label="",this.required=!1,this.disabled=!1,this.locale=navigator.language,this.relatedClass="",this.displayType=s.SEARCH,this.multiple=!1,this.dropdownValues=[],this.value=null,this.searchQuery="",this.searchResults=[],this.isLoading=!1,this.selectedItems=[],this.showResults=!1,this.error="",this.highlightedIndex=-1,this.searchDebounce=null,this.handleKeyDown=r=>{this.showResults&&0!==this.searchResults.length?"ArrowDown"===r.key?(r.preventDefault(),this.highlightedIndex=Math.min(this.highlightedIndex+1,this.searchResults.length-1)):"ArrowUp"===r.key?(r.preventDefault(),this.highlightedIndex=Math.max(this.highlightedIndex-1,0)):"Enter"===r.key?(r.preventDefault(),this.highlightedIndex>=0&&this.handleResultSelect(this.searchResults[this.highlightedIndex])):"Escape"===r.key&&(this.showResults=!1,this.highlightedIndex=-1):"Escape"===r.key&&(this.showResults=!1,this.highlightedIndex=-1)},this.clearSelection=()=>{this.selectedItems=[],this.searchQuery="",this.searchResults=[],this.showResults=!1,this.highlightedIndex=-1,this.mrdChange.emit({name:this.name,value:this.multiple?[]:null})},this.handleSearchInput=r=>{const e=r.target.value;this.searchQuery=e,this.searchDebounce&&clearTimeout(this.searchDebounce),e.trim().length>=2?(this.isLoading=!0,this.showResults=!0,this.searchDebounce=setTimeout((()=>{this.mrdSearch.emit({query:e,relatedClass:this.relatedClass})}),300)):(this.searchResults=[],this.showResults=!1,this.isLoading=!1)},this.handleResultSelect=r=>{if(this.multiple){this.selectedItems.find((e=>e.id===r.id))||(this.selectedItems=[...this.selectedItems,r]),this.searchQuery="",this.searchResults=[],this.showResults=!1;const e=this.selectedItems.map((r=>r.id));this.mrdChange.emit({name:this.name,value:e})}else this.selectedItems=[r],this.searchQuery=r.label,this.showResults=!1,this.mrdChange.emit({name:this.name,value:r.id});this.error=this.required&&!a(this.selectedItems)?d("required",this.locale):""},this.handleRemoveSelected=r=>{this.selectedItems=this.selectedItems.filter((e=>e.id!==r));const e=this.selectedItems.map((r=>r.id));this.mrdChange.emit({name:this.name,value:this.multiple?e:null})},this.handleDropdownChange=r=>{const e=r.target.value;this.error=this.required&&!a(e)?d("required",this.locale):"",this.mrdChange.emit({name:this.name,value:e})},this.handleBlur=()=>{var r,e;setTimeout((()=>{this.showResults=!1,this.highlightedIndex=-1}),200);const i=this.multiple?this.selectedItems.map((r=>r.id)):null!==(e=null===(r=this.selectedItems[0])||void 0===r?void 0:r.id)&&void 0!==e?e:null;this.mrdBlur.emit({name:this.name,value:i})}}async setSearchResults(r){this.searchResults=r,this.isLoading=!1,this.showResults=!0,this.highlightedIndex=-1}async setLoading(r){this.isLoading=r}render(){var r,e;const i=!!this.error;if(this.displayType===s.DROPDOWN){const l=Array.isArray(this.value)?null!==(r=this.value[0])&&void 0!==r?r:"":null!==(e=this.value)&&void 0!==e?e:"";return t(o,null,t("div",{class:"mrd-relation-field"},this.label&&t("label",{class:"mrd-relation-field__label"+(this.required?" mrd-relation-field__label--required":"")},this.label),t("select",{class:"mrd-relation-field__select"+(i?" mrd-relation-field__select--error":""),name:this.name,required:this.required,disabled:this.disabled,onChange:this.handleDropdownChange},t("option",{value:""},d("select_placeholder",this.locale)),this.dropdownValues.map((r=>t("option",{key:r.value,value:r.value,selected:r.value===l},r.label)))),i&&t("span",{class:"mrd-relation-field__error"},this.error)))}const l=this.label&&t("label",{class:"mrd-relation-field__label"+(this.required?" mrd-relation-field__label--required":"")},this.label);return t(o,null,!this.multiple&&this.selectedItems.length>0?t("div",{class:"mrd-relation-field"},l,t("div",{class:"mrd-relation-field__selected-value"+(i?" mrd-relation-field__selected-value--error":"")},t("span",{class:"mrd-relation-field__selected-name"},this.selectedItems[0].label),t("button",{type:"button",class:"mrd-relation-field__selected-clear",onClick:this.clearSelection,"aria-label":d("remove",this.locale)},"✕")),i&&t("span",{class:"mrd-relation-field__error"},this.error)):t("div",{class:"mrd-relation-field"},l,this.multiple&&this.selectedItems.length>0&&t("div",{class:"mrd-relation-field__tags"},this.selectedItems.map((r=>t("span",{key:r.id,class:"mrd-relation-field__tag"},r.label,t("button",{type:"button",class:"mrd-relation-field__tag-remove",onClick:()=>this.handleRemoveSelected(r.id),"aria-label":d("remove",this.locale)},"✕"))))),t("div",{class:"mrd-relation-field__search-wrapper"},t("input",{class:"mrd-relation-field__search"+(i?" mrd-relation-field__search--error":""),type:"text",value:this.searchQuery,placeholder:d("search_placeholder",this.locale),disabled:this.disabled,onInput:this.handleSearchInput,onKeyDown:this.handleKeyDown,onBlur:this.handleBlur}),this.isLoading&&t("span",{class:"mrd-relation-field__spinner","aria-label":d("loading",this.locale)})),this.showResults&&t("div",{class:"mrd-relation-field__results"},0!==this.searchResults.length||this.isLoading?this.searchResults.map(((r,e)=>t("div",{key:r.id,class:"mrd-relation-field__result-item"+(e===this.highlightedIndex?" mrd-relation-field__result-item--highlighted":""),onMouseDown:()=>this.handleResultSelect(r)},t("span",{class:"mrd-relation-field__result-label"},r.label),r.description&&t("span",{class:"mrd-relation-field__result-desc"},r.description)))):t("div",{class:"mrd-relation-field__no-results"},d("no_results",this.locale))),i&&t("span",{class:"mrd-relation-field__error"},this.error)))}static get style(){return".sc-mrd-relation-field-h{display:block}.mrd-relation-field.sc-mrd-relation-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%;position:relative}.mrd-relation-field__label.sc-mrd-relation-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-relation-field__label--required.sc-mrd-relation-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-relation-field__select.sc-mrd-relation-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);padding-right:calc(var(--mrd-input-padding-x) + 1.5rem);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right var(--mrd-space-3) center;border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);outline:none;appearance:none;cursor:pointer;box-sizing:border-box}.mrd-relation-field__select.sc-mrd-relation-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-relation-field__select.sc-mrd-relation-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-relation-field__select--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error)}.mrd-relation-field__select--error.sc-mrd-relation-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-relation-field__tags.sc-mrd-relation-field{display:flex;flex-wrap:wrap;gap:var(--mrd-space-1);margin-bottom:var(--mrd-space-1)}.mrd-relation-field__tag.sc-mrd-relation-field{display:inline-flex;align-items:center;gap:var(--mrd-space-1);padding:var(--mrd-space-1) var(--mrd-space-2);background-color:var(--mrd-color-primary-light);color:var(--mrd-color-primary-dark);border-radius:var(--mrd-border-radius-full);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium)}.mrd-relation-field__tag-remove.sc-mrd-relation-field{background:none;border:none;cursor:pointer;color:var(--mrd-color-primary-dark);font-size:var(--mrd-font-size-xs);padding:0;line-height:1;opacity:0.7}.mrd-relation-field__tag-remove.sc-mrd-relation-field:hover{opacity:1}.mrd-relation-field__search-wrapper.sc-mrd-relation-field{position:relative;display:flex;align-items:center}.mrd-relation-field__search.sc-mrd-relation-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);outline:none;appearance:none;box-sizing:border-box}.mrd-relation-field__search.sc-mrd-relation-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-relation-field__search.sc-mrd-relation-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-relation-field__search.sc-mrd-relation-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-relation-field__search--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error)}.mrd-relation-field__search--error.sc-mrd-relation-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-relation-field__spinner.sc-mrd-relation-field{position:absolute;right:var(--mrd-space-3);width:16px;height:16px;border:2px solid var(--mrd-color-neutral-200);border-top-color:var(--mrd-color-primary);border-radius:50%;animation:mrd-spin 0.7s linear infinite}@keyframes mrd-spin{to{transform:rotate(360deg)}}.mrd-relation-field__results.sc-mrd-relation-field{position:absolute;top:calc(100% + var(--mrd-space-1));left:0;right:0;background-color:var(--mrd-color-white);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md);z-index:var(--mrd-z-dropdown);max-height:240px;overflow-y:auto}.mrd-relation-field__result-item.sc-mrd-relation-field{display:flex;flex-direction:column;padding:var(--mrd-space-2) var(--mrd-space-3);cursor:pointer;transition:background-color var(--mrd-transition-fast)}.mrd-relation-field__result-item.sc-mrd-relation-field:hover{background-color:var(--mrd-color-neutral-50)}.mrd-relation-field__result-item.sc-mrd-relation-field:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-relation-field__result-label.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-800);font-weight:var(--mrd-font-weight-medium)}.mrd-relation-field__result-desc.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-top:var(--mrd-space-1)}.mrd-relation-field__result-item--highlighted.sc-mrd-relation-field{background-color:var(--mrd-color-primary-light)}.mrd-relation-field__selected-value.sc-mrd-relation-field{display:flex;align-items:center;gap:var(--mrd-space-2);height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);background-color:var(--mrd-color-primary-light);border:var(--mrd-border-width) solid var(--mrd-color-primary);border-radius:var(--mrd-border-radius);box-sizing:border-box}.mrd-relation-field__selected-value--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error);background-color:var(--mrd-color-danger-light)}.mrd-relation-field__selected-name.sc-mrd-relation-field{flex:1;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-primary-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mrd-relation-field__selected-clear.sc-mrd-relation-field{flex-shrink:0;background:none;border:none;cursor:pointer;color:var(--mrd-color-primary-dark);font-size:var(--mrd-font-size-sm);padding:0;line-height:1;opacity:0.6;transition:opacity var(--mrd-transition-fast)}.mrd-relation-field__selected-clear.sc-mrd-relation-field:hover{opacity:1}.mrd-relation-field__no-results.sc-mrd-relation-field{padding:var(--mrd-space-4);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-500);text-align:center}.mrd-relation-field__error.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}"}},[2,"mrd-relation-field",{name:[1],label:[1],required:[4],disabled:[4],locale:[1],relatedClass:[1,"related-class"],displayType:[1,"display-type"],multiple:[4],dropdownValues:[16],value:[1],searchQuery:[32],searchResults:[32],isLoading:[32],selectedItems:[32],showResults:[32],error:[32],highlightedIndex:[32],setSearchResults:[64],setLoading:[64]}]);function m(){"undefined"!=typeof customElements&&["mrd-relation-field"].forEach((r=>{"mrd-relation-field"===r&&(customElements.get(l(r))||customElements.define(l(r),n))}))}export{n as M,m as d}
1
+ import{proxyCustomElement as r,HTMLElement as e,createEvent as i,h as t,Host as o,transformTag as l}from"@stencil/core/internal/client";import{t as d}from"./i18n.js";import{v as a}from"./validation.js";import{b as s}from"./client-layout.js";const n=r(class extends e{constructor(r){super(),!1!==r&&this.__registerHost(),this.mrdChange=i(this,"mrdChange",7),this.mrdBlur=i(this,"mrdBlur",7),this.mrdSearch=i(this,"mrdSearch",7),this.name="",this.label="",this.required=!1,this.disabled=!1,this.locale=navigator.language,this.relatedClass="",this.displayType=s.SEARCH,this.multiple=!1,this.dropdownValues=[],this.value=null,this.searchQuery="",this.searchResults=[],this.isLoading=!1,this.selectedItems=[],this.showResults=!1,this.error="",this.highlightedIndex=-1,this.searchDebounce=null,this.handleKeyDown=r=>{this.showResults&&0!==this.searchResults.length?"ArrowDown"===r.key?(r.preventDefault(),this.highlightedIndex=Math.min(this.highlightedIndex+1,this.searchResults.length-1)):"ArrowUp"===r.key?(r.preventDefault(),this.highlightedIndex=Math.max(this.highlightedIndex-1,0)):"Enter"===r.key?(r.preventDefault(),this.highlightedIndex>=0&&this.handleResultSelect(this.searchResults[this.highlightedIndex])):"Escape"===r.key&&(this.showResults=!1,this.highlightedIndex=-1):"Escape"===r.key&&(this.showResults=!1,this.highlightedIndex=-1)},this.clearSelection=()=>{this.selectedItems=[],this.searchQuery="",this.searchResults=[],this.showResults=!1,this.highlightedIndex=-1,this.mrdChange.emit({name:this.name,value:this.multiple?[]:null})},this.handleSearchInput=r=>{const e=r.target.value;this.searchQuery=e,this.searchDebounce&&clearTimeout(this.searchDebounce),e.trim().length>=2?(this.isLoading=!0,this.showResults=!0,this.searchDebounce=setTimeout((()=>{this.mrdSearch.emit({query:e,relatedClass:this.relatedClass})}),300)):(this.searchResults=[],this.showResults=!1,this.isLoading=!1)},this.handleResultSelect=r=>{if(this.multiple){this.selectedItems.find((e=>e.id===r.id))||(this.selectedItems=[...this.selectedItems,r]),this.searchQuery="",this.searchResults=[],this.showResults=!1;const e=this.selectedItems.map((r=>r.id));this.mrdChange.emit({name:this.name,value:e})}else this.selectedItems=[r],this.searchQuery=r.label,this.showResults=!1,this.mrdChange.emit({name:this.name,value:r.id});this.error=this.required&&!a(this.selectedItems)?d("required",this.locale):""},this.handleRemoveSelected=r=>{this.selectedItems=this.selectedItems.filter((e=>e.id!==r));const e=this.selectedItems.map((r=>r.id));this.mrdChange.emit({name:this.name,value:this.multiple?e:null})},this.handleDropdownChange=r=>{const e=r.target.value;this.error=this.required&&!a(e)?d("required",this.locale):"",this.mrdChange.emit({name:this.name,value:e})},this.handleBlur=()=>{var r,e;setTimeout((()=>{this.showResults=!1,this.highlightedIndex=-1}),200);const i=this.multiple?this.selectedItems.map((r=>r.id)):null!==(e=null===(r=this.selectedItems[0])||void 0===r?void 0:r.id)&&void 0!==e?e:null;this.mrdBlur.emit({name:this.name,value:i})}}async setSearchResults(r){this.searchResults=r,this.isLoading=!1,this.showResults=!0,this.highlightedIndex=-1}async setLoading(r){this.isLoading=r}componentWillLoad(){var r;this.value&&(Array.isArray(this.value)?this.value.length>0&&"object"==typeof this.value[0]&&(this.selectedItems=this.value,this.searchQuery=""):"object"==typeof this.value&&(this.selectedItems=[this.value],this.searchQuery=null!==(r=this.value.label)&&void 0!==r?r:""))}render(){var r,e;const i=!!this.error;if(this.displayType===s.DROPDOWN){const l=Array.isArray(this.value)?null!==(r=this.value[0])&&void 0!==r?r:"":null!==(e=this.value)&&void 0!==e?e:"";return t(o,null,t("div",{class:"mrd-relation-field"},this.label&&t("label",{class:"mrd-relation-field__label"+(this.required?" mrd-relation-field__label--required":"")},this.label),t("select",{class:"mrd-relation-field__select"+(i?" mrd-relation-field__select--error":""),name:this.name,required:this.required,disabled:this.disabled,onChange:this.handleDropdownChange},t("option",{value:""},d("select_placeholder",this.locale)),this.dropdownValues.map((r=>t("option",{key:r.value,value:r.value,selected:r.value===l},r.label)))),i&&t("span",{class:"mrd-relation-field__error"},this.error)))}const l=this.label&&t("label",{class:"mrd-relation-field__label"+(this.required?" mrd-relation-field__label--required":"")},this.label);return t(o,null,!this.multiple&&this.selectedItems.length>0?t("div",{class:"mrd-relation-field"},l,t("div",{class:"mrd-relation-field__selected-value"+(i?" mrd-relation-field__selected-value--error":"")},t("span",{class:"mrd-relation-field__selected-name"},this.selectedItems[0].label),t("button",{type:"button",class:"mrd-relation-field__selected-clear",onClick:this.clearSelection,"aria-label":d("remove",this.locale)},"✕")),i&&t("span",{class:"mrd-relation-field__error"},this.error)):t("div",{class:"mrd-relation-field"},l,this.multiple&&this.selectedItems.length>0&&t("div",{class:"mrd-relation-field__tags"},this.selectedItems.map((r=>t("span",{key:r.id,class:"mrd-relation-field__tag"},r.label,t("button",{type:"button",class:"mrd-relation-field__tag-remove",onClick:()=>this.handleRemoveSelected(r.id),"aria-label":d("remove",this.locale)},"✕"))))),t("div",{class:"mrd-relation-field__search-wrapper"},t("input",{class:"mrd-relation-field__search"+(i?" mrd-relation-field__search--error":""),type:"text",value:this.searchQuery,placeholder:d("search_placeholder",this.locale),disabled:this.disabled,onInput:this.handleSearchInput,onKeyDown:this.handleKeyDown,onBlur:this.handleBlur}),this.isLoading&&t("span",{class:"mrd-relation-field__spinner","aria-label":d("loading",this.locale)})),this.showResults&&t("div",{class:"mrd-relation-field__results"},0!==this.searchResults.length||this.isLoading?this.searchResults.map(((r,e)=>t("div",{key:r.id,class:"mrd-relation-field__result-item"+(e===this.highlightedIndex?" mrd-relation-field__result-item--highlighted":""),onMouseDown:()=>this.handleResultSelect(r)},t("span",{class:"mrd-relation-field__result-label"},r.label),r.description&&t("span",{class:"mrd-relation-field__result-desc"},r.description)))):t("div",{class:"mrd-relation-field__no-results"},d("no_results",this.locale))),i&&t("span",{class:"mrd-relation-field__error"},this.error)))}static get style(){return".sc-mrd-relation-field-h{display:block}.mrd-relation-field.sc-mrd-relation-field{display:flex;flex-direction:column;gap:var(--mrd-space-1);width:100%;position:relative}.mrd-relation-field__label.sc-mrd-relation-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-relation-field__label--required.sc-mrd-relation-field::after{content:' *';color:var(--mrd-color-danger)}.mrd-relation-field__select.sc-mrd-relation-field{display:block;width:100%;height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);padding-right:calc(var(--mrd-input-padding-x) + 1.5rem);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-input-color);background-color:var(--mrd-input-bg);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right var(--mrd-space-3) center;border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);outline:none;appearance:none;cursor:pointer;box-sizing:border-box}.mrd-relation-field__select.sc-mrd-relation-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-relation-field__select.sc-mrd-relation-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-relation-field__select--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error)}.mrd-relation-field__select--error.sc-mrd-relation-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-relation-field__tags.sc-mrd-relation-field{display:flex;flex-wrap:wrap;gap:var(--mrd-space-1);margin-bottom:var(--mrd-space-1)}.mrd-relation-field__tag.sc-mrd-relation-field{display:inline-flex;align-items:center;gap:var(--mrd-space-1);padding:var(--mrd-space-1) var(--mrd-space-2);background-color:var(--mrd-color-primary-light);color:var(--mrd-color-primary-dark);border-radius:var(--mrd-border-radius-full);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);font-weight:var(--mrd-font-weight-medium)}.mrd-relation-field__tag-remove.sc-mrd-relation-field{background:none;border:none;cursor:pointer;color:var(--mrd-color-primary-dark);font-size:var(--mrd-font-size-xs);padding:0;line-height:1;opacity:0.7}.mrd-relation-field__tag-remove.sc-mrd-relation-field:hover{opacity:1}.mrd-relation-field__search-wrapper.sc-mrd-relation-field{position:relative;display:flex;align-items:center}.mrd-relation-field__search.sc-mrd-relation-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);outline:none;appearance:none;box-sizing:border-box}.mrd-relation-field__search.sc-mrd-relation-field::placeholder{color:var(--mrd-input-placeholder-color)}.mrd-relation-field__search.sc-mrd-relation-field:focus{border-color:var(--mrd-border-color-focus);box-shadow:var(--mrd-shadow-focus)}.mrd-relation-field__search.sc-mrd-relation-field:disabled{background-color:var(--mrd-input-bg-disabled);cursor:not-allowed;opacity:0.7}.mrd-relation-field__search--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error)}.mrd-relation-field__search--error.sc-mrd-relation-field:focus{box-shadow:var(--mrd-shadow-focus-error)}.mrd-relation-field__spinner.sc-mrd-relation-field{position:absolute;right:var(--mrd-space-3);width:16px;height:16px;border:2px solid var(--mrd-color-neutral-200);border-top-color:var(--mrd-color-primary);border-radius:50%;animation:mrd-spin 0.7s linear infinite}@keyframes mrd-spin{to{transform:rotate(360deg)}}.mrd-relation-field__results.sc-mrd-relation-field{position:absolute;top:calc(100% + var(--mrd-space-1));left:0;right:0;background-color:var(--mrd-color-white);border:var(--mrd-border-width) solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);box-shadow:var(--mrd-shadow-md);z-index:var(--mrd-z-dropdown);max-height:240px;overflow-y:auto}.mrd-relation-field__result-item.sc-mrd-relation-field{display:flex;flex-direction:column;padding:var(--mrd-space-2) var(--mrd-space-3);cursor:pointer;transition:background-color var(--mrd-transition-fast)}.mrd-relation-field__result-item.sc-mrd-relation-field:hover{background-color:var(--mrd-color-neutral-50)}.mrd-relation-field__result-item.sc-mrd-relation-field:not(:last-child){border-bottom:var(--mrd-border-width) solid var(--mrd-color-neutral-100)}.mrd-relation-field__result-label.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);color:var(--mrd-color-neutral-800);font-weight:var(--mrd-font-weight-medium)}.mrd-relation-field__result-desc.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-xs);color:var(--mrd-color-neutral-500);margin-top:var(--mrd-space-1)}.mrd-relation-field__result-item--highlighted.sc-mrd-relation-field{background-color:var(--mrd-color-primary-light)}.mrd-relation-field__selected-value.sc-mrd-relation-field{display:flex;align-items:center;gap:var(--mrd-space-2);height:var(--mrd-input-height);padding:var(--mrd-input-padding-y) var(--mrd-input-padding-x);background-color:var(--mrd-color-primary-light);border:var(--mrd-border-width) solid var(--mrd-color-primary);border-radius:var(--mrd-border-radius);box-sizing:border-box}.mrd-relation-field__selected-value--error.sc-mrd-relation-field{border-color:var(--mrd-border-color-error);background-color:var(--mrd-color-danger-light)}.mrd-relation-field__selected-name.sc-mrd-relation-field{flex:1;font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-base);font-weight:var(--mrd-font-weight-medium);color:var(--mrd-color-primary-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mrd-relation-field__selected-clear.sc-mrd-relation-field{flex-shrink:0;background:none;border:none;cursor:pointer;color:var(--mrd-color-primary-dark);font-size:var(--mrd-font-size-sm);padding:0;line-height:1;opacity:0.6;transition:opacity var(--mrd-transition-fast)}.mrd-relation-field__selected-clear.sc-mrd-relation-field:hover{opacity:1}.mrd-relation-field__no-results.sc-mrd-relation-field{padding:var(--mrd-space-4);font-family:var(--mrd-font-family);font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-500);text-align:center}.mrd-relation-field__error.sc-mrd-relation-field{font-family:var(--mrd-font-family);font-size:var(--mrd-error-font-size);color:var(--mrd-error-color)}"}},[2,"mrd-relation-field",{name:[1],label:[1],required:[4],disabled:[4],locale:[1],relatedClass:[1,"related-class"],displayType:[1,"display-type"],multiple:[4],dropdownValues:[16],value:[1],searchQuery:[32],searchResults:[32],isLoading:[32],selectedItems:[32],showResults:[32],error:[32],highlightedIndex:[32],setSearchResults:[64],setLoading:[64]}]);function m(){"undefined"!=typeof customElements&&["mrd-relation-field"].forEach((r=>{"mrd-relation-field"===r&&(customElements.get(l(r))||customElements.define(l(r),n))}))}export{n as M,m as d}
@@ -1 +1 @@
1
- import{proxyCustomElement as t,HTMLElement as r,createEvent as e,h as s,Host as a,transformTag as l}from"@stencil/core/internal/client";import{a as i,b as o,c as d,d as n,f as c,e as h}from"./format.js";class m{static render(t,r,e){var s,a;if("RELATION"===t.type){const e=null===(s=null==r?void 0:r._links)||void 0===s?void 0:s[t.name];return e?Array.isArray(e)?e.map((t=>{var r;return null!==(r=t.name)&&void 0!==r?r:""})).filter(Boolean).join(", "):null!==(a=e.name)&&void 0!==a?a:"":""}const l=null==r?void 0:r[t.name];return null==l||""===l?"":(Array.isArray(l)?l:[l]).map((r=>{var s;return m.renderValue(null!==(s=t.dataType)&&void 0!==s?s:"TEXT",r,t,e)})).filter((t=>""!==t)).join(", ")}static renderValue(t,r,e,s){var a,l;switch(t){case"INTEGER":return c(Number(r),s,{maximumFractionDigits:0});case"DECIMAL":return c(Number(r),s);case"PERCENTAGE":return h(Number(r),s);case"CURRENCY":{const{amount:t,currency:e}="object"==typeof r&&null!==r?r:{amount:r,currency:""};return e?n(Number(t),e,s):c(Number(t),s)}case"DATE":return d(r,s);case"DATETIME":return o(r,s);case"TIME":return i(r,s);case"BOOLEAN":return r?"✓":"";case"LIST":{const t=null===(a=e.listItems)||void 0===a?void 0:a.find((t=>t.key===r+""));return null!==(l=null==t?void 0:t.label)&&void 0!==l?l:r+""}case"TEXTBLOCK":return(r+"").replace(/<[^>]*>/g,"").trim();default:return r+""}}}const b=t(class extends r{constructor(t){super(),!1!==t&&this.__registerHost(),this.mrdLoadPage=e(this,"mrdLoadPage",7),this.pendingPages=new Set,this.debounceTimer=null,this.columns=[],this.rows=[],this.locale=navigator.language,this.totalElements=0,this.pageSize=20,this.rowHeight=36,this.tableHeight=500,this.defaultSort="",this.loadedPages=new Map,this.requestedPages=new Set,this.renderStart=0,this.renderEnd=0,this.colWidths=[],this.sortField="",this.sortDir="asc",this.handleScroll=t=>{const r=this.totalElements,e=Math.floor(t.currentTarget.scrollTop/this.rowHeight),s=Math.min(e+this.visibleCount(),r-1);this.renderStart=Math.max(0,e-10),this.renderEnd=Math.min(r-1,s+10),this.requestPagesForWindow(this.renderStart,this.renderEnd)}}async init(){var t;if(null!==this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPages.clear(),this.loadedPages=new Map,this.requestedPages=new Set,this.colWidths=[],this.defaultSort){const r=this.defaultSort.split(",");this.sortField=r[0].trim(),this.sortDir="desc"===(null===(t=r[1])||void 0===t?void 0:t.trim())?"desc":"asc"}else this.sortField="",this.sortDir="asc";this.renderStart=0,this.renderEnd=Math.max(0,Math.min(this.visibleCount()+10,this.totalElements-1));const r=this.el.querySelector(".mrd-table__scroll");r&&(r.scrollTop=0)}async setPage(t,r){const e=new Map(this.loadedPages);e.set(t,r),this.loadedPages=e}visibleCount(){return Math.ceil(this.tableHeight/this.rowHeight)}sortParam(){return this.sortField?"desc"===this.sortDir?this.sortField+",desc":this.sortField:""}handleSortClick(t){this.sortField===t.name?this.sortDir="asc"===this.sortDir?"desc":"asc":(this.sortField=t.name,this.sortDir="asc"),null!==this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPages.clear(),this.loadedPages=new Map,this.requestedPages=new Set,this.colWidths=[],this.renderStart=0,this.renderEnd=Math.max(0,Math.min(this.visibleCount()+10,this.totalElements-1));const r=this.el.querySelector(".mrd-table__scroll");r&&(r.scrollTop=0),this.emitPagesForWindow(this.renderStart,this.renderEnd)}emitPagesForWindow(t,r){const e=Math.floor(t/this.pageSize),s=Math.floor(r/this.pageSize),a=new Set(this.requestedPages);let l=!1;for(let t=e;t<=s;t++)this.loadedPages.has(t)||a.has(t)||(a.add(t),this.mrdLoadPage.emit({page:t,sort:this.sortParam()}),l=!0);l&&(this.requestedPages=a)}getRow(t){var r;const e=this.loadedPages.get(Math.floor(t/this.pageSize));return null!==(r=null==e?void 0:e[t%this.pageSize])&&void 0!==r?r:null}requestPagesForWindow(t,r){const e=Math.floor(t/this.pageSize),s=Math.floor(r/this.pageSize);let a=!1;for(let t=e;t<=s;t++)this.loadedPages.has(t)||this.requestedPages.has(t)||this.pendingPages.has(t)||(this.pendingPages.add(t),a=!0);a&&(null!==this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout((()=>this.flushPendingPages()),150))}flushPendingPages(){if(this.debounceTimer=null,0===this.pendingPages.size)return;const t=new Set(this.requestedPages);let r=!1;for(const e of this.pendingPages){if(this.loadedPages.has(e)||t.has(e))continue;const s=e*this.pageSize;s+this.pageSize-1<this.renderStart||s>this.renderEnd||(t.add(e),this.mrdLoadPage.emit({page:e,sort:this.sortParam()}),r=!0)}this.pendingPages.clear(),r&&(this.requestedPages=t)}componentDidRender(){if(0===this.colWidths.length&&this.loadedPages.size>0&&this.totalElements>0){const t=this.el.querySelectorAll(".mrd-table__header");t.length>0&&(this.colWidths=Array.from(t).map((t=>t.offsetWidth)))}}render(){var t,r;if(!(null===(t=this.columns)||void 0===t?void 0:t.length))return null;const e=new Set(["INTEGER","DECIMAL","PERCENTAGE","CURRENCY"]);if(0===this.totalElements)return s(a,null,s("div",{class:"mrd-table"},s("table",{class:"mrd-table__table"},s("thead",null,s("tr",null,this.columns.map((t=>s("th",{class:"mrd-table__header"},t.label))))),s("tbody",null,null===(r=this.rows)||void 0===r?void 0:r.map(((t,r)=>s("tr",{class:"mrd-table__row",style:{background:r%2==0?"":"var(--mrd-color-neutral-100)"}},this.columns.map((r=>{var a;const l=m.render(r,t,this.locale),i="FIELD"===r.type&&e.has(null!==(a=r.dataType)&&void 0!==a?a:"");return s("td",{class:"mrd-table__cell"+(i?" mrd-table__cell--numeric":"")},l)}))))))),(!this.rows||0===this.rows.length)&&s("p",{class:"mrd-table__empty"},"Geen resultaten gevonden.")));const l=this.totalElements,i=this.columns.length,o=this.renderStart*this.rowHeight,d=Math.max(0,(l-1-this.renderEnd)*this.rowHeight),n=[];for(let t=this.renderStart;t<=this.renderEnd;t++){const r=this.getRow(t);n.push(null===r?s("tr",{class:"mrd-table__row mrd-table__row--loading"},s("td",{class:"mrd-table__cell--placeholder",colSpan:i},s("span",{class:"mrd-table__placeholder-bar"}))):s("tr",{class:"mrd-table__row",style:{background:t%2==0?"":"var(--mrd-color-neutral-100)"}},this.columns.map((t=>{var a;const l=m.render(t,r,this.locale),i="FIELD"===t.type&&e.has(null!==(a=t.dataType)&&void 0!==a?a:"");return s("td",{class:"mrd-table__cell"+(i?" mrd-table__cell--numeric":"")},l)}))))}return s(a,null,s("div",{class:"mrd-table__scroll",style:{height:this.tableHeight+"px"},onScroll:this.handleScroll},s("table",{class:"mrd-table__table",style:this.colWidths.length>0?{tableLayout:"fixed"}:void 0},s("thead",null,s("tr",null,this.columns.map(((t,r)=>{const e=this.sortField===t.name;return s("th",{class:"mrd-table__header mrd-table__header--sortable"+(e?" mrd-table__header--sorted-"+this.sortDir:""),style:this.colWidths[r]?{width:this.colWidths[r]+"px"}:void 0,onClick:()=>this.handleSortClick(t)},s("span",{class:"mrd-table__header-label"},t.label),s("span",{class:"mrd-table__sort-icon","aria-hidden":"true"},e?"asc"===this.sortDir?"▲":"▼":"⇅"))})))),s("tbody",null,o>0&&s("tr",{class:"mrd-table__spacer",style:{height:o+"px"}},s("td",{colSpan:i})),n,d>0&&s("tr",{class:"mrd-table__spacer",style:{height:d+"px"}},s("td",{colSpan:i}))))),0===l&&s("p",{class:"mrd-table__empty"},"Geen resultaten gevonden."))}get el(){return this}static get style(){return".sc-mrd-table-h{display:block;width:100%}.mrd-table__scroll.sc-mrd-table{overflow-y:auto;overflow-x:auto;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow-anchor:none}.mrd-table.sc-mrd-table{overflow-x:auto}.mrd-table__table.sc-mrd-table{width:auto;min-width:100%;border-collapse:collapse;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-table__scroll.sc-mrd-table .mrd-table__table.sc-mrd-table{min-width:max-content}.mrd-table__header.sc-mrd-table{position:sticky;top:0;z-index:1;background:var(--mrd-color-white);text-align:left;padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:2px solid var(--mrd-border-color);color:var(--mrd-color-neutral-600);font-weight:var(--mrd-font-weight-medium);white-space:nowrap;font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em}.mrd-table__header--sortable.sc-mrd-table{cursor:pointer;user-select:none}.mrd-table__header--sortable.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-800)}.mrd-table__header--sorted-asc.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__header-label.sc-mrd-table{margin-right:var(--mrd-space-1)}.mrd-table__sort-icon.sc-mrd-table{font-size:0.65rem;opacity:0.4;vertical-align:middle}.mrd-table__header--sorted-asc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table{opacity:1;color:var(--mrd-color-primary)}.mrd-table__row.sc-mrd-table{border-bottom:1px solid var(--mrd-border-color)}.mrd-table__row.sc-mrd-table:hover{background:var(--mrd-color-neutral-200) !important}.mrd-table__spacer.sc-mrd-table{border:none}.mrd-table__spacer.sc-mrd-table td.sc-mrd-table{padding:0;border:none}.mrd-table__cell.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);vertical-align:top;white-space:nowrap}.mrd-table__cell--numeric.sc-mrd-table{text-align:right;font-variant-numeric:tabular-nums}.mrd-table__row--loading.sc-mrd-table{background:transparent}.mrd-table__cell--placeholder.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__placeholder-bar.sc-mrd-table{display:block;height:0.75rem;width:55%;border-radius:var(--mrd-border-radius-sm);background:linear-gradient( 90deg, var(--mrd-color-neutral-200) 25%, var(--mrd-color-neutral-100) 50%, var(--mrd-color-neutral-200) 75% );background-size:200% 100%;animation:mrd-shimmer 1.4s ease infinite}@keyframes mrd-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.mrd-table__empty.sc-mrd-table{padding:var(--mrd-space-4) var(--mrd-space-3);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center;margin:0}"}},[2,"mrd-table",{columns:[16],rows:[16],locale:[1],totalElements:[2,"total-elements"],pageSize:[2,"page-size"],rowHeight:[2,"row-height"],tableHeight:[2,"table-height"],defaultSort:[1,"default-sort"],loadedPages:[32],requestedPages:[32],renderStart:[32],renderEnd:[32],colWidths:[32],sortField:[32],sortDir:[32],init:[64],setPage:[64]}]),u=b,_=function(){"undefined"!=typeof customElements&&["mrd-table"].forEach((t=>{"mrd-table"===t&&(customElements.get(l(t))||customElements.define(l(t),b))}))};export{u as MrdTable,_ as defineCustomElement}
1
+ import{proxyCustomElement as t,HTMLElement as r,createEvent as e,h as s,Host as a,transformTag as l}from"@stencil/core/internal/client";import{a as i,b as o,c as d,d as n,f as c,e as h}from"./format.js";class m{static render(t,r,e){var s,a;if("RELATION"===t.type){const e=null===(s=null==r?void 0:r._links)||void 0===s?void 0:s[t.name];return e?Array.isArray(e)?e.map((t=>{var r;return null!==(r=t.name)&&void 0!==r?r:""})).filter(Boolean).join(", "):null!==(a=e.name)&&void 0!==a?a:"":""}const l=null==r?void 0:r[t.name];return null==l||""===l?"":(Array.isArray(l)?l:[l]).map((r=>{var s;return m.renderValue(null!==(s=t.dataType)&&void 0!==s?s:"TEXT",r,t,e)})).filter((t=>""!==t)).join(", ")}static renderValue(t,r,e,s){var a,l;switch(t){case"INTEGER":return c(Number(r),s,{maximumFractionDigits:0});case"DECIMAL":return c(Number(r),s);case"PERCENTAGE":return h(Number(r),s);case"CURRENCY":{const{amount:t,currency:e}="object"==typeof r&&null!==r?r:{amount:r,currency:""};return e?n(Number(t),e,s):c(Number(t),s)}case"DATE":return d(r,s);case"DATETIME":return o(r,s);case"TIME":return i(r,s);case"BOOLEAN":return r?"✓":"";case"LIST":{const t=null===(a=e.listItems)||void 0===a?void 0:a.find((t=>t.key===r+""));return null!==(l=null==t?void 0:t.label)&&void 0!==l?l:r+""}case"TEXTBLOCK":return(r+"").replace(/<[^>]*>/g,"").trim();default:return r+""}}}const b=t(class extends r{constructor(t){super(),!1!==t&&this.__registerHost(),this.mrdLoadPage=e(this,"mrdLoadPage",7),this.mrdRowClick=e(this,"mrdRowClick",7),this.pendingPages=new Set,this.debounceTimer=null,this.columns=[],this.rows=[],this.locale=navigator.language,this.totalElements=0,this.pageSize=20,this.rowHeight=36,this.tableHeight=500,this.defaultSort="",this.loadedPages=new Map,this.requestedPages=new Set,this.renderStart=0,this.renderEnd=0,this.colWidths=[],this.sortField="",this.sortDir="asc",this.handleScroll=t=>{const r=this.totalElements,e=Math.floor(t.currentTarget.scrollTop/this.rowHeight),s=Math.min(e+this.visibleCount(),r-1);this.renderStart=Math.max(0,e-10),this.renderEnd=Math.min(r-1,s+10),this.requestPagesForWindow(this.renderStart,this.renderEnd)}}async init(){var t;if(null!==this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPages.clear(),this.loadedPages=new Map,this.requestedPages=new Set,this.colWidths=[],this.defaultSort){const r=this.defaultSort.split(",");this.sortField=r[0].trim(),this.sortDir="desc"===(null===(t=r[1])||void 0===t?void 0:t.trim())?"desc":"asc"}else this.sortField="",this.sortDir="asc";this.renderStart=0,this.renderEnd=Math.max(0,Math.min(this.visibleCount()+10,this.totalElements-1));const r=this.el.querySelector(".mrd-table__scroll");r&&(r.scrollTop=0)}async setPage(t,r){const e=new Map(this.loadedPages);e.set(t,r),this.loadedPages=e}visibleCount(){return Math.ceil(this.tableHeight/this.rowHeight)}sortParam(){return this.sortField?"desc"===this.sortDir?this.sortField+",desc":this.sortField:""}handleSortClick(t){this.sortField===t.name?this.sortDir="asc"===this.sortDir?"desc":"asc":(this.sortField=t.name,this.sortDir="asc"),null!==this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPages.clear(),this.loadedPages=new Map,this.requestedPages=new Set,this.colWidths=[],this.renderStart=0,this.renderEnd=Math.max(0,Math.min(this.visibleCount()+10,this.totalElements-1));const r=this.el.querySelector(".mrd-table__scroll");r&&(r.scrollTop=0),this.emitPagesForWindow(this.renderStart,this.renderEnd)}emitPagesForWindow(t,r){const e=Math.floor(t/this.pageSize),s=Math.floor(r/this.pageSize),a=new Set(this.requestedPages);let l=!1;for(let t=e;t<=s;t++)this.loadedPages.has(t)||a.has(t)||(a.add(t),this.mrdLoadPage.emit({page:t,sort:this.sortParam()}),l=!0);l&&(this.requestedPages=a)}getRow(t){var r;const e=this.loadedPages.get(Math.floor(t/this.pageSize));return null!==(r=null==e?void 0:e[t%this.pageSize])&&void 0!==r?r:null}requestPagesForWindow(t,r){const e=Math.floor(t/this.pageSize),s=Math.floor(r/this.pageSize);let a=!1;for(let t=e;t<=s;t++)this.loadedPages.has(t)||this.requestedPages.has(t)||this.pendingPages.has(t)||(this.pendingPages.add(t),a=!0);a&&(null!==this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout((()=>this.flushPendingPages()),150))}flushPendingPages(){if(this.debounceTimer=null,0===this.pendingPages.size)return;const t=new Set(this.requestedPages);let r=!1;for(const e of this.pendingPages){if(this.loadedPages.has(e)||t.has(e))continue;const s=e*this.pageSize;s+this.pageSize-1<this.renderStart||s>this.renderEnd||(t.add(e),this.mrdLoadPage.emit({page:e,sort:this.sortParam()}),r=!0)}this.pendingPages.clear(),r&&(this.requestedPages=t)}componentDidRender(){if(0===this.colWidths.length&&this.loadedPages.size>0&&this.totalElements>0){const t=this.el.querySelectorAll(".mrd-table__header");t.length>0&&(this.colWidths=Array.from(t).map((t=>t.offsetWidth)))}}render(){var t,r;if(!(null===(t=this.columns)||void 0===t?void 0:t.length))return null;const e=new Set(["INTEGER","DECIMAL","PERCENTAGE","CURRENCY"]);if(0===this.totalElements)return s(a,null,s("div",{class:"mrd-table"},s("table",{class:"mrd-table__table"},s("thead",null,s("tr",null,this.columns.map((t=>s("th",{class:"mrd-table__header"},t.label))))),s("tbody",null,null===(r=this.rows)||void 0===r?void 0:r.map(((t,r)=>s("tr",{class:"mrd-table__row mrd-table__row--clickable",style:{background:r%2==0?"":"var(--mrd-color-neutral-100)"},onClick:()=>this.mrdRowClick.emit(t)},this.columns.map((r=>{var a;const l=m.render(r,t,this.locale),i="FIELD"===r.type&&e.has(null!==(a=r.dataType)&&void 0!==a?a:"");return s("td",{class:"mrd-table__cell"+(i?" mrd-table__cell--numeric":"")},l)}))))))),(!this.rows||0===this.rows.length)&&s("p",{class:"mrd-table__empty"},"Geen resultaten gevonden.")));const l=this.totalElements,i=this.columns.length,o=this.renderStart*this.rowHeight,d=Math.max(0,(l-1-this.renderEnd)*this.rowHeight),n=[];for(let t=this.renderStart;t<=this.renderEnd;t++){const r=this.getRow(t);n.push(null===r?s("tr",{class:"mrd-table__row mrd-table__row--loading"},s("td",{class:"mrd-table__cell--placeholder",colSpan:i},s("span",{class:"mrd-table__placeholder-bar"}))):s("tr",{class:"mrd-table__row mrd-table__row--clickable",style:{background:t%2==0?"":"var(--mrd-color-neutral-100)"},onClick:()=>this.mrdRowClick.emit(r)},this.columns.map((t=>{var a;const l=m.render(t,r,this.locale),i="FIELD"===t.type&&e.has(null!==(a=t.dataType)&&void 0!==a?a:"");return s("td",{class:"mrd-table__cell"+(i?" mrd-table__cell--numeric":"")},l)}))))}return s(a,null,s("div",{class:"mrd-table__scroll",style:{height:this.tableHeight+"px"},onScroll:this.handleScroll},s("table",{class:"mrd-table__table",style:this.colWidths.length>0?{tableLayout:"fixed"}:void 0},s("thead",null,s("tr",null,this.columns.map(((t,r)=>{const e=this.sortField===t.name;return s("th",{class:"mrd-table__header mrd-table__header--sortable"+(e?" mrd-table__header--sorted-"+this.sortDir:""),style:this.colWidths[r]?{width:this.colWidths[r]+"px"}:void 0,onClick:()=>this.handleSortClick(t)},s("span",{class:"mrd-table__header-label"},t.label),s("span",{class:"mrd-table__sort-icon","aria-hidden":"true"},e?"asc"===this.sortDir?"▲":"▼":"⇅"))})))),s("tbody",null,o>0&&s("tr",{class:"mrd-table__spacer",style:{height:o+"px"}},s("td",{colSpan:i})),n,d>0&&s("tr",{class:"mrd-table__spacer",style:{height:d+"px"}},s("td",{colSpan:i}))))),0===l&&s("p",{class:"mrd-table__empty"},"Geen resultaten gevonden."))}get el(){return this}static get style(){return".sc-mrd-table-h{display:block;width:100%}.mrd-table__scroll.sc-mrd-table{overflow-y:auto;overflow-x:auto;border:1px solid var(--mrd-border-color);border-radius:var(--mrd-border-radius);overflow-anchor:none}.mrd-table.sc-mrd-table{overflow-x:auto}.mrd-table__table.sc-mrd-table{width:auto;min-width:100%;border-collapse:collapse;font-size:var(--mrd-font-size-sm);color:var(--mrd-color-neutral-900)}.mrd-table__scroll.sc-mrd-table .mrd-table__table.sc-mrd-table{min-width:max-content}.mrd-table__header.sc-mrd-table{position:sticky;top:0;z-index:1;background:var(--mrd-color-white);text-align:left;padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:2px solid var(--mrd-border-color);color:var(--mrd-color-neutral-600);font-weight:var(--mrd-font-weight-medium);white-space:nowrap;font-size:var(--mrd-font-size-xs);text-transform:uppercase;letter-spacing:0.04em}.mrd-table__header--sortable.sc-mrd-table{cursor:pointer;user-select:none}.mrd-table__header--sortable.sc-mrd-table:hover{background:var(--mrd-color-neutral-50);color:var(--mrd-color-neutral-800)}.mrd-table__header--sorted-asc.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table{color:var(--mrd-color-primary);border-bottom-color:var(--mrd-color-primary)}.mrd-table__header-label.sc-mrd-table{margin-right:var(--mrd-space-1)}.mrd-table__sort-icon.sc-mrd-table{font-size:0.65rem;opacity:0.4;vertical-align:middle}.mrd-table__header--sorted-asc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table,.mrd-table__header--sorted-desc.sc-mrd-table .mrd-table__sort-icon.sc-mrd-table{opacity:1;color:var(--mrd-color-primary)}.mrd-table__row.sc-mrd-table{border-bottom:1px solid var(--mrd-border-color)}.mrd-table__row.sc-mrd-table:hover{background:var(--mrd-color-neutral-200) !important}.mrd-table__row--clickable.sc-mrd-table{cursor:pointer}.mrd-table__spacer.sc-mrd-table{border:none}.mrd-table__spacer.sc-mrd-table td.sc-mrd-table{padding:0;border:none}.mrd-table__cell.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);vertical-align:top;white-space:nowrap}.mrd-table__cell--numeric.sc-mrd-table{text-align:right;font-variant-numeric:tabular-nums}.mrd-table__row--loading.sc-mrd-table{background:transparent}.mrd-table__cell--placeholder.sc-mrd-table{padding:var(--mrd-space-2) var(--mrd-space-4);border-bottom:1px solid var(--mrd-border-color)}.mrd-table__placeholder-bar.sc-mrd-table{display:block;height:0.75rem;width:55%;border-radius:var(--mrd-border-radius-sm);background:linear-gradient( 90deg, var(--mrd-color-neutral-200) 25%, var(--mrd-color-neutral-100) 50%, var(--mrd-color-neutral-200) 75% );background-size:200% 100%;animation:mrd-shimmer 1.4s ease infinite}@keyframes mrd-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.mrd-table__empty.sc-mrd-table{padding:var(--mrd-space-4) var(--mrd-space-3);color:var(--mrd-color-neutral-500);font-size:var(--mrd-font-size-sm);text-align:center;margin:0}"}},[2,"mrd-table",{columns:[16],rows:[16],locale:[1],totalElements:[2,"total-elements"],pageSize:[2,"page-size"],rowHeight:[2,"row-height"],tableHeight:[2,"table-height"],defaultSort:[1,"default-sort"],loadedPages:[32],requestedPages:[32],renderStart:[32],renderEnd:[32],colWidths:[32],sortField:[32],sortDir:[32],init:[64],setPage:[64]}]),u=b,_=function(){"undefined"!=typeof customElements&&["mrd-table"].forEach((t=>{"mrd-table"===t&&(customElements.get(l(t))||customElements.define(l(t),b))}))};export{u as MrdTable,_ as defineCustomElement}