web-mojo 2.1.295 → 2.1.338

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 (68) 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 +54 -53
  4. package/dist/admin.es.js.map +1 -1
  5. package/dist/auth.cjs.js +1 -1
  6. package/dist/auth.cjs.js.map +1 -1
  7. package/dist/auth.es.js +3 -3
  8. package/dist/auth.es.js.map +1 -1
  9. package/dist/charts.cjs.js +1 -1
  10. package/dist/charts.es.js +2 -2
  11. package/dist/chunks/{ContextMenu-DKKmjtgo.js → ContextMenu-BRqHEC2q.js} +106 -29
  12. package/dist/chunks/ContextMenu-BRqHEC2q.js.map +1 -0
  13. package/dist/chunks/ContextMenu-DoWfr0BY.js +3 -0
  14. package/dist/chunks/ContextMenu-DoWfr0BY.js.map +1 -0
  15. package/dist/chunks/{DataView-CX04UO6n.js → DataView-DgOTz7NS.js} +2 -2
  16. package/dist/chunks/{DataView-CX04UO6n.js.map → DataView-DgOTz7NS.js.map} +1 -1
  17. package/dist/chunks/{DataView-CjjREbqE.js → DataView-FYalUi83.js} +2 -2
  18. package/dist/chunks/{DataView-CjjREbqE.js.map → DataView-FYalUi83.js.map} +1 -1
  19. package/dist/chunks/{Dialog-Dvb1SU1y.js → Dialog-CpvYwnK7.js} +2 -2
  20. package/dist/chunks/{Dialog-Dvb1SU1y.js.map → Dialog-CpvYwnK7.js.map} +1 -1
  21. package/dist/chunks/{Dialog-C7XcgLt8.js → Dialog-D7HCQQMK.js} +5 -5
  22. package/dist/chunks/{Dialog-C7XcgLt8.js.map → Dialog-D7HCQQMK.js.map} +1 -1
  23. package/dist/chunks/{FilePreviewView-CB0yqQtV.js → FilePreviewView-BokAhylL.js} +13 -10
  24. package/dist/chunks/FilePreviewView-BokAhylL.js.map +1 -0
  25. package/dist/chunks/FilePreviewView-Ct4v1mkr.js +2 -0
  26. package/dist/chunks/FilePreviewView-Ct4v1mkr.js.map +1 -0
  27. package/dist/chunks/{FormView-DJxUvj0p.js → FormView-CWNpkr0M.js} +212 -67
  28. package/dist/chunks/FormView-CWNpkr0M.js.map +1 -0
  29. package/dist/chunks/FormView-WUi-NXkB.js +2 -0
  30. package/dist/chunks/FormView-WUi-NXkB.js.map +1 -0
  31. package/dist/chunks/{MetricsChart-DQUOkYQ9.js → MetricsChart-2JMgp_0p.js} +2 -2
  32. package/dist/chunks/{MetricsChart-DQUOkYQ9.js.map → MetricsChart-2JMgp_0p.js.map} +1 -1
  33. package/dist/chunks/{MetricsChart-CpfACPrE.js → MetricsChart-CgX9kX8T.js} +3 -3
  34. package/dist/chunks/{MetricsChart-CpfACPrE.js.map → MetricsChart-CgX9kX8T.js.map} +1 -1
  35. package/dist/chunks/{PDFViewer-BUOnvSfV.js → PDFViewer-BZSQSArl.js} +2 -2
  36. package/dist/chunks/{PDFViewer-BUOnvSfV.js.map → PDFViewer-BZSQSArl.js.map} +1 -1
  37. package/dist/chunks/{PDFViewer-I1qlINnm.js → PDFViewer-kZOAIH9e.js} +3 -3
  38. package/dist/chunks/{PDFViewer-I1qlINnm.js.map → PDFViewer-kZOAIH9e.js.map} +1 -1
  39. package/dist/chunks/{Page-ZtYiac8Q.js → Page-BnFeIkwG.js} +2 -2
  40. package/dist/chunks/{Page-ZtYiac8Q.js.map → Page-BnFeIkwG.js.map} +1 -1
  41. package/dist/chunks/{Page-h5bbwzKf.js → Page-CHwwfFau.js} +2 -2
  42. package/dist/chunks/{Page-h5bbwzKf.js.map → Page-CHwwfFau.js.map} +1 -1
  43. package/dist/chunks/{TopNav-DVX8V6fL.js → TopNav-BSelpZnA.js} +2 -2
  44. package/dist/chunks/{TopNav-DVX8V6fL.js.map → TopNav-BSelpZnA.js.map} +1 -1
  45. package/dist/chunks/{TopNav-mtuzmduR.js → TopNav-V_BlTDgB.js} +2 -2
  46. package/dist/chunks/{TopNav-mtuzmduR.js.map → TopNav-V_BlTDgB.js.map} +1 -1
  47. package/dist/chunks/{WebApp-BgZwmmBY.js → WebApp-CEW6rw8N.js} +12 -12
  48. package/dist/chunks/{WebApp-BgZwmmBY.js.map → WebApp-CEW6rw8N.js.map} +1 -1
  49. package/dist/chunks/{WebApp-C_DpNvNx.js → WebApp-CTalj3eA.js} +2 -2
  50. package/dist/chunks/{WebApp-C_DpNvNx.js.map → WebApp-CTalj3eA.js.map} +1 -1
  51. package/dist/core.css +114 -0
  52. package/dist/css/web-mojo.css +1 -1
  53. package/dist/docit.cjs.js +1 -1
  54. package/dist/docit.es.js +5 -5
  55. package/dist/index.cjs.js +1 -1
  56. package/dist/index.es.js +11 -11
  57. package/dist/lightbox.cjs.js +1 -1
  58. package/dist/lightbox.es.js +4 -4
  59. package/package.json +1 -1
  60. package/dist/chunks/ContextMenu-BhyvSOLE.js +0 -3
  61. package/dist/chunks/ContextMenu-BhyvSOLE.js.map +0 -1
  62. package/dist/chunks/ContextMenu-DKKmjtgo.js.map +0 -1
  63. package/dist/chunks/FilePreviewView-CB0yqQtV.js.map +0 -1
  64. package/dist/chunks/FilePreviewView-DgVmlBjn.js +0 -2
  65. package/dist/chunks/FilePreviewView-DgVmlBjn.js.map +0 -1
  66. package/dist/chunks/FormView-CWFqrlKb.js +0 -2
  67. package/dist/chunks/FormView-CWFqrlKb.js.map +0 -1
  68. package/dist/chunks/FormView-DJxUvj0p.js.map +0 -1
package/dist/admin.es.js CHANGED
@@ -1,13 +1,13 @@
1
- import { P as Page } from "./chunks/Page-h5bbwzKf.js";
2
- import { V as View, h as MOJOUtils } from "./chunks/WebApp-BgZwmmBY.js";
3
- import { B, b, a, c, e, f, W } from "./chunks/WebApp-BgZwmmBY.js";
4
- import Dialog$1 from "./chunks/Dialog-C7XcgLt8.js";
5
- import { M as MetricsChart, P as PieChart } from "./chunks/MetricsChart-CpfACPrE.js";
6
- import { b as TablePage, i as EmailDomainForms, h as EmailDomainList, E as EmailDomain, l as MailboxForms, k as MailboxList, j as Mailbox, p as EmailTemplate, d as TabView, r as EmailTemplateForms, q as EmailTemplateList, I as IncidentEvent, z as IncidentEventForms, y as IncidentEventList, u as FileManagerForms, t as FileManagerList, v as File, T as TableView, x as FileForms, w as FileList, am as GeoLocatedIP, an as GeoLocatedIPList, a7 as MemberList, a6 as LogList, ap as TicketList, B as IncidentList, V as IncidentStats, N as IncidentHistoryList, K as IncidentHistory, F as FilePreviewView, A as Incident, C as IncidentForms, W as Job, a0 as JobEventList, _ as JobLogList, Y as JobForms, X as JobList, a3 as JobRunnerList, a1 as JobsEngineStats, a4 as JobRunnerForms, a2 as JobRunner, a5 as Log, M as Member, a8 as MemberForms, a9 as MetricsPermission, ab as MetricsForms, aa as MetricsPermissionList, ak as PushConfigForms, ah as PushConfigList, aj as PushDeliveryList, ad as PushDeviceList, al as PushTemplateForms, af as PushTemplateList, R as RuleSet, U as RuleList, O as RuleSetList, g as S3BucketForms, f as S3BucketList, m as SentMessage, n as SentMessageList, ar as TicketNoteList, aq as TicketNote, ao as Ticket, as as TicketForms, at as TicketCategories } from "./chunks/FilePreviewView-CB0yqQtV.js";
7
- import DataView from "./chunks/DataView-CX04UO6n.js";
8
- import { b as ContextMenu, C as Collection, a as Group, G as GroupList, c as GroupForms, g as UserDevice, j as UserDeviceLocationList, h as UserDeviceList, U as User, f as UserDataView, e as UserForms, d as UserList } from "./chunks/ContextMenu-DKKmjtgo.js";
9
- import { L as LightboxGallery, P as PDFViewer } from "./chunks/PDFViewer-I1qlINnm.js";
10
- import { a as applyFileDropMixin } from "./chunks/FormView-DJxUvj0p.js";
1
+ import { P as Page } from "./chunks/Page-CHwwfFau.js";
2
+ import { V as View, h as MOJOUtils } from "./chunks/WebApp-CEW6rw8N.js";
3
+ import { B, b, a, c, e, f, W } from "./chunks/WebApp-CEW6rw8N.js";
4
+ import Dialog$1 from "./chunks/Dialog-D7HCQQMK.js";
5
+ import { M as MetricsChart, P as PieChart } from "./chunks/MetricsChart-CgX9kX8T.js";
6
+ import { b as TablePage, i as EmailDomainForms, h as EmailDomainList, E as EmailDomain, l as MailboxForms, k as MailboxList, j as Mailbox, p as EmailTemplate, d as TabView, r as EmailTemplateForms, q as EmailTemplateList, I as IncidentEvent, z as IncidentEventForms, y as IncidentEventList, u as FileManagerForms, t as FileManagerList, v as File, T as TableView, x as FileForms, w as FileList, am as GeoLocatedIP, an as GeoLocatedIPList, a7 as MemberList, a6 as LogList, ap as TicketList, B as IncidentList, V as IncidentStats, N as IncidentHistoryList, K as IncidentHistory, F as FilePreviewView, A as Incident, C as IncidentForms, W as Job, a0 as JobEventList, _ as JobLogList, Y as JobForms, X as JobList, a3 as JobRunnerList, a1 as JobsEngineStats, a4 as JobRunnerForms, a2 as JobRunner, a5 as Log, M as Member, a8 as MemberForms, a9 as MetricsPermission, ab as MetricsForms, aa as MetricsPermissionList, ak as PushConfigForms, ah as PushConfigList, aj as PushDeliveryList, ad as PushDeviceList, al as PushTemplateForms, af as PushTemplateList, R as RuleSet, U as RuleList, O as RuleSetList, g as S3BucketForms, f as S3BucketList, m as SentMessage, n as SentMessageList, ar as TicketNoteList, aq as TicketNote, ao as Ticket, as as TicketForms, at as TicketCategories } from "./chunks/FilePreviewView-BokAhylL.js";
7
+ import DataView from "./chunks/DataView-DgOTz7NS.js";
8
+ import { b as ContextMenu, C as Collection, a as Group, G as GroupList, c as GroupForms, g as UserDevice, j as UserDeviceLocationList, h as UserDeviceList, U as User, f as UserDataView, e as UserForms, d as UserList } from "./chunks/ContextMenu-BRqHEC2q.js";
9
+ import { L as LightboxGallery, P as PDFViewer } from "./chunks/PDFViewer-kZOAIH9e.js";
10
+ import { a as applyFileDropMixin, F as FormView } from "./chunks/FormView-CWNpkr0M.js";
11
11
  class AdminHeaderView extends View {
12
12
  constructor(options = {}) {
13
13
  super({
@@ -7385,46 +7385,59 @@ class UserView extends View {
7385
7385
  this.template = `
7386
7386
  <div class="user-view-container">
7387
7387
  <!-- User Header -->
7388
- <div class="d-flex justify-content-between align-items-start mb-4">
7389
- <!-- Left Side: Primary Identity -->
7390
- <div class="d-flex align-items-center gap-3">
7391
- {{{model.avatar|avatar('md','rounded-circle')}}}
7392
- <div>
7393
- <h3 class="mb-0">{{model.display_name|default('Unnamed User')}}</h3>
7394
- <a href="mailto:{{model.email}}" class="text-decoration-none text-body">{{model.email}}</a>
7395
- {{#model.phone_number}}
7396
- <div class="text-muted small mt-1">{{{model.phone_number|phone(false)}}}</div>
7397
- {{/model.phone_number}}
7398
- </div>
7399
- </div>
7400
-
7401
- <!-- Right Side: Status & Actions -->
7402
- <div class="d-flex align-items-start gap-4">
7403
- <div class="text-end">
7404
- <div class="d-flex align-items-center gap-2">
7405
- <i class="bi bi-circle-fill fs-8 {{model.is_active|boolean('text-success','text-secondary')}}"></i>
7406
- <span>{{model.is_active|boolean('Active','Inactive')}}</span>
7407
- </div>
7408
- {{#model.last_activity}}
7409
- <div class="text-muted small mt-1">Last active {{model.last_activity|relative}}</div>
7410
- {{/model.last_activity}}
7411
- </div>
7412
- <div data-container="user-context-menu"></div>
7413
- </div>
7414
- </div>
7415
-
7388
+ <div data-container="user-header"></div>
7416
7389
  <!-- Tab Container -->
7417
7390
  <div data-container="user-tabs"></div>
7418
7391
  </div>
7419
7392
  `;
7420
7393
  }
7421
7394
  async onInit() {
7395
+ this.header = new View({
7396
+ containerId: "user-header",
7397
+ template: `
7398
+ <div class="d-flex justify-content-between align-items-start mb-4">
7399
+ <!-- Left Side: Primary Identity -->
7400
+ <div class="d-flex align-items-center gap-3">
7401
+ {{{model.avatar|avatar('md','rounded-circle')}}}
7402
+ <div>
7403
+ <h3 class="mb-0">{{model.display_name|default('Unnamed User')}}</h3>
7404
+ <a href="mailto:{{model.email}}" class="text-decoration-none text-body">{{model.email}}</a>
7405
+ {{#model.phone_number}}
7406
+ <div class="text-muted small mt-1">{{{model.phone_number|phone(false)}}}</div>
7407
+ {{/model.phone_number}}
7408
+ </div>
7409
+ </div>
7410
+
7411
+ <!-- Right Side: Status & Actions -->
7412
+ <div class="d-flex align-items-start gap-4">
7413
+ <div class="text-end">
7414
+ <div class="d-flex align-items-center gap-2">
7415
+ <i class="bi bi-circle-fill fs-8 {{model.is_active|boolean('text-success','text-secondary')}}"></i>
7416
+ <span>{{model.is_active|boolean('Active','Inactive')}}</span>
7417
+ </div>
7418
+ {{#model.last_activity}}
7419
+ <div class="text-muted small mt-1">Last active {{model.last_activity|relative}}</div>
7420
+ {{/model.last_activity}}
7421
+ </div>
7422
+ <div data-container="user-context-menu"></div>
7423
+ </div>
7424
+ </div>`
7425
+ });
7426
+ this.header.setModel(this.model);
7427
+ this.addChild(this.header);
7422
7428
  this.profileView = new DataView({
7423
7429
  model: this.model,
7424
7430
  className: "p-3",
7425
7431
  showEmptyValues: true,
7426
7432
  fields: UserDataView.profile.fields
7427
7433
  });
7434
+ this.permsView = new FormView({
7435
+ fields: User.PERMISSION_FIELDS,
7436
+ model: this.model,
7437
+ // Set model during construction
7438
+ autosaveModelField: true
7439
+ // Enable auto-save with status indicators
7440
+ });
7428
7441
  const membersCollection = new MemberList({
7429
7442
  params: { user: this.model.get("id"), size: 5 }
7430
7443
  });
@@ -7659,6 +7672,7 @@ class UserView extends View {
7659
7672
  this.tabView = new TabView({
7660
7673
  tabs: {
7661
7674
  "Profile": this.profileView,
7675
+ "Permissions": this.permsView,
7662
7676
  "Groups": this.groupsView,
7663
7677
  "Events": this.eventsView,
7664
7678
  "Logs": this.logsView,
@@ -7729,21 +7743,6 @@ class UserView extends View {
7729
7743
  const logId = element.getAttribute("data-id");
7730
7744
  console.log("View log:", logId);
7731
7745
  }
7732
- // Public methods for external control
7733
- async refreshData() {
7734
- if (this.profileView) {
7735
- await this.profileView.updateData(this.model.getData());
7736
- }
7737
- if (this.groupsView && this.groupsView.collection) {
7738
- await this.groupsView.collection.refresh();
7739
- }
7740
- if (this.eventsView && this.eventsView.collection) {
7741
- await this.eventsView.collection.refresh();
7742
- }
7743
- if (this.logsView && this.logsView.collection) {
7744
- await this.logsView.collection.refresh();
7745
- }
7746
- }
7747
7746
  async showTab(tabName) {
7748
7747
  if (this.tabView) {
7749
7748
  await this.tabView.showTab(tabName);
@@ -7752,6 +7751,8 @@ class UserView extends View {
7752
7751
  getActiveTab() {
7753
7752
  return this.tabView ? this.tabView.getActiveTab() : null;
7754
7753
  }
7754
+ _onModelChange() {
7755
+ }
7755
7756
  // Static factory method
7756
7757
  static create(options = {}) {
7757
7758
  return new UserView(options);