web-mojo 2.1.1087 → 2.1.1091

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 (39) 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 +75 -69
  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 +3 -3
  9. package/dist/chunks/{ChatView-BnC15uoD.js → ChatView-DBYroDpU.js} +2 -2
  10. package/dist/chunks/{ChatView-BnC15uoD.js.map → ChatView-DBYroDpU.js.map} +1 -1
  11. package/dist/chunks/{ChatView-D-5lHZ5H.js → ChatView-Ddginkt8.js} +2 -2
  12. package/dist/chunks/{ChatView-D-5lHZ5H.js.map → ChatView-Ddginkt8.js.map} +1 -1
  13. package/dist/chunks/{Dialog-DHUsZ92-.js → Dialog-DvSrCOj1.js} +2 -3
  14. package/dist/chunks/{Dialog-DHUsZ92-.js.map → Dialog-DvSrCOj1.js.map} +1 -1
  15. package/dist/chunks/{Dialog-BfXN-fFA.js → Dialog-zrXDKGkH.js} +2 -2
  16. package/dist/chunks/{Dialog-BfXN-fFA.js.map → Dialog-zrXDKGkH.js.map} +1 -1
  17. package/dist/chunks/{MetricsMiniChartWidget-BNdGuSZV.js → MetricsMiniChartWidget-C9ou095r.js} +2 -2
  18. package/dist/chunks/{MetricsMiniChartWidget-BNdGuSZV.js.map → MetricsMiniChartWidget-C9ou095r.js.map} +1 -1
  19. package/dist/chunks/{MetricsMiniChartWidget-BKbFGvXG.js → MetricsMiniChartWidget-Z-Iz-gxt.js} +2 -2
  20. package/dist/chunks/{MetricsMiniChartWidget-BKbFGvXG.js.map → MetricsMiniChartWidget-Z-Iz-gxt.js.map} +1 -1
  21. package/dist/chunks/{PDFViewer-nZAQQScE.js → PDFViewer-BXcbKJHv.js} +2 -2
  22. package/dist/chunks/{PDFViewer-nZAQQScE.js.map → PDFViewer-BXcbKJHv.js.map} +1 -1
  23. package/dist/chunks/{PDFViewer-BIBNhuWY.js → PDFViewer-Bq55sL4x.js} +2 -2
  24. package/dist/chunks/{PDFViewer-BIBNhuWY.js.map → PDFViewer-Bq55sL4x.js.map} +1 -1
  25. package/dist/chunks/{TokenManager-N3e5wDu1.js → TokenManager-CJnUh8Sy.js} +2 -2
  26. package/dist/chunks/{TokenManager-N3e5wDu1.js.map → TokenManager-CJnUh8Sy.js.map} +1 -1
  27. package/dist/chunks/{TokenManager-BWc_pRpg.js → TokenManager-D8VO38Nx.js} +2 -2
  28. package/dist/chunks/{TokenManager-BWc_pRpg.js.map → TokenManager-D8VO38Nx.js.map} +1 -1
  29. package/dist/chunks/{version-CKPqwcQJ.js → version-BGbxYq0n.js} +2 -2
  30. package/dist/chunks/{version-CKPqwcQJ.js.map → version-BGbxYq0n.js.map} +1 -1
  31. package/dist/chunks/{version-Dtwh-YkD.js → version-EBP8p8_k.js} +4 -4
  32. package/dist/chunks/{version-Dtwh-YkD.js.map → version-EBP8p8_k.js.map} +1 -1
  33. package/dist/docit.cjs.js +1 -1
  34. package/dist/docit.es.js +3 -3
  35. package/dist/index.cjs.js +1 -1
  36. package/dist/index.es.js +6 -6
  37. package/dist/lightbox.cjs.js +1 -1
  38. package/dist/lightbox.es.js +4 -4
  39. package/package.json +1 -1
package/dist/admin.es.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import { P as Page, C as ContextMenu, a as Group, G as GroupList, b as GroupForms, f as UserDevice, i as UserDeviceLocationList, g as UserDeviceList, U as User, e as UserDataView, d as UserForms, c as UserList } from "./chunks/ContextMenu-Cvls3QC_.js";
2
2
  import { V as View, M as MOJOUtils, r as rest } from "./chunks/Rest-DpbPbmra.js";
3
3
  import "./chunks/WebSocketClient-DghNkEyO.js";
4
- import { D as Dialog$1 } from "./chunks/Dialog-DHUsZ92-.js";
5
- import { W } from "./chunks/Dialog-DHUsZ92-.js";
6
- import { M as MetricsChart, c as MetricsMiniChartWidget, P as PieChart } from "./chunks/MetricsMiniChartWidget-BKbFGvXG.js";
7
- import { b as TablePage, j as EmailDomainForms, i as EmailDomainList, E as EmailDomain, m as MailboxForms, l as MailboxList, k as Mailbox, q as EmailTemplate, c as TabView, s as EmailTemplateForms, r as EmailTemplateList, I as IncidentEvent, A as IncidentEventForms, z as IncidentEventList, v as FileManagerForms, u as FileManagerList, w as File, T as TableView, y as FileForms, x as FileList, au as GeoLocatedIP, ae as LogList, av as GeoLocatedIPList, af as MemberList, ax as TicketList, D as IncidentList, Y as IncidentStats, O as IncidentHistoryList, N as IncidentHistory, B as Incident, C as ChatView, G as IncidentForms, a2 as Job, a8 as JobEventList, a6 as JobLogList, a4 as JobForms, a3 as JobList, ab as JobRunnerList, a9 as JobsEngineStats, ac as JobRunnerForms, aa as JobRunner, ad as Log, M as Member, ag as MemberForms, ah as MetricsPermission, aj as MetricsForms, ai as MetricsPermissionList, as as PushConfigForms, ap as PushConfigList, ar as PushDeliveryList, al as PushDeviceList, at as PushTemplateForms, an as PushTemplateList, R as RuleSet, _ as MatchByOptions, Z as BundleByOptions, W as RuleList, Q as RuleSetList, h as S3BucketForms, g as S3BucketList, n as SentMessage, o as SentMessageList, az as TicketNoteList, ay as TicketNote, aw as Ticket, aA as TicketForms, aB as TicketCategories } from "./chunks/ChatView-D-5lHZ5H.js";
4
+ import { D as Dialog$1 } from "./chunks/Dialog-DvSrCOj1.js";
5
+ import { W } from "./chunks/Dialog-DvSrCOj1.js";
6
+ import { M as MetricsChart, c as MetricsMiniChartWidget, P as PieChart } from "./chunks/MetricsMiniChartWidget-Z-Iz-gxt.js";
7
+ import { b as TablePage, j as EmailDomainForms, i as EmailDomainList, E as EmailDomain, m as MailboxForms, l as MailboxList, k as Mailbox, q as EmailTemplate, c as TabView, s as EmailTemplateForms, r as EmailTemplateList, I as IncidentEvent, A as IncidentEventForms, z as IncidentEventList, v as FileManagerForms, u as FileManagerList, w as File, T as TableView, y as FileForms, x as FileList, au as GeoLocatedIP, ae as LogList, av as GeoLocatedIPList, af as MemberList, ax as TicketList, D as IncidentList, Y as IncidentStats, O as IncidentHistoryList, N as IncidentHistory, B as Incident, C as ChatView, G as IncidentForms, a2 as Job, a8 as JobEventList, a6 as JobLogList, a4 as JobForms, a3 as JobList, ab as JobRunnerList, a9 as JobsEngineStats, ac as JobRunnerForms, aa as JobRunner, ad as Log, M as Member, ag as MemberForms, ah as MetricsPermission, aj as MetricsForms, ai as MetricsPermissionList, as as PushConfigForms, ap as PushConfigList, ar as PushDeliveryList, al as PushDeviceList, at as PushTemplateForms, an as PushTemplateList, R as RuleSet, _ as MatchByOptions, Z as BundleByOptions, W as RuleList, Q as RuleSetList, h as S3BucketForms, g as S3BucketList, n as SentMessage, o as SentMessageList, az as TicketNoteList, ay as TicketNote, aw as Ticket, aA as TicketForms, aB as TicketCategories } from "./chunks/ChatView-Ddginkt8.js";
8
8
  import DataView from "./chunks/DataView-QXyfcg2M.js";
9
9
  import { C as Collection, M as Model } from "./chunks/Collection-CsAk0UhA.js";
10
- import { L as LightboxGallery, P as PDFViewer } from "./chunks/PDFViewer-BIBNhuWY.js";
10
+ import { L as LightboxGallery, P as PDFViewer } from "./chunks/PDFViewer-Bq55sL4x.js";
11
11
  import { a as applyFileDropMixin, F as FormView } from "./chunks/FormView-DGRmcKUG.js";
12
12
  import { MapView } from "./map.es.js";
13
- import { B, a, V, b, c, d } from "./chunks/version-Dtwh-YkD.js";
13
+ import { B, a, V, b, c, d } from "./chunks/version-EBP8p8_k.js";
14
14
  class AdminHeaderView extends View {
15
15
  constructor(options = {}) {
16
16
  super({
@@ -1517,9 +1517,13 @@ class FileTablePage extends TablePage {
1517
1517
  pageName: "Manage Files",
1518
1518
  router: "admin/files",
1519
1519
  Collection: FileList,
1520
- formCreate: FileForms.create,
1520
+ // Don't use formCreate - we have custom file upload handling
1521
1521
  formEdit: FileForms.edit,
1522
1522
  itemViewClass: FileView,
1523
+ // Custom add handler for file uploads
1524
+ onAdd: async (event) => {
1525
+ await this.handleFileUpload(event);
1526
+ },
1523
1527
  viewDialogOptions: {
1524
1528
  header: false,
1525
1529
  size: "xl"
@@ -1599,71 +1603,73 @@ class FileTablePage extends TablePage {
1599
1603
  });
1600
1604
  }
1601
1605
  /**
1602
- * Override the default add action to handle file uploads
1603
- * This ensures both button clicks and drag-drop use the same upload flow
1606
+ * Handle file upload via file picker
1607
+ * Opens native file picker and uses same upload flow as drag-drop
1604
1608
  */
1605
- async onActionAdd(event, element) {
1606
- event.preventDefault();
1607
- const Dialog2 = (await import("./chunks/Dialog-DHUsZ92-.js").then((n) => n.a)).default;
1608
- const formData = await Dialog2.showForm({
1609
- title: "Upload File",
1610
- size: "md",
1611
- fields: [
1612
- {
1613
- type: "file",
1614
- name: "file",
1615
- label: "Select File",
1616
- required: true,
1617
- accept: "*/*",
1618
- help: "Choose a file to upload (max 100MB)"
1619
- },
1620
- {
1621
- type: "text",
1622
- name: "description",
1623
- label: "Description (optional)",
1624
- placeholder: "Enter a description for this file",
1625
- cols: 12
1609
+ async handleFileUpload(event) {
1610
+ if (event) event.preventDefault();
1611
+ const fileInput = document.createElement("input");
1612
+ fileInput.type = "file";
1613
+ fileInput.accept = "*/*";
1614
+ fileInput.multiple = false;
1615
+ fileInput.style.display = "none";
1616
+ fileInput.addEventListener("change", async (e) => {
1617
+ const file = e.target.files[0];
1618
+ if (!file) {
1619
+ return;
1620
+ }
1621
+ const maxSize = 100 * 1024 * 1024;
1622
+ if (file.size > maxSize) {
1623
+ this.showError(`File size (${this._formatFileSize(file.size)}) exceeds maximum (${this._formatFileSize(maxSize)})`);
1624
+ return;
1625
+ }
1626
+ try {
1627
+ const fileModel = new File();
1628
+ let extra = {};
1629
+ if (this.options.requiresGroup && this.getApp().activeGroup) {
1630
+ extra.group = this.getApp().activeGroup.id;
1626
1631
  }
1627
- ]
1628
- });
1629
- if (!formData) {
1630
- return;
1631
- }
1632
- const file = formData.file;
1633
- if (!file || !(file instanceof File)) {
1634
- this.showError("No file selected");
1635
- return;
1636
- }
1637
- console.log(`File Selected: ${file.name} (${file.type}) (${file.size} bytes)`);
1638
- try {
1639
- const fileModel = new File();
1640
- let extra = {};
1641
- if (this.options.requiresGroup && this.getApp().activeGroup) {
1642
- extra.group = this.getApp().activeGroup.id;
1632
+ const upload = fileModel.upload({
1633
+ file,
1634
+ name: file.name,
1635
+ description: `File uploaded on ${(/* @__PURE__ */ new Date()).toLocaleDateString()}`,
1636
+ showToast: true,
1637
+ onProgress: (progressInfo) => {
1638
+ console.log(`Upload progress: ${progressInfo.percentage}%`);
1639
+ },
1640
+ onComplete: (result) => {
1641
+ console.log("Upload completed:", result);
1642
+ this.refresh();
1643
+ },
1644
+ onError: (error) => {
1645
+ console.error("Upload failed:", error);
1646
+ this.showError("Upload failed: " + error.message);
1647
+ },
1648
+ ...extra
1649
+ });
1650
+ await upload;
1651
+ } catch (error) {
1652
+ console.error("Error starting file upload:", error);
1653
+ this.showError("Failed to start file upload: " + error.message);
1654
+ } finally {
1655
+ fileInput.remove();
1643
1656
  }
1644
- const upload = fileModel.upload({
1645
- file,
1646
- name: file.name,
1647
- description: formData.description || `File uploaded on ${(/* @__PURE__ */ new Date()).toLocaleDateString()}`,
1648
- showToast: true,
1649
- onProgress: (progressInfo) => {
1650
- console.log(`Upload progress: ${progressInfo.percentage}%`);
1651
- },
1652
- onComplete: (result) => {
1653
- console.log("Upload completed:", result);
1654
- this.refresh();
1655
- },
1656
- onError: (error) => {
1657
- console.error("Upload failed:", error);
1658
- this.showError("Upload failed: " + error.message);
1659
- },
1660
- ...extra
1661
- });
1662
- await upload;
1663
- } catch (error) {
1664
- console.error("Error starting file upload:", error);
1665
- this.showError("Failed to start file upload: " + error.message);
1666
- }
1657
+ });
1658
+ document.body.appendChild(fileInput);
1659
+ fileInput.click();
1660
+ }
1661
+ /**
1662
+ * Format file size for display
1663
+ * @param {number} bytes - File size in bytes
1664
+ * @returns {string} Formatted file size
1665
+ * @private
1666
+ */
1667
+ _formatFileSize(bytes) {
1668
+ if (bytes === 0) return "0 Bytes";
1669
+ const k = 1024;
1670
+ const sizes = ["Bytes", "KB", "MB", "GB"];
1671
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
1672
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
1667
1673
  }
1668
1674
  async onFileDrop(files, event, validation) {
1669
1675
  const file = files[0];