web-mojo 2.2.72 → 2.2.74

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 (117) 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 +1 -1
  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 +1 -1
  9. package/dist/chunks/ChatView-BjzI6hHA.js +2 -0
  10. package/dist/chunks/ChatView-BjzI6hHA.js.map +1 -0
  11. package/dist/chunks/ChatView-CQSd2YjH.js +2 -0
  12. package/dist/chunks/ChatView-CQSd2YjH.js.map +1 -0
  13. package/dist/chunks/Collection-CaiT8TbF.js +2 -0
  14. package/dist/chunks/Collection-CaiT8TbF.js.map +1 -0
  15. package/dist/chunks/Collection-TfoOMCWQ.js +2 -0
  16. package/dist/chunks/Collection-TfoOMCWQ.js.map +1 -0
  17. package/dist/chunks/{ContextMenu-BFxliZ03.js → ContextMenu-CPW_iX9g.js} +2 -2
  18. package/dist/chunks/{ContextMenu-BFxliZ03.js.map → ContextMenu-CPW_iX9g.js.map} +1 -1
  19. package/dist/chunks/{ContextMenu-BwJJ4QJE.js → ContextMenu-MUgZ00m8.js} +2 -2
  20. package/dist/chunks/{ContextMenu-BwJJ4QJE.js.map → ContextMenu-MUgZ00m8.js.map} +1 -1
  21. package/dist/chunks/{DataView-DMpNXerv.js → DataView-BNk2EOLN.js} +2 -2
  22. package/dist/chunks/{DataView-DMpNXerv.js.map → DataView-BNk2EOLN.js.map} +1 -1
  23. package/dist/chunks/{DataView-_CACqzRt.js → DataView-BcHpqSQj.js} +2 -2
  24. package/dist/chunks/{DataView-_CACqzRt.js.map → DataView-BcHpqSQj.js.map} +1 -1
  25. package/dist/chunks/Dialog-C2ZupILO.js +3 -0
  26. package/dist/chunks/Dialog-C2ZupILO.js.map +1 -0
  27. package/dist/chunks/Dialog-qTmvQHtO.js +3 -0
  28. package/dist/chunks/Dialog-qTmvQHtO.js.map +1 -0
  29. package/dist/chunks/FormView-BT8-sbmT.js +3 -0
  30. package/dist/chunks/FormView-BT8-sbmT.js.map +1 -0
  31. package/dist/chunks/FormView-DSe6zoog.js +3 -0
  32. package/dist/chunks/FormView-DSe6zoog.js.map +1 -0
  33. package/dist/chunks/{ListView-B0QbqSPv.js → ListView-C6VNTO4C.js} +2 -2
  34. package/dist/chunks/{ListView-B0QbqSPv.js.map → ListView-C6VNTO4C.js.map} +1 -1
  35. package/dist/chunks/{ListView-2M4I8KHF.js → ListView-ClsNRNOz.js} +2 -2
  36. package/dist/chunks/{ListView-2M4I8KHF.js.map → ListView-ClsNRNOz.js.map} +1 -1
  37. package/dist/chunks/MetricsCountryMapView-Cz6tMj-U.js +2 -0
  38. package/dist/chunks/{MetricsCountryMapView-D1WtxmEc.js.map → MetricsCountryMapView-Cz6tMj-U.js.map} +1 -1
  39. package/dist/chunks/MetricsCountryMapView-sLEsgw3S.js +2 -0
  40. package/dist/chunks/{MetricsCountryMapView-C5kQA6xw.js.map → MetricsCountryMapView-sLEsgw3S.js.map} +1 -1
  41. package/dist/chunks/{MetricsMiniChartWidget-BVCILe9D.js → MetricsMiniChartWidget-Ja2m3ujv.js} +2 -2
  42. package/dist/chunks/{MetricsMiniChartWidget-BVCILe9D.js.map → MetricsMiniChartWidget-Ja2m3ujv.js.map} +1 -1
  43. package/dist/chunks/{MetricsMiniChartWidget-C56xbSvN.js → MetricsMiniChartWidget-Mjr6HbC-.js} +2 -2
  44. package/dist/chunks/{MetricsMiniChartWidget-C56xbSvN.js.map → MetricsMiniChartWidget-Mjr6HbC-.js.map} +1 -1
  45. package/dist/chunks/{Modal-Bk391x8U.js → Modal-B0iezM44.js} +2 -2
  46. package/dist/chunks/{Modal-Bk391x8U.js.map → Modal-B0iezM44.js.map} +1 -1
  47. package/dist/chunks/{Modal-BRy52L0q.js → Modal-Cu14-nd2.js} +2 -2
  48. package/dist/chunks/{Modal-BRy52L0q.js.map → Modal-Cu14-nd2.js.map} +1 -1
  49. package/dist/chunks/{PDFViewer-BOlzz1xw.js → PDFViewer-CdNehN74.js} +2 -2
  50. package/dist/chunks/{PDFViewer-BOlzz1xw.js.map → PDFViewer-CdNehN74.js.map} +1 -1
  51. package/dist/chunks/{PDFViewer-D86bl2rr.js → PDFViewer-DSTUoA2K.js} +2 -2
  52. package/dist/chunks/{PDFViewer-D86bl2rr.js.map → PDFViewer-DSTUoA2K.js.map} +1 -1
  53. package/dist/chunks/{Passkeys-BMlPoiNU.js → Passkeys-BPhGi897.js} +2 -2
  54. package/dist/chunks/{Passkeys-BMlPoiNU.js.map → Passkeys-BPhGi897.js.map} +1 -1
  55. package/dist/chunks/{Passkeys-BOgPdzUP.js → Passkeys-D_7qxb_b.js} +2 -2
  56. package/dist/chunks/{Passkeys-BOgPdzUP.js.map → Passkeys-D_7qxb_b.js.map} +1 -1
  57. package/dist/chunks/{TokenManager-CQz0jHA7.js → TokenManager-DWbpIqWX.js} +2 -2
  58. package/dist/chunks/{TokenManager-CQz0jHA7.js.map → TokenManager-DWbpIqWX.js.map} +1 -1
  59. package/dist/chunks/{TokenManager-Bt369_RQ.js → TokenManager-DgigOea0.js} +2 -2
  60. package/dist/chunks/{TokenManager-Bt369_RQ.js.map → TokenManager-DgigOea0.js.map} +1 -1
  61. package/dist/chunks/{UserProfileView-C-acS9nw.js → UserProfileView-Bl-jQDVM.js} +2 -2
  62. package/dist/chunks/{UserProfileView-C-acS9nw.js.map → UserProfileView-Bl-jQDVM.js.map} +1 -1
  63. package/dist/chunks/{UserProfileView-_PYRQ7e-.js → UserProfileView-DMZD3QYa.js} +2 -2
  64. package/dist/chunks/{UserProfileView-_PYRQ7e-.js.map → UserProfileView-DMZD3QYa.js.map} +1 -1
  65. package/dist/chunks/{WebApp-Bcm_5W7o.js → WebApp-2ajVvWc-.js} +2 -2
  66. package/dist/chunks/{WebApp-Bcm_5W7o.js.map → WebApp-2ajVvWc-.js.map} +1 -1
  67. package/dist/chunks/{WebApp-XII3ai1e.js → WebApp-BwNGaHLv.js} +2 -2
  68. package/dist/chunks/{WebApp-XII3ai1e.js.map → WebApp-BwNGaHLv.js.map} +1 -1
  69. package/dist/chunks/{WebSocketClient-Ibi7mLQu.js → WebSocketClient-CUrHDc0n.js} +2 -2
  70. package/dist/chunks/{WebSocketClient-Ibi7mLQu.js.map → WebSocketClient-CUrHDc0n.js.map} +1 -1
  71. package/dist/chunks/{WebSocketClient-QaCUN3EQ.js → WebSocketClient-D904MtjN.js} +2 -2
  72. package/dist/chunks/{WebSocketClient-QaCUN3EQ.js.map → WebSocketClient-D904MtjN.js.map} +1 -1
  73. package/dist/chunks/{index-BlmLfc7i.js → index-Ca5aym-a.js} +2 -2
  74. package/dist/chunks/{index-BlmLfc7i.js.map → index-Ca5aym-a.js.map} +1 -1
  75. package/dist/chunks/{index-CR7lDflX.js → index-DK4XLlFq.js} +2 -2
  76. package/dist/chunks/{index-CR7lDflX.js.map → index-DK4XLlFq.js.map} +1 -1
  77. package/dist/chunks/{version-CrZ_Be4I.js → version-CW2DfDse.js} +2 -2
  78. package/dist/chunks/{version-CrZ_Be4I.js.map → version-CW2DfDse.js.map} +1 -1
  79. package/dist/chunks/{version-7FRWIcUM.js → version-oD_R3fUg.js} +2 -2
  80. package/dist/chunks/{version-7FRWIcUM.js.map → version-oD_R3fUg.js.map} +1 -1
  81. package/dist/docit.cjs.js +1 -1
  82. package/dist/docit.es.js +1 -1
  83. package/dist/index.cjs.js +1 -1
  84. package/dist/index.cjs.js.map +1 -1
  85. package/dist/index.es.js +1 -1
  86. package/dist/index.es.js.map +1 -1
  87. package/dist/lightbox.cjs.js +1 -1
  88. package/dist/lightbox.es.js +1 -1
  89. package/dist/map.cjs.js +1 -1
  90. package/dist/map.es.js +1 -1
  91. package/dist/timeline.cjs.js +1 -1
  92. package/dist/timeline.es.js +1 -1
  93. package/dist/user-profile.cjs.js +1 -1
  94. package/dist/user-profile.es.js +1 -1
  95. package/dist/web-mojo.lite.iife.js +131 -40
  96. package/dist/web-mojo.lite.iife.js.map +1 -1
  97. package/dist/web-mojo.lite.iife.min.js +69 -69
  98. package/dist/web-mojo.lite.iife.min.js.map +1 -1
  99. package/package.json +1 -1
  100. package/dist/chunks/ChatView-Cwwb-A47.js +0 -2
  101. package/dist/chunks/ChatView-Cwwb-A47.js.map +0 -1
  102. package/dist/chunks/ChatView-DCW_0GFg.js +0 -2
  103. package/dist/chunks/ChatView-DCW_0GFg.js.map +0 -1
  104. package/dist/chunks/Collection-BUv4E9op.js +0 -2
  105. package/dist/chunks/Collection-BUv4E9op.js.map +0 -1
  106. package/dist/chunks/Collection-r1ACzUeh.js +0 -2
  107. package/dist/chunks/Collection-r1ACzUeh.js.map +0 -1
  108. package/dist/chunks/Dialog-CdIM9IyH.js +0 -3
  109. package/dist/chunks/Dialog-CdIM9IyH.js.map +0 -1
  110. package/dist/chunks/Dialog-DZ4cPzBO.js +0 -3
  111. package/dist/chunks/Dialog-DZ4cPzBO.js.map +0 -1
  112. package/dist/chunks/FormView-BG-huF2q.js +0 -3
  113. package/dist/chunks/FormView-BG-huF2q.js.map +0 -1
  114. package/dist/chunks/FormView-BGkZo_M5.js +0 -3
  115. package/dist/chunks/FormView-BGkZo_M5.js.map +0 -1
  116. package/dist/chunks/MetricsCountryMapView-C5kQA6xw.js +0 -2
  117. package/dist/chunks/MetricsCountryMapView-D1WtxmEc.js +0 -2
@@ -4023,6 +4023,9 @@ var MOJO = (function(exports) {
4023
4023
  const actionEl = event.target.closest("[data-action]");
4024
4024
  if (actionEl && this.shouldHandle(actionEl, event)) {
4025
4025
  const action = actionEl.getAttribute("data-action");
4026
+ if (actionEl.tagName === "A") {
4027
+ event.preventDefault();
4028
+ }
4026
4029
  this.hideTooltip(actionEl);
4027
4030
  const handled = await this.dispatch(action, event, actionEl);
4028
4031
  if (handled) {
@@ -7213,38 +7216,105 @@ var MOJO = (function(exports) {
7213
7216
  return this.hasPermission(p);
7214
7217
  }
7215
7218
  }
7219
+ User.CATEGORY_PERMISSIONS = [
7220
+ { name: "security", label: "Security", tooltip: "Incidents, events, rules, tickets, firewall, bouncer, GeoIP, system logs" },
7221
+ { name: "users", label: "Users", tooltip: "User records, passkeys, TOTP, API keys, OAuth, devices, locations" },
7222
+ { name: "groups", label: "Groups", tooltip: "Groups, members, group API keys, settings" },
7223
+ { name: "comms", label: "Communications", tooltip: "Email, phone, SMS, push notifications, chat, notifications" },
7224
+ { name: "jobs", label: "Jobs", tooltip: "Jobs, job events, job logs, runners, queue control, system stats" },
7225
+ { name: "metrics", label: "Metrics", tooltip: "Metrics recording, fetching, categories, values, permissions" },
7226
+ { name: "files", label: "Files", tooltip: "File managers, files, renditions, vault files, vault data, S3 buckets" }
7227
+ ];
7228
+ User.GRANULAR_PERMISSION_TABS = [
7229
+ {
7230
+ label: "Account",
7231
+ permissions: [
7232
+ { name: "view_users", label: "View Users" },
7233
+ { name: "manage_users", label: "Manage Users" },
7234
+ { name: "view_groups", label: "View Groups" },
7235
+ { name: "manage_groups", label: "Manage Groups" },
7236
+ { name: "manage_group", label: "Manage Own Group" },
7237
+ { name: "view_members", label: "View Members" },
7238
+ { name: "manage_settings", label: "Manage Settings" }
7239
+ ]
7240
+ },
7241
+ {
7242
+ label: "Communication",
7243
+ permissions: [
7244
+ { name: "manage_chat", label: "Manage Chat" },
7245
+ { name: "manage_aws", label: "Manage Email (AWS)" },
7246
+ { name: "view_notifications", label: "View Notifications" },
7247
+ { name: "manage_notifications", label: "Manage Notifications" },
7248
+ { name: "send_notifications", label: "Send Notifications" },
7249
+ { name: "view_devices", label: "View Push Devices" },
7250
+ { name: "manage_devices", label: "Manage Push Devices" },
7251
+ { name: "manage_push_config", label: "Push Config" },
7252
+ { name: "view_phone_numbers", label: "View Phone Numbers" },
7253
+ { name: "manage_phone_numbers", label: "Manage Phone Numbers" },
7254
+ { name: "manage_phone_config", label: "Phone Config" },
7255
+ { name: "view_sms", label: "View SMS" },
7256
+ { name: "manage_sms", label: "Manage SMS" },
7257
+ { name: "send_sms", label: "Send SMS" }
7258
+ ]
7259
+ },
7260
+ {
7261
+ label: "Platform",
7262
+ permissions: [
7263
+ { name: "view_security", label: "View Security" },
7264
+ { name: "manage_security", label: "Manage Security" },
7265
+ { name: "admin", label: "Log Admin" },
7266
+ { name: "view_logs", label: "View Logs" },
7267
+ { name: "manage_logs", label: "Manage Logs" },
7268
+ { name: "view_jobs", label: "View Jobs" },
7269
+ { name: "manage_jobs", label: "Manage Jobs" },
7270
+ { name: "view_metrics", label: "View Metrics" },
7271
+ { name: "manage_metrics", label: "Manage Metrics" },
7272
+ { name: "write_metrics", label: "Write Metrics" },
7273
+ { name: "view_fileman", label: "View File Managers" },
7274
+ { name: "manage_files", label: "Manage Files" },
7275
+ { name: "view_vault", label: "View Vault" },
7276
+ { name: "manage_vault", label: "Manage Vault" },
7277
+ { name: "manage_docit", label: "Manage Docs" },
7278
+ { name: "manage_shortlinks", label: "Manage Shortlinks" }
7279
+ ]
7280
+ }
7281
+ ];
7282
+ User.APP_CATEGORY_PERMISSIONS = [];
7283
+ User.APP_GRANULAR_PERMISSIONS = [];
7216
7284
  User.PERMISSIONS = [
7217
- { name: "manage_users", label: "Manage Users" },
7218
- { name: "view_users", label: "View Users" },
7219
- { name: "view_groups", label: "View Groups" },
7220
- { name: "manage_groups", label: "Manage Groups" },
7221
- { name: "view_metrics", label: "View System Metrics" },
7222
- { name: "manage_metrics", label: "Manage System Metrics" },
7223
- { name: "view_logs", label: "View Logs" },
7224
- { name: "view_incidents", label: "View Incidents" },
7225
- { name: "manage_incidents", label: "Manage Incidents" },
7226
- { name: "view_tickets", label: "View Tickets" },
7227
- { name: "manage_tickets", label: "Manage Tickets" },
7228
- { name: "view_admin", label: "View Admin" },
7229
- { name: "view_jobs", label: "View Jobs" },
7230
- { name: "manage_jobs", label: "Manage Jobs" },
7231
- { name: "view_global", label: "View Global" },
7232
- { name: "manage_notifications", label: "Manage Notifications" },
7233
- { name: "manage_files", label: "Manage Files" },
7234
- { name: "force_single_session", label: "Force Single Session" },
7235
- { name: "file_vault", label: "Access File Vault" },
7236
- { name: "manage_aws", label: "Manage AWS" },
7237
- { name: "manage_docit", label: "Manage DocIt" },
7238
- { name: "manage_settings", label: "Django Settings" }
7285
+ ...User.CATEGORY_PERMISSIONS,
7286
+ ...User.GRANULAR_PERMISSION_TABS.flatMap((tab) => tab.permissions),
7287
+ ...User.APP_CATEGORY_PERMISSIONS,
7288
+ ...User.APP_GRANULAR_PERMISSIONS
7239
7289
  ];
7240
7290
  User.PERMISSION_FIELDS = [
7241
7291
  ...User.PERMISSIONS.map((permission) => ({
7242
7292
  name: `permissions.${permission.name}`,
7243
7293
  type: "switch",
7244
7294
  label: permission.label,
7245
- columns: 4
7295
+ columns: 6
7246
7296
  }))
7247
7297
  ];
7298
+ const _permSwitch = (p) => ({ name: `permissions.${p.name}`, type: "switch", label: p.label, columns: 6, ...p.tooltip ? { tooltip: p.tooltip } : {} });
7299
+ User.CATEGORY_PERMISSION_FIELDS = (() => {
7300
+ const tabs = [
7301
+ { label: "System", fields: User.CATEGORY_PERMISSIONS.map(_permSwitch) }
7302
+ ];
7303
+ if (User.APP_CATEGORY_PERMISSIONS.length > 0) {
7304
+ tabs.push({ label: "App", fields: User.APP_CATEGORY_PERMISSIONS.map(_permSwitch) });
7305
+ }
7306
+ return [{ type: "tabset", tabs }];
7307
+ })();
7308
+ User.GRANULAR_PERMISSION_FIELDS = (() => {
7309
+ const tabs = User.GRANULAR_PERMISSION_TABS.map((tab) => ({
7310
+ label: tab.label,
7311
+ fields: tab.permissions.map(_permSwitch)
7312
+ }));
7313
+ if (User.APP_GRANULAR_PERMISSIONS.length > 0) {
7314
+ tabs.push({ label: "App", fields: User.APP_GRANULAR_PERMISSIONS.map(_permSwitch) });
7315
+ }
7316
+ return [{ type: "tabset", tabs }];
7317
+ })();
7248
7318
  const UserForms = {
7249
7319
  create: {
7250
7320
  title: "Create User",
@@ -10552,7 +10622,7 @@ var MOJO = (function(exports) {
10552
10622
  <div class="mojo-form-control">
10553
10623
  {{#label}}
10554
10624
  <label for="{{fieldId}}" class="{{labelClass}}">
10555
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10625
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10556
10626
  </label>
10557
10627
  {{/label}}
10558
10628
  {{#showCopy}}
@@ -10582,7 +10652,7 @@ var MOJO = (function(exports) {
10582
10652
  <div class="mojo-form-control">
10583
10653
  {{#label}}
10584
10654
  <label for="{{fieldId}}" class="{{labelClass}}">
10585
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10655
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10586
10656
  </label>
10587
10657
  {{/label}}
10588
10658
  <div class="input-group">
@@ -10624,7 +10694,7 @@ var MOJO = (function(exports) {
10624
10694
  <div class="mojo-form-control">
10625
10695
  {{#label}}
10626
10696
  <label for="{{fieldId}}" class="{{labelClass}}">
10627
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10697
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10628
10698
  </label>
10629
10699
  {{/label}}
10630
10700
  {{#showCopy}}
@@ -10652,7 +10722,7 @@ var MOJO = (function(exports) {
10652
10722
  <div class="mojo-form-control">
10653
10723
  {{#label}}
10654
10724
  <label for="{{fieldId}}" class="{{labelClass}}">
10655
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10725
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10656
10726
  </label>
10657
10727
  {{/label}}
10658
10728
  <div class="position-relative">
@@ -10688,7 +10758,7 @@ var MOJO = (function(exports) {
10688
10758
  <div class="mojo-form-control">
10689
10759
  {{#label}}
10690
10760
  <label for="{{fieldId}}" class="{{labelClass}}">
10691
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10761
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10692
10762
  </label>
10693
10763
  {{/label}}
10694
10764
  {{#searchInput}}{{{searchInput}}}{{/searchInput}}
@@ -10708,7 +10778,7 @@ var MOJO = (function(exports) {
10708
10778
  class="form-check-input{{#error}} is-invalid{{/error}}" value="{{value}}"
10709
10779
  {{#checked}}checked{{/checked}} {{#required}}required{{/required}}
10710
10780
  {{#disabled}}disabled{{/disabled}} {{{attrs}}}>
10711
- <label class="form-check-label" for="{{fieldId}}">{{label}}</label>
10781
+ <label class="form-check-label" for="{{fieldId}}">{{label}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}</label>
10712
10782
  </div>
10713
10783
  {{#help}}<div class="{{helpClass}}">{{help}}</div>{{/help}}
10714
10784
  {{#error}}<div class="{{errorClass}}">{{error}}</div>{{/error}}
@@ -10722,7 +10792,7 @@ var MOJO = (function(exports) {
10722
10792
  {{#checked}}checked{{/checked}} {{#required}}required{{/required}}
10723
10793
  {{#disabled}}disabled{{/disabled}} data-change-action="toggle-switch"
10724
10794
  data-field="{{name}}" {{{attrs}}}>
10725
- <label class="form-check-label" for="{{fieldId}}">{{label}}</label>
10795
+ <label class="form-check-label" for="{{fieldId}}">{{label}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}</label>
10726
10796
  </div>
10727
10797
  {{#help}}<div class="{{helpClass}}">{{help}}</div>{{/help}}
10728
10798
  {{#error}}<div class="{{errorClass}}">{{error}}</div>{{/error}}
@@ -10732,7 +10802,7 @@ var MOJO = (function(exports) {
10732
10802
  <div class="mojo-form-control" style="display: flex; flex-direction: column; align-items: center;">
10733
10803
  {{#label}}
10734
10804
  <label for="{{fieldId}}" class="{{labelClass}}">
10735
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10805
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10736
10806
  </label>
10737
10807
  {{/label}}
10738
10808
  <div class="image-field-container {{containerClass}}" id="{{dropZoneId}}" style="width: {{width}}px; height: {{height}}px;">
@@ -10780,7 +10850,7 @@ var MOJO = (function(exports) {
10780
10850
  <div class="mojo-form-control">
10781
10851
  {{#label}}
10782
10852
  <label for="{{fieldId}}" class="{{labelClass}}">
10783
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10853
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10784
10854
  </label>
10785
10855
  {{/label}}
10786
10856
  <input type="file" id="{{fieldId}}" name="{{name}}" class="{{inputClass}}{{#error}} is-invalid{{/error}}"
@@ -10883,7 +10953,7 @@ var MOJO = (function(exports) {
10883
10953
  <div class="mojo-form-control">
10884
10954
  {{#label}}
10885
10955
  <label for="{{fieldId}}" class="{{labelClass}}">
10886
- {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}
10956
+ {{label}}{{#required}}<span class="text-danger">*</span>{{/required}}{{#tooltip}} <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="{{tooltip}}" style="font-size: 0.75rem; cursor: help;"></i>{{/tooltip}}
10887
10957
  </label>
10888
10958
  {{/label}}
10889
10959
  <div class="d-flex align-items-center gap-2">
@@ -11431,6 +11501,7 @@ var MOJO = (function(exports) {
11431
11501
  label: label ? this.escapeHtml(label) : null,
11432
11502
  placeholder: placeholder ? this.escapeHtml(placeholder) : null,
11433
11503
  help: help ? this.escapeHtml(help) : null,
11504
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11434
11505
  error: error ? this.escapeHtml(error) : null,
11435
11506
  required,
11436
11507
  disabled,
@@ -11495,6 +11566,7 @@ var MOJO = (function(exports) {
11495
11566
  label: label ? this.escapeHtml(label) : null,
11496
11567
  placeholder: placeholder ? this.escapeHtml(placeholder) : null,
11497
11568
  help: help ? this.escapeHtml(help) : null,
11569
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11498
11570
  error: error ? this.escapeHtml(error) : null,
11499
11571
  rows: rows || 3,
11500
11572
  required,
@@ -11541,6 +11613,7 @@ var MOJO = (function(exports) {
11541
11613
  label: label ? this.escapeHtml(label) : null,
11542
11614
  placeholder: placeholder ? this.escapeHtml(placeholder) : null,
11543
11615
  help: help ? this.escapeHtml(help) : null,
11616
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11544
11617
  error: error ? this.escapeHtml(error) : null,
11545
11618
  rows: rows || 5,
11546
11619
  required,
@@ -11599,6 +11672,7 @@ var MOJO = (function(exports) {
11599
11672
  label: label ? this.escapeHtml(label) : null,
11600
11673
  placeholder: placeholder ? this.escapeHtml(placeholder) : null,
11601
11674
  help: help ? this.escapeHtml(help) : null,
11675
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11602
11676
  error: error ? this.escapeHtml(error) : null,
11603
11677
  rows: rows || 3,
11604
11678
  required,
@@ -11676,6 +11750,7 @@ var MOJO = (function(exports) {
11676
11750
  name,
11677
11751
  label: label ? this.escapeHtml(label) : null,
11678
11752
  help: help ? this.escapeHtml(help) : null,
11753
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11679
11754
  error: error ? this.escapeHtml(error) : null,
11680
11755
  searchInput: searchable ? searchInput : null,
11681
11756
  optionsHTML,
@@ -11762,6 +11837,7 @@ var MOJO = (function(exports) {
11762
11837
  name,
11763
11838
  label: this.escapeHtml(label),
11764
11839
  help: help ? this.escapeHtml(help) : null,
11840
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11765
11841
  error: error ? this.escapeHtml(error) : null,
11766
11842
  value: this.escapeHtml(value),
11767
11843
  fieldClass,
@@ -11802,6 +11878,7 @@ var MOJO = (function(exports) {
11802
11878
  name,
11803
11879
  label: this.escapeHtml(label),
11804
11880
  help: help ? this.escapeHtml(help) : null,
11881
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11805
11882
  error: error ? this.escapeHtml(error) : null,
11806
11883
  value: this.escapeHtml(value),
11807
11884
  sizeClass,
@@ -11864,7 +11941,7 @@ var MOJO = (function(exports) {
11864
11941
  return `
11865
11942
  <div class="mojo-form-control">
11866
11943
  ${label ? `<fieldset>
11867
- <legend class="${this.options.labelClass}">${this.escapeHtml(label)}</legend>
11944
+ <legend class="${this.options.labelClass}">${this.escapeHtml(label)}${this.renderTooltipIcon(field)}</legend>
11868
11945
  <div class="${fieldClass}">
11869
11946
  ${optionsHTML}
11870
11947
  </div>
@@ -11928,6 +12005,7 @@ var MOJO = (function(exports) {
11928
12005
  name,
11929
12006
  label: label ? this.escapeHtml(label) : null,
11930
12007
  help: help ? this.escapeHtml(help) : null,
12008
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11931
12009
  error: error ? this.escapeHtml(error) : null,
11932
12010
  accept,
11933
12011
  required,
@@ -11981,6 +12059,7 @@ var MOJO = (function(exports) {
11981
12059
  name,
11982
12060
  label: label ? this.escapeHtml(label) : null,
11983
12061
  help: help ? this.escapeHtml(help) : null,
12062
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
11984
12063
  error: error ? this.escapeHtml(error) : null,
11985
12064
  dropZoneId,
11986
12065
  previewId,
@@ -12064,6 +12143,7 @@ var MOJO = (function(exports) {
12064
12143
  label: label ? this.escapeHtml(label) : null,
12065
12144
  placeholder: placeholder ? this.escapeHtml(placeholder) : null,
12066
12145
  help: help ? this.escapeHtml(help) : null,
12146
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
12067
12147
  error: error ? this.escapeHtml(error) : null,
12068
12148
  required,
12069
12149
  disabled,
@@ -12104,6 +12184,7 @@ var MOJO = (function(exports) {
12104
12184
  name,
12105
12185
  label: label ? this.escapeHtml(label) : null,
12106
12186
  help: help ? this.escapeHtml(help) : null,
12187
+ tooltip: field.tooltip ? this.escapeHtml(field.tooltip) : null,
12107
12188
  error: error ? this.escapeHtml(error) : null,
12108
12189
  min,
12109
12190
  max,
@@ -12277,7 +12358,7 @@ var MOJO = (function(exports) {
12277
12358
  const fieldValue = this.getFieldValue(name) ?? value;
12278
12359
  return `
12279
12360
  <div class="mojo-form-control">
12280
- ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
12361
+ ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}${this.renderTooltipIcon(field)}</label>` : ""}
12281
12362
  <div class="tag-input-placeholder"
12282
12363
  data-field-name="${name}"
12283
12364
  data-field-type="tag"
@@ -12336,7 +12417,7 @@ var MOJO = (function(exports) {
12336
12417
  const fieldValue = this.getFieldValue(name) ?? value;
12337
12418
  return `
12338
12419
  <div class="mojo-form-control">
12339
- ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
12420
+ ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}${this.renderTooltipIcon(field)}</label>` : ""}
12340
12421
  <div class="collection-select-placeholder"
12341
12422
  data-field-name="${name}"
12342
12423
  data-field-type="collection"
@@ -12402,7 +12483,7 @@ var MOJO = (function(exports) {
12402
12483
  const fieldValue = this.getFieldValue(name) ?? value;
12403
12484
  return `
12404
12485
  <div class="mojo-form-control">
12405
- ${label ? `<label class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
12486
+ ${label ? `<label class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}${this.renderTooltipIcon(field)}</label>` : ""}
12406
12487
  <div class="collection-multiselect-placeholder"
12407
12488
  data-field-name="${name}"
12408
12489
  data-field-type="collectionmultiselect"
@@ -12456,7 +12537,7 @@ var MOJO = (function(exports) {
12456
12537
  const fieldValue = this.getFieldValue(name) ?? value;
12457
12538
  return `
12458
12539
  <div class="mojo-form-control">
12459
- ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
12540
+ ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}${this.renderTooltipIcon(field)}</label>` : ""}
12460
12541
  <div class="date-picker-placeholder"
12461
12542
  data-field-name="${name}"
12462
12543
  data-field-type="datepicker"
@@ -12525,7 +12606,7 @@ var MOJO = (function(exports) {
12525
12606
  const endValue = this.getFieldValue(endFieldName) || endDate;
12526
12607
  return `
12527
12608
  <div class="mojo-form-control">
12528
- ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
12609
+ ${label ? `<label for="${fieldId}" class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}${this.renderTooltipIcon(field)}</label>` : ""}
12529
12610
  <div class="date-range-picker-placeholder"
12530
12611
  data-field-name="${name || startName || "daterange"}"
12531
12612
  data-field-type="daterange"
@@ -12670,7 +12751,7 @@ var MOJO = (function(exports) {
12670
12751
  const fieldValue = field.value ?? this.getFieldValue(name) ?? value;
12671
12752
  return `
12672
12753
  <div class="mojo-form-control">
12673
- ${label ? `<label class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}</label>` : ""}
12754
+ ${label ? `<label class="${this.options.labelClass}">${this.escapeHtml(label)}${required ? '<span class="text-danger">*</span>' : ""}${this.renderTooltipIcon(field)}</label>` : ""}
12674
12755
  <div class="combobox-placeholder"
12675
12756
  data-field-name="${name}"
12676
12757
  data-field-type="combobox"
@@ -12848,6 +12929,15 @@ var MOJO = (function(exports) {
12848
12929
  div.textContent = String(str);
12849
12930
  return div.innerHTML;
12850
12931
  }
12932
+ /**
12933
+ * Render a tooltip icon for a field
12934
+ * @param {Object} field - Field configuration with optional tooltip property
12935
+ * @returns {string} HTML for tooltip icon, or empty string
12936
+ */
12937
+ renderTooltipIcon(field) {
12938
+ if (!field || !field.tooltip) return "";
12939
+ return ` <i class="bi bi-info-circle text-muted" data-bs-toggle="tooltip" title="${this.escapeHtml(field.tooltip)}" style="font-size: 0.75rem; cursor: help;"></i>`;
12940
+ }
12851
12941
  }
12852
12942
  const FileDropMixin = {
12853
12943
  /**
@@ -16907,6 +16997,7 @@ var MOJO = (function(exports) {
16907
16997
  super({
16908
16998
  tagName: "div",
16909
16999
  className: "form-view",
17000
+ enableTooltips: true,
16910
17001
  ...viewOptions
16911
17002
  });
16912
17003
  FormPlugins.onFormViewInit?.(this);