web-mojo 2.2.46 → 2.2.48

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 (88) hide show
  1. package/dist/admin.cjs.js +1 -1
  2. package/dist/admin.cjs.js.map +1 -1
  3. package/dist/admin.es.js +18 -13
  4. package/dist/admin.es.js.map +1 -1
  5. package/dist/auth.cjs.js +1 -1
  6. package/dist/auth.es.js +1 -1
  7. package/dist/charts.cjs.js +1 -1
  8. package/dist/charts.es.js +4 -4
  9. package/dist/chunks/{ChatView-BpDAh51X.js → ChatView-D9ZaC_gN.js} +28 -7
  10. package/dist/chunks/ChatView-D9ZaC_gN.js.map +1 -0
  11. package/dist/chunks/ChatView-Ds4cJWJI.js +2 -0
  12. package/dist/chunks/ChatView-Ds4cJWJI.js.map +1 -0
  13. package/dist/chunks/{Collection-C5uDBFur.js → Collection-B8r3o6bK.js} +2 -2
  14. package/dist/chunks/{Collection-C5uDBFur.js.map → Collection-B8r3o6bK.js.map} +1 -1
  15. package/dist/chunks/{Collection-C_Ssejpi.js → Collection-Wr1qdfrB.js} +2 -2
  16. package/dist/chunks/{Collection-C_Ssejpi.js.map → Collection-Wr1qdfrB.js.map} +1 -1
  17. package/dist/chunks/{ContextMenu-4yi1YZwj.js → ContextMenu-Bu4Sw_GS.js} +3 -3
  18. package/dist/chunks/{ContextMenu-4yi1YZwj.js.map → ContextMenu-Bu4Sw_GS.js.map} +1 -1
  19. package/dist/chunks/{ContextMenu-leHTa126.js → ContextMenu-DXtMvkaN.js} +2 -2
  20. package/dist/chunks/{ContextMenu-leHTa126.js.map → ContextMenu-DXtMvkaN.js.map} +1 -1
  21. package/dist/chunks/{DataView-DNhn9WNt.js → DataView-DhG_EmV-.js} +2 -2
  22. package/dist/chunks/{DataView-DNhn9WNt.js.map → DataView-DhG_EmV-.js.map} +1 -1
  23. package/dist/chunks/{DataView-34YwqbHX.js → DataView-GAorw2F1.js} +2 -2
  24. package/dist/chunks/{DataView-34YwqbHX.js.map → DataView-GAorw2F1.js.map} +1 -1
  25. package/dist/chunks/{Dialog-BEhVfg3C.js → Dialog-fb2ecL0p.js} +5 -5
  26. package/dist/chunks/{Dialog-BEhVfg3C.js.map → Dialog-fb2ecL0p.js.map} +1 -1
  27. package/dist/chunks/{Dialog-DokUDeCN.js → Dialog-rbzUvwyM.js} +2 -2
  28. package/dist/chunks/{Dialog-DokUDeCN.js.map → Dialog-rbzUvwyM.js.map} +1 -1
  29. package/dist/chunks/FormView-CI-mS8ei.js +3 -0
  30. package/dist/chunks/FormView-CI-mS8ei.js.map +1 -0
  31. package/dist/chunks/{FormView-CijEouSb.js → FormView-nAFrSOID.js} +100 -30
  32. package/dist/chunks/FormView-nAFrSOID.js.map +1 -0
  33. package/dist/chunks/{ListView-CCa2A8AN.js → ListView-CVdyqY9B.js} +2 -2
  34. package/dist/chunks/{ListView-CCa2A8AN.js.map → ListView-CVdyqY9B.js.map} +1 -1
  35. package/dist/chunks/{ListView-fAR_2dr2.js → ListView-Dh9FHFip.js} +3 -3
  36. package/dist/chunks/{ListView-fAR_2dr2.js.map → ListView-Dh9FHFip.js.map} +1 -1
  37. package/dist/chunks/{MetricsCountryMapView-B-f2p9Sa.js → MetricsCountryMapView-CvvZhGXI.js} +2 -2
  38. package/dist/chunks/{MetricsCountryMapView-B-f2p9Sa.js.map → MetricsCountryMapView-CvvZhGXI.js.map} +1 -1
  39. package/dist/chunks/{MetricsCountryMapView-CUOaeRfl.js → MetricsCountryMapView-qU41DcSP.js} +2 -2
  40. package/dist/chunks/{MetricsCountryMapView-CUOaeRfl.js.map → MetricsCountryMapView-qU41DcSP.js.map} +1 -1
  41. package/dist/chunks/{MetricsMiniChartWidget-CeTyhPWQ.js → MetricsMiniChartWidget-C7AhQWjP.js} +2 -2
  42. package/dist/chunks/{MetricsMiniChartWidget-CeTyhPWQ.js.map → MetricsMiniChartWidget-C7AhQWjP.js.map} +1 -1
  43. package/dist/chunks/{MetricsMiniChartWidget-DqUGRcVX.js → MetricsMiniChartWidget-mKq4dgZs.js} +4 -4
  44. package/dist/chunks/{MetricsMiniChartWidget-DqUGRcVX.js.map → MetricsMiniChartWidget-mKq4dgZs.js.map} +1 -1
  45. package/dist/chunks/{PDFViewer-D3kQ_uEY.js → PDFViewer-B7nrzZli.js} +3 -3
  46. package/dist/chunks/{PDFViewer-D3kQ_uEY.js.map → PDFViewer-B7nrzZli.js.map} +1 -1
  47. package/dist/chunks/{PDFViewer-DRmN6S3U.js → PDFViewer-Be9x6dIX.js} +2 -2
  48. package/dist/chunks/{PDFViewer-DRmN6S3U.js.map → PDFViewer-Be9x6dIX.js.map} +1 -1
  49. package/dist/chunks/{Rest-CtdC4cD9.js → Rest-Bq0Qmce8.js} +32 -15
  50. package/dist/chunks/Rest-Bq0Qmce8.js.map +1 -0
  51. package/dist/chunks/Rest-CpEc4pkD.js +2 -0
  52. package/dist/chunks/Rest-CpEc4pkD.js.map +1 -0
  53. package/dist/chunks/{TokenManager-gswMG3jv.js → TokenManager-BJ92Oaf0.js} +2 -2
  54. package/dist/chunks/{TokenManager-gswMG3jv.js.map → TokenManager-BJ92Oaf0.js.map} +1 -1
  55. package/dist/chunks/{TokenManager-BGM43GBT.js → TokenManager-DHm_MUpV.js} +5 -5
  56. package/dist/chunks/{TokenManager-BGM43GBT.js.map → TokenManager-DHm_MUpV.js.map} +1 -1
  57. package/dist/chunks/{WebApp-DZ2-sucS.js → WebApp-BgKy6_WI.js} +2 -2
  58. package/dist/chunks/{WebApp-DZ2-sucS.js.map → WebApp-BgKy6_WI.js.map} +1 -1
  59. package/dist/chunks/{WebApp-CKquDcKr.js → WebApp-YAw6Prrk.js} +12 -12
  60. package/dist/chunks/{WebApp-CKquDcKr.js.map → WebApp-YAw6Prrk.js.map} +1 -1
  61. package/dist/chunks/{WebSocketClient-iJiqRgNy.js → WebSocketClient-D4xOzuC5.js} +2 -2
  62. package/dist/chunks/{WebSocketClient-iJiqRgNy.js.map → WebSocketClient-D4xOzuC5.js.map} +1 -1
  63. package/dist/chunks/{WebSocketClient-BGnzEIjP.js → WebSocketClient-eCM6D3qg.js} +2 -2
  64. package/dist/chunks/{WebSocketClient-BGnzEIjP.js.map → WebSocketClient-eCM6D3qg.js.map} +1 -1
  65. package/dist/chunks/{version-QJ6dbqtW.js → version-BiGS3nz0.js} +2 -2
  66. package/dist/chunks/{version-QJ6dbqtW.js.map → version-BiGS3nz0.js.map} +1 -1
  67. package/dist/chunks/{version-CbSGnPBZ.js → version-D9rXuJAi.js} +4 -4
  68. package/dist/chunks/{version-CbSGnPBZ.js.map → version-D9rXuJAi.js.map} +1 -1
  69. package/dist/docit.cjs.js +1 -1
  70. package/dist/docit.es.js +6 -6
  71. package/dist/index.cjs.js +1 -1
  72. package/dist/index.es.js +16 -16
  73. package/dist/lightbox.cjs.js +1 -1
  74. package/dist/lightbox.es.js +5 -5
  75. package/dist/map.cjs.js +1 -1
  76. package/dist/map.es.js +5 -5
  77. package/dist/timeline.cjs.js +1 -1
  78. package/dist/timeline.es.js +4 -4
  79. package/package.json +1 -1
  80. package/dist/chunks/ChatView-BpDAh51X.js.map +0 -1
  81. package/dist/chunks/ChatView-oLnrxCFC.js +0 -2
  82. package/dist/chunks/ChatView-oLnrxCFC.js.map +0 -1
  83. package/dist/chunks/FormView-CijEouSb.js.map +0 -1
  84. package/dist/chunks/FormView-ZeKC0Wz7.js +0 -3
  85. package/dist/chunks/FormView-ZeKC0Wz7.js.map +0 -1
  86. package/dist/chunks/Rest-Bd1ABsfh.js +0 -2
  87. package/dist/chunks/Rest-Bd1ABsfh.js.map +0 -1
  88. package/dist/chunks/Rest-CtdC4cD9.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { M as Mustache, a as MOJOUtils, V as View } from "./Rest-CtdC4cD9.js";
1
+ import { M as Mustache, a as MOJOUtils, V as View } from "./Rest-Bq0Qmce8.js";
2
2
  import { F as FormPlugins } from "./FormPlugins-DY6e88YT.js";
3
3
  class FormBuilder {
4
4
  constructor(config = {}) {
@@ -54,11 +54,25 @@ class FormBuilder {
54
54
  {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
55
55
  </label>
56
56
  {{/label}}
57
+ {{#showCopy}}
58
+ <div class="input-group">
59
+ <input type="{{type}}" id="{{fieldId}}" name="{{name}}"
60
+ class="{{inputClass}}{{#error}} is-invalid{{/error}}"
61
+ value="{{fieldValue}}" {{#placeholder}}placeholder="{{placeholder}}"{{/placeholder}}
62
+ {{#required}}required{{/required}} {{#disabled}}disabled{{/disabled}}
63
+ {{#readonly}}readonly{{/readonly}} {{{attrs}}}>
64
+ <button class="btn btn-outline-secondary" type="button" data-action="copy-to-clipboard" data-target="{{fieldId}}" title="Copy to clipboard">
65
+ <i class="bi bi-clipboard"></i>
66
+ </button>
67
+ </div>
68
+ {{/showCopy}}
69
+ {{^showCopy}}
57
70
  <input type="{{type}}" id="{{fieldId}}" name="{{name}}"
58
71
  class="{{inputClass}}{{#error}} is-invalid{{/error}}"
59
72
  value="{{fieldValue}}" {{#placeholder}}placeholder="{{placeholder}}"{{/placeholder}}
60
73
  {{#required}}required{{/required}} {{#disabled}}disabled{{/disabled}}
61
74
  {{#readonly}}readonly{{/readonly}} {{{attrs}}}>
75
+ {{/showCopy}}
62
76
  {{#help}}<div class="{{helpClass}}">{{help}}</div>{{/help}}
63
77
  {{#error}}<div class="{{errorClass}}">{{error}}</div>{{/error}}
64
78
  </div>
@@ -112,10 +126,23 @@ class FormBuilder {
112
126
  {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
113
127
  </label>
114
128
  {{/label}}
129
+ {{#showCopy}}
130
+ <div class="position-relative">
131
+ <textarea id="{{fieldId}}" name="{{name}}" class="{{inputClass}}{{#error}} is-invalid{{/error}}"
132
+ rows="{{rows}}" {{#placeholder}}placeholder="{{placeholder}}"{{/placeholder}}
133
+ {{#required}}required{{/required}} {{#disabled}}disabled{{/disabled}}
134
+ {{#readonly}}readonly{{/readonly}} {{{attrs}}}>{{fieldValue}}</textarea>
135
+ <button class="btn btn-sm btn-outline-secondary position-absolute top-0 end-0 m-2" type="button" data-action="copy-to-clipboard" data-target="{{fieldId}}" title="Copy to clipboard">
136
+ <i class="bi bi-clipboard"></i>
137
+ </button>
138
+ </div>
139
+ {{/showCopy}}
140
+ {{^showCopy}}
115
141
  <textarea id="{{fieldId}}" name="{{name}}" class="{{inputClass}}{{#error}} is-invalid{{/error}}"
116
142
  rows="{{rows}}" {{#placeholder}}placeholder="{{placeholder}}"{{/placeholder}}
117
143
  {{#required}}required{{/required}} {{#disabled}}disabled{{/disabled}}
118
144
  {{#readonly}}readonly{{/readonly}} {{{attrs}}}>{{fieldValue}}</textarea>
145
+ {{/showCopy}}
119
146
  {{#help}}<div class="{{helpClass}}">{{help}}</div>{{/help}}
120
147
  {{#error}}<div class="{{errorClass}}">{{error}}</div>{{/error}}
121
148
  </div>
@@ -133,14 +160,24 @@ class FormBuilder {
133
160
  {{#required}}required{{/required}} {{#disabled}}disabled{{/disabled}}
134
161
  {{#readonly}}readonly{{/readonly}}
135
162
  data-field-type="htmlpreview" {{{attrs}}}>{{fieldValue}}</textarea>
136
- <button type="button" class="btn btn-sm btn-outline-secondary position-absolute"
137
- style="top: 8px; right: 8px; z-index: 10;"
138
- data-action="preview-html"
139
- data-target="{{fieldId}}"
140
- title="Preview HTML"
141
- aria-label="Preview HTML">
142
- <i class="bi bi-eye"></i> Preview
143
- </button>
163
+ <div class="position-absolute d-flex gap-1" style="top: 8px; right: 8px; z-index: 10;">
164
+ {{#showCopy}}
165
+ <button type="button" class="btn btn-sm btn-outline-secondary"
166
+ data-action="copy-to-clipboard"
167
+ data-target="{{fieldId}}"
168
+ title="Copy to clipboard"
169
+ aria-label="Copy to clipboard">
170
+ <i class="bi bi-clipboard"></i>
171
+ </button>
172
+ {{/showCopy}}
173
+ <button type="button" class="btn btn-sm btn-outline-secondary"
174
+ data-action="preview-html"
175
+ data-target="{{fieldId}}"
176
+ title="Preview HTML"
177
+ aria-label="Preview HTML">
178
+ <i class="bi bi-eye"></i>
179
+ </button>
180
+ </div>
144
181
  </div>
145
182
  {{#help}}<div class="{{helpClass}}">{{help}}</div>{{/help}}
146
183
  {{#error}}<div class="{{errorClass}}">{{error}}</div>{{/error}}
@@ -898,7 +935,8 @@ class FormBuilder {
898
935
  required,
899
936
  disabled,
900
937
  readonly,
901
- attrs
938
+ attrs,
939
+ showCopy: !!field.showCopy
902
940
  };
903
941
  if (type === "password" && (field.showToggle || field.strengthMeter || field.capsLockWarning)) {
904
942
  const enhancedContext = {
@@ -962,6 +1000,7 @@ class FormBuilder {
962
1000
  required,
963
1001
  disabled,
964
1002
  readonly,
1003
+ showCopy: !!field.showCopy,
965
1004
  attrs
966
1005
  };
967
1006
  return Mustache.render(this.templates.textarea, context);
@@ -1007,7 +1046,8 @@ class FormBuilder {
1007
1046
  required,
1008
1047
  disabled,
1009
1048
  readonly,
1010
- attrs
1049
+ attrs,
1050
+ showCopy: !!field.showCopy
1011
1051
  };
1012
1052
  return Mustache.render(this.templates.htmlpreview, context);
1013
1053
  }
@@ -1167,12 +1207,10 @@ class FormBuilder {
1167
1207
  const error = this.errors[name];
1168
1208
  const fieldValue = field.value ?? this.getFieldValue(name) ?? value;
1169
1209
  return `
1170
- <div class="mojo-form-control">
1171
- ${label ? `<label class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
1172
- <div class="multiselect-placeholder"
1173
- data-field-name="${name}"
1174
- data-field-type="multiselect"
1175
- data-field-config='${JSON.stringify({
1210
+ <div class="multiselect-placeholder"
1211
+ data-field-name="${name}"
1212
+ data-field-type="multiselect"
1213
+ data-field-config='${JSON.stringify({
1176
1214
  name,
1177
1215
  value: fieldValue,
1178
1216
  placeholder,
@@ -1180,22 +1218,19 @@ class FormBuilder {
1180
1218
  disabled,
1181
1219
  required
1182
1220
  })}'>
1183
- <input type="hidden" name="${name}" value="${this.escapeHtml(JSON.stringify(fieldValue))}">
1184
- <select class="form-select${error ? " is-invalid" : ""}"
1185
- multiple
1186
- ${disabled ? "disabled" : ""}
1187
- ${required ? "required" : ""}>
1188
- ${options.map((opt) => {
1221
+ <input type="hidden" name="${name}" value="${this.escapeHtml(JSON.stringify(fieldValue))}">
1222
+ <select class="form-select${error ? " is-invalid" : ""}"
1223
+ multiple
1224
+ ${disabled ? "disabled" : ""}
1225
+ ${required ? "required" : ""}>
1226
+ ${options.map((opt) => {
1189
1227
  const optValue = typeof opt === "string" ? opt : opt.value;
1190
1228
  const optLabel = typeof opt === "string" ? opt : opt.label || opt.value;
1191
1229
  const selected = Array.isArray(fieldValue) && fieldValue.includes(optValue) ? "selected" : "";
1192
1230
  return `<option value="${this.escapeHtml(optValue)}" ${selected}>${this.escapeHtml(optLabel)}</option>`;
1193
1231
  }).join("")}
1194
- </select>
1195
- <small class="form-text text-muted">This will be enhanced with MultiSelectDropdown component</small>
1196
- </div>
1197
- ${help ? `<div class="${this.options.helpClass}">${this.escapeHtml(help)}</div>` : ""}
1198
- ${error ? `<div class="${this.options.errorClass}">${this.escapeHtml(error)}</div>` : ""}
1232
+ </select>
1233
+ <small class="form-text text-muted">This will be enhanced with MultiSelectDropdown component</small>
1199
1234
  </div>
1200
1235
  `;
1201
1236
  }
@@ -7157,7 +7192,7 @@ class FormView extends View {
7157
7192
  const textarea = this.element.querySelector(`#${targetId}`);
7158
7193
  if (!textarea) return;
7159
7194
  const htmlContent = textarea.value || "";
7160
- const Dialog = (await import("./Dialog-BEhVfg3C.js")).default;
7195
+ const Dialog = (await import("./Dialog-fb2ecL0p.js")).default;
7161
7196
  Dialog.showHtmlPreview({
7162
7197
  html: htmlContent,
7163
7198
  title: "HTML Preview"
@@ -8243,6 +8278,41 @@ class FormView extends View {
8243
8278
  } catch (_e) {
8244
8279
  }
8245
8280
  }
8281
+ /**
8282
+ * Copy field value to clipboard
8283
+ * @param {Event} event - Click event
8284
+ * @param {HTMLElement} element - Button element with data-target
8285
+ */
8286
+ async onActionCopyToClipboard(event, element) {
8287
+ event.preventDefault();
8288
+ const targetId = element.getAttribute("data-target");
8289
+ if (!targetId) return;
8290
+ const input = this.element.querySelector("#" + targetId);
8291
+ if (!input) return;
8292
+ try {
8293
+ await navigator.clipboard.writeText(input.value);
8294
+ const icon = element.querySelector("i");
8295
+ if (icon) {
8296
+ const originalClass = icon.className;
8297
+ icon.className = "bi bi-check2";
8298
+ element.classList.add("btn-success");
8299
+ element.classList.remove("btn-outline-secondary");
8300
+ setTimeout(() => {
8301
+ icon.className = originalClass;
8302
+ element.classList.remove("btn-success");
8303
+ element.classList.add("btn-outline-secondary");
8304
+ }, 1500);
8305
+ }
8306
+ if (this.app && this.app.toast) {
8307
+ this.app.toast.success("Copied to clipboard!");
8308
+ }
8309
+ } catch (err) {
8310
+ console.error("Failed to copy to clipboard:", err);
8311
+ if (this.app && this.app.toast) {
8312
+ this.app.toast.error("Failed to copy to clipboard");
8313
+ }
8314
+ }
8315
+ }
8246
8316
  /**
8247
8317
  * Compute a simple password strength score and associated UI metadata
8248
8318
  */
@@ -8563,4 +8633,4 @@ export {
8563
8633
  applyFileDropMixin as a,
8564
8634
  FormView$1 as b
8565
8635
  };
8566
- //# sourceMappingURL=FormView-CijEouSb.js.map
8636
+ //# sourceMappingURL=FormView-nAFrSOID.js.map