@open-mercato/core 0.4.2-canary-19703ca707 → 0.4.2-canary-470129ce32

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 (53) hide show
  1. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +2 -1
  2. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
  3. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +2 -1
  4. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
  5. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +2 -1
  6. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
  7. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +2 -1
  8. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
  9. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +2 -1
  10. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
  11. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +2 -1
  12. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
  13. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +2 -1
  14. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
  15. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +2 -1
  16. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
  17. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +2 -1
  18. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
  19. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +2 -1
  20. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
  21. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +2 -1
  22. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
  23. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +2 -1
  24. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
  25. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +2 -1
  26. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
  27. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +2 -1
  28. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
  29. package/dist/modules/directory/api/get/tenants/lookup.js +2 -0
  30. package/dist/modules/directory/api/get/tenants/lookup.js.map +2 -2
  31. package/dist/modules/notifications/migrations/Migration20260129082610.js +13 -0
  32. package/dist/modules/notifications/migrations/Migration20260129082610.js.map +7 -0
  33. package/dist/modules/query_index/cli.js +63 -7
  34. package/dist/modules/query_index/cli.js.map +2 -2
  35. package/package.json +2 -2
  36. package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
  37. package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
  38. package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
  39. package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
  40. package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
  41. package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
  42. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
  43. package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
  44. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
  45. package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
  46. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
  47. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
  48. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
  49. package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
  50. package/src/modules/directory/api/get/tenants/lookup.ts +2 -0
  51. package/src/modules/notifications/migrations/.snapshot-open-mercato.json +36 -0
  52. package/src/modules/notifications/migrations/Migration20260129082610.ts +13 -0
  53. package/src/modules/query_index/cli.ts +82 -13
@@ -1,5 +1,6 @@
1
- import CustomerTodosWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateCustomerTodoSettings } from "./config.js";
3
+ const CustomerTodosWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "customers.dashboard.todos",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/customers/widgets/dashboard/customer-todos/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport CustomerTodosWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'\n\nconst widget: DashboardWidgetModule<CustomerTodoWidgetSettings> = {\n metadata: {\n id: 'customers.dashboard.todos',\n title: 'Customer Todos',\n description: 'Review the latest tasks linked to customers and jump directly to their records.',\n features: ['dashboards.view', 'customers.widgets.todos'],\n defaultSize: 'md',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'activities'],\n category: 'customers',\n icon: 'check-square',\n supportsRefresh: true,\n },\n Widget: CustomerTodosWidget,\n hydrateSettings: hydrateCustomerTodoSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,yBAAyB;AAChC,SAAS,kBAAkB,mCAAoE;AAE/F,MAAM,SAA4D;AAAA,EAChE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,yBAAyB;AAAA,IACvD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,YAAY;AAAA,IAChC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,EACrB;AACF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'\nconst CustomerTodosWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerTodoWidgetSettings> = {\n metadata: {\n id: 'customers.dashboard.todos',\n title: 'Customer Todos',\n description: 'Review the latest tasks linked to customers and jump directly to their records.',\n features: ['dashboards.view', 'customers.widgets.todos'],\n defaultSize: 'md',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'activities'],\n category: 'customers',\n icon: 'check-square',\n supportsRefresh: true,\n },\n Widget: CustomerTodosWidget,\n hydrateSettings: hydrateCustomerTodoSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,mCAAoE;AAC/F,MAAM,sBAAsB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE/E,MAAM,SAA4D;AAAA,EAChE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,yBAAyB;AAAA,IACvD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,YAAY;AAAA,IAChC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,EACrB;AACF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import CustomerNewCustomersWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateNewCustomersSettings } from "./config.js";
3
+ const CustomerNewCustomersWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "customers.dashboard.newCustomers",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/customers/widgets/dashboard/new-customers/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport CustomerNewCustomersWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateNewCustomersSettings, type CustomerNewCustomersSettings } from './config'\n\nconst widget: DashboardWidgetModule<CustomerNewCustomersSettings> = {\n metadata: {\n id: 'customers.dashboard.newCustomers',\n title: 'New Customers',\n description: 'Track the most recently added customers to follow up quickly.',\n features: ['dashboards.view', 'customers.widgets.new-customers'],\n defaultSize: 'sm',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers'],\n category: 'customers',\n icon: 'user-plus',\n supportsRefresh: true,\n },\n Widget: CustomerNewCustomersWidget,\n hydrateSettings: hydrateNewCustomersSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n kind: settings.kind,\n }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,gCAAgC;AACvC,SAAS,kBAAkB,mCAAsE;AAEjG,MAAM,SAA8D;AAAA,EAClE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,iCAAiC;AAAA,IAC/D,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,WAAW;AAAA,IAClB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,EACjB;AACF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateNewCustomersSettings, type CustomerNewCustomersSettings } from './config'\nconst CustomerNewCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerNewCustomersSettings> = {\n metadata: {\n id: 'customers.dashboard.newCustomers',\n title: 'New Customers',\n description: 'Track the most recently added customers to follow up quickly.',\n features: ['dashboards.view', 'customers.widgets.new-customers'],\n defaultSize: 'sm',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers'],\n category: 'customers',\n icon: 'user-plus',\n supportsRefresh: true,\n },\n Widget: CustomerNewCustomersWidget,\n hydrateSettings: hydrateNewCustomersSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n kind: settings.kind,\n }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,mCAAsE;AACjG,MAAM,6BAA6B,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEtF,MAAM,SAA8D;AAAA,EAClE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,iCAAiC;AAAA,IAC/D,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,WAAW;AAAA,IAClB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,EACjB;AACF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import CustomerNewDealsWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateNewDealsSettings } from "./config.js";
3
+ const CustomerNewDealsWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "customers.dashboard.newDeals",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/customers/widgets/dashboard/new-deals/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport CustomerNewDealsWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'\n\nconst widget: DashboardWidgetModule<CustomerNewDealsSettings> = {\n metadata: {\n id: 'customers.dashboard.newDeals',\n title: 'New Deals',\n description: 'Track the most recently created customer deals to follow up quickly.',\n features: ['dashboards.view', 'customers.widgets.new-deals'],\n defaultSize: 'sm',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'deals'],\n category: 'customers',\n icon: 'handshake',\n supportsRefresh: true,\n },\n Widget: CustomerNewDealsWidget,\n hydrateSettings: hydrateNewDealsSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,4BAA4B;AACnC,SAAS,kBAAkB,+BAA8D;AAEzF,MAAM,SAA0D;AAAA,EAC9D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,6BAA6B;AAAA,IAC3D,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,OAAO;AAAA,IAC3B,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,EACrB;AACF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'\nconst CustomerNewDealsWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerNewDealsSettings> = {\n metadata: {\n id: 'customers.dashboard.newDeals',\n title: 'New Deals',\n description: 'Track the most recently created customer deals to follow up quickly.',\n features: ['dashboards.view', 'customers.widgets.new-deals'],\n defaultSize: 'sm',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'deals'],\n category: 'customers',\n icon: 'handshake',\n supportsRefresh: true,\n },\n Widget: CustomerNewDealsWidget,\n hydrateSettings: hydrateNewDealsSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,+BAA8D;AACzF,MAAM,yBAAyB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAElF,MAAM,SAA0D;AAAA,EAC9D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,6BAA6B;AAAA,IAC3D,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,OAAO;AAAA,IAC3B,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,EACrB;AACF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,9 @@
1
- import CustomerNextInteractionsWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import {
3
3
  DEFAULT_SETTINGS,
4
4
  hydrateNextInteractionsSettings
5
5
  } from "./config.js";
6
+ const CustomerNextInteractionsWidget = lazyDashboardWidget(() => import("./widget.client.js"));
6
7
  const widget = {
7
8
  metadata: {
8
9
  id: "customers.dashboard.nextInteractions",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/customers/widgets/dashboard/next-interactions/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport CustomerNextInteractionsWidget from './widget.client'\nimport {\n DEFAULT_SETTINGS,\n hydrateNextInteractionsSettings,\n type CustomerNextInteractionsSettings,\n} from './config'\n\nconst widget: DashboardWidgetModule<CustomerNextInteractionsSettings> = {\n metadata: {\n id: 'customers.dashboard.nextInteractions',\n title: 'Next Customer Interactions',\n description: 'See the customers with the next interactions scheduled to stay proactive.',\n features: ['dashboards.view', 'customers.widgets.next-interactions'],\n defaultSize: 'md',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'activities'],\n category: 'customers',\n icon: 'calendar',\n supportsRefresh: true,\n },\n Widget: CustomerNextInteractionsWidget,\n hydrateSettings: hydrateNextInteractionsSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n includePast: settings.includePast,\n }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,oCAAoC;AAC3C;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP,MAAM,SAAkE;AAAA,EACtE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,qCAAqC;AAAA,IACnE,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,YAAY;AAAA,IAChC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,IACnB,aAAa,SAAS;AAAA,EACxB;AACF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport {\n DEFAULT_SETTINGS,\n hydrateNextInteractionsSettings,\n type CustomerNextInteractionsSettings,\n} from './config'\nconst CustomerNextInteractionsWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerNextInteractionsSettings> = {\n metadata: {\n id: 'customers.dashboard.nextInteractions',\n title: 'Next Customer Interactions',\n description: 'See the customers with the next interactions scheduled to stay proactive.',\n features: ['dashboards.view', 'customers.widgets.next-interactions'],\n defaultSize: 'md',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'activities'],\n category: 'customers',\n icon: 'calendar',\n supportsRefresh: true,\n },\n Widget: CustomerNextInteractionsWidget,\n hydrateSettings: hydrateNextInteractionsSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n includePast: settings.includePast,\n }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,MAAM,iCAAiC,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE1F,MAAM,SAAkE;AAAA,EACtE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,qCAAqC;AAAA,IACnE,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,YAAY;AAAA,IAChC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,IACnB,aAAa,SAAS;AAAA,EACxB;AACF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import AovKpiWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const AovKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.aovKpi",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport AovKpiWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type AovKpiSettings } from './config'\n\nconst widget: DashboardWidgetModule<AovKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.aovKpi',\n title: 'Average Order Value',\n description: 'Average order value with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'trending-up',\n supportsRefresh: true,\n },\n Widget: AovKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,kBAAkB;AACzB,SAAS,kBAAkB,uBAA4C;AAEvE,MAAM,SAAgD;AAAA,EACpD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type AovKpiSettings } from './config'\nconst AovKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<AovKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.aovKpi',\n title: 'Average Order Value',\n description: 'Average order value with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'trending-up',\n supportsRefresh: true,\n },\n Widget: AovKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAA4C;AACvE,MAAM,eAAe,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAExE,MAAM,SAAgD;AAAA,EACpD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import NewCustomersKpiWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const NewCustomersKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.newCustomersKpi",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport NewCustomersKpiWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type NewCustomersKpiSettings } from './config'\n\nconst widget: DashboardWidgetModule<NewCustomersKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.newCustomersKpi',\n title: 'Customer Growth',\n description: 'New customer count with period comparison',\n features: ['analytics.view', 'customers.people.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'customers', 'kpi'],\n category: 'analytics',\n icon: 'user-plus',\n supportsRefresh: true,\n },\n Widget: NewCustomersKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,2BAA2B;AAClC,SAAS,kBAAkB,uBAAqD;AAEhF,MAAM,SAAyD;AAAA,EAC7D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,uBAAuB;AAAA,IACpD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,aAAa,KAAK;AAAA,IACtC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type NewCustomersKpiSettings } from './config'\nconst NewCustomersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<NewCustomersKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.newCustomersKpi',\n title: 'Customer Growth',\n description: 'New customer count with period comparison',\n features: ['analytics.view', 'customers.people.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'customers', 'kpi'],\n category: 'analytics',\n icon: 'user-plus',\n supportsRefresh: true,\n },\n Widget: NewCustomersKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAqD;AAChF,MAAM,wBAAwB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEjF,MAAM,SAAyD;AAAA,EAC7D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,uBAAuB;AAAA,IACpD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,aAAa,KAAK;AAAA,IACtC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import OrdersByStatusWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const OrdersByStatusWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.ordersByStatus",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport OrdersByStatusWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type OrdersByStatusSettings } from './config'\n\nconst widget: DashboardWidgetModule<OrdersByStatusSettings> = {\n metadata: {\n id: 'dashboards.analytics.ordersByStatus',\n title: 'Orders by Status',\n description: 'Distribution of orders by status',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'chart'],\n category: 'analytics',\n icon: 'pie-chart',\n supportsRefresh: true,\n },\n Widget: OrdersByStatusWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, variant: s.variant }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,0BAA0B;AACjC,SAAS,kBAAkB,uBAAoD;AAE/E,MAAM,SAAwD;AAAA,EAC5D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,OAAO;AAAA,IACpC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,SAAS,EAAE,QAAQ;AAC1E;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type OrdersByStatusSettings } from './config'\nconst OrdersByStatusWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<OrdersByStatusSettings> = {\n metadata: {\n id: 'dashboards.analytics.ordersByStatus',\n title: 'Orders by Status',\n description: 'Distribution of orders by status',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'chart'],\n category: 'analytics',\n icon: 'pie-chart',\n supportsRefresh: true,\n },\n Widget: OrdersByStatusWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, variant: s.variant }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAoD;AAC/E,MAAM,uBAAuB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEhF,MAAM,SAAwD;AAAA,EAC5D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,OAAO;AAAA,IACpC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,SAAS,EAAE,QAAQ;AAC1E;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import OrdersKpiWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const OrdersKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.ordersKpi",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport OrdersKpiWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type OrdersKpiSettings } from './config'\n\nconst widget: DashboardWidgetModule<OrdersKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.ordersKpi',\n title: 'Orders',\n description: 'Total order count with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'shopping-cart',\n supportsRefresh: true,\n },\n Widget: OrdersKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,qBAAqB;AAC5B,SAAS,kBAAkB,uBAA+C;AAE1E,MAAM,SAAmD;AAAA,EACvD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type OrdersKpiSettings } from './config'\nconst OrdersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<OrdersKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.ordersKpi',\n title: 'Orders',\n description: 'Total order count with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'shopping-cart',\n supportsRefresh: true,\n },\n Widget: OrdersKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAA+C;AAC1E,MAAM,kBAAkB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE3E,MAAM,SAAmD;AAAA,EACvD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import PipelineSummaryWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const PipelineSummaryWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.pipelineSummary",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport PipelineSummaryWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type PipelineSummarySettings } from './config'\n\nconst widget: DashboardWidgetModule<PipelineSummarySettings> = {\n metadata: {\n id: 'dashboards.analytics.pipelineSummary',\n title: 'Pipeline Summary',\n description: 'Deal value by pipeline stage',\n features: ['analytics.view', 'customers.deals.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'customers', 'deals', 'chart'],\n category: 'analytics',\n icon: 'git-branch',\n supportsRefresh: true,\n },\n Widget: PipelineSummaryWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,2BAA2B;AAClC,SAAS,kBAAkB,uBAAqD;AAEhF,MAAM,SAAyD;AAAA,EAC7D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,sBAAsB;AAAA,IACnD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,aAAa,SAAS,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU;AACtD;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type PipelineSummarySettings } from './config'\nconst PipelineSummaryWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<PipelineSummarySettings> = {\n metadata: {\n id: 'dashboards.analytics.pipelineSummary',\n title: 'Pipeline Summary',\n description: 'Deal value by pipeline stage',\n features: ['analytics.view', 'customers.deals.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'customers', 'deals', 'chart'],\n category: 'analytics',\n icon: 'git-branch',\n supportsRefresh: true,\n },\n Widget: PipelineSummaryWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAqD;AAChF,MAAM,wBAAwB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEjF,MAAM,SAAyD;AAAA,EAC7D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,sBAAsB;AAAA,IACnD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,aAAa,SAAS,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU;AACtD;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import RevenueKpiWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const RevenueKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.revenueKpi",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport RevenueKpiWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type RevenueKpiSettings } from './config'\n\nconst widget: DashboardWidgetModule<RevenueKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.revenueKpi',\n title: 'Revenue',\n description: 'Total revenue with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'dollar-sign',\n supportsRefresh: true,\n },\n Widget: RevenueKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,sBAAsB;AAC7B,SAAS,kBAAkB,uBAAgD;AAE3E,MAAM,SAAoD;AAAA,EACxD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type RevenueKpiSettings } from './config'\nconst RevenueKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<RevenueKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.revenueKpi',\n title: 'Revenue',\n description: 'Total revenue with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'dollar-sign',\n supportsRefresh: true,\n },\n Widget: RevenueKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAgD;AAC3E,MAAM,mBAAmB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE5E,MAAM,SAAoD;AAAA,EACxD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import RevenueTrendWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const RevenueTrendWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.revenueTrend",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport RevenueTrendWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type RevenueTrendSettings } from './config'\n\nconst widget: DashboardWidgetModule<RevenueTrendSettings> = {\n metadata: {\n id: 'dashboards.analytics.revenueTrend',\n title: 'Revenue Trend',\n description: 'Revenue over time with customizable granularity',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'lg',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'chart'],\n category: 'analytics',\n icon: 'line-chart',\n supportsRefresh: true,\n },\n Widget: RevenueTrendWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, granularity: s.granularity, showArea: s.showArea }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,wBAAwB;AAC/B,SAAS,kBAAkB,uBAAkD;AAE7E,MAAM,SAAsD;AAAA,EAC1D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,OAAO;AAAA,IACpC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,aAAa,EAAE,aAAa,UAAU,EAAE,SAAS;AACxG;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type RevenueTrendSettings } from './config'\nconst RevenueTrendWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<RevenueTrendSettings> = {\n metadata: {\n id: 'dashboards.analytics.revenueTrend',\n title: 'Revenue Trend',\n description: 'Revenue over time with customizable granularity',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'lg',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'chart'],\n category: 'analytics',\n icon: 'line-chart',\n supportsRefresh: true,\n },\n Widget: RevenueTrendWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, granularity: s.granularity, showArea: s.showArea }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAkD;AAC7E,MAAM,qBAAqB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE9E,MAAM,SAAsD;AAAA,EAC1D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,OAAO;AAAA,IACpC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,aAAa,EAAE,aAAa,UAAU,EAAE,SAAS;AACxG;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import SalesByRegionWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const SalesByRegionWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.salesByRegion",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport SalesByRegionWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type SalesByRegionSettings } from './config'\n\nconst widget: DashboardWidgetModule<SalesByRegionSettings> = {\n metadata: {\n id: 'dashboards.analytics.salesByRegion',\n title: 'Sales by Region',\n description: 'Revenue distribution by shipping region',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'geography', 'chart'],\n category: 'analytics',\n icon: 'map-pin',\n supportsRefresh: true,\n },\n Widget: SalesByRegionWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,yBAAyB;AAChC,SAAS,kBAAkB,uBAAmD;AAE9E,MAAM,SAAuD;AAAA,EAC3D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,MAAM;AACtE;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type SalesByRegionSettings } from './config'\nconst SalesByRegionWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<SalesByRegionSettings> = {\n metadata: {\n id: 'dashboards.analytics.salesByRegion',\n title: 'Sales by Region',\n description: 'Revenue distribution by shipping region',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'geography', 'chart'],\n category: 'analytics',\n icon: 'map-pin',\n supportsRefresh: true,\n },\n Widget: SalesByRegionWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAmD;AAC9E,MAAM,sBAAsB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE/E,MAAM,SAAuD;AAAA,EAC3D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,MAAM;AACtE;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import TopCustomersWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const TopCustomersWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.topCustomers",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/top-customers/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport TopCustomersWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type TopCustomersSettings } from './config'\n\nconst widget: DashboardWidgetModule<TopCustomersSettings> = {\n metadata: {\n id: 'dashboards.analytics.topCustomers',\n title: 'Top Customers',\n description: 'Top customers by revenue',\n features: ['analytics.view', 'sales.orders.view', 'customers.people.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'customers', 'table'],\n category: 'analytics',\n icon: 'users',\n supportsRefresh: true,\n },\n Widget: TopCustomersWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,wBAAwB;AAC/B,SAAS,kBAAkB,uBAAkD;AAE7E,MAAM,SAAsD;AAAA,EAC1D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,qBAAqB,uBAAuB;AAAA,IACzE,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,MAAM;AACtE;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type TopCustomersSettings } from './config'\nconst TopCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<TopCustomersSettings> = {\n metadata: {\n id: 'dashboards.analytics.topCustomers',\n title: 'Top Customers',\n description: 'Top customers by revenue',\n features: ['analytics.view', 'sales.orders.view', 'customers.people.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'customers', 'table'],\n category: 'analytics',\n icon: 'users',\n supportsRefresh: true,\n },\n Widget: TopCustomersWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAkD;AAC7E,MAAM,qBAAqB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE9E,MAAM,SAAsD;AAAA,EAC1D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,qBAAqB,uBAAuB;AAAA,IACzE,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,MAAM;AACtE;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
- import TopProductsWidget from "./widget.client.js";
1
+ import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
2
2
  import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
3
+ const TopProductsWidget = lazyDashboardWidget(() => import("./widget.client.js"));
3
4
  const widget = {
4
5
  metadata: {
5
6
  id: "dashboards.analytics.topProducts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/top-products/widget.ts"],
4
- "sourcesContent": ["import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport TopProductsWidget from './widget.client'\nimport { DEFAULT_SETTINGS, hydrateSettings, type TopProductsSettings } from './config'\n\nconst widget: DashboardWidgetModule<TopProductsSettings> = {\n metadata: {\n id: 'dashboards.analytics.topProducts',\n title: 'Top Products',\n description: 'Top-selling products by revenue',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'products', 'chart'],\n category: 'analytics',\n icon: 'bar-chart-2',\n supportsRefresh: true,\n },\n Widget: TopProductsWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit, layout: s.layout }),\n}\n\nexport default widget\n"],
5
- "mappings": "AACA,OAAO,uBAAuB;AAC9B,SAAS,kBAAkB,uBAAiD;AAE5E,MAAM,SAAqD;AAAA,EACzD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,YAAY,OAAO;AAAA,IAChD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO;AACxF;AAEA,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type TopProductsSettings } from './config'\nconst TopProductsWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<TopProductsSettings> = {\n metadata: {\n id: 'dashboards.analytics.topProducts',\n title: 'Top Products',\n description: 'Top-selling products by revenue',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'products', 'chart'],\n category: 'analytics',\n icon: 'bar-chart-2',\n supportsRefresh: true,\n },\n Widget: TopProductsWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit, layout: s.layout }),\n}\n\nexport default widget\n"],
5
+ "mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAiD;AAC5E,MAAM,oBAAoB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE7E,MAAM,SAAqD;AAAA,EACzD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,YAAY,OAAO;AAAA,IAChD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO;AACxF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -60,8 +60,10 @@ const openApi = {
60
60
  GET: tenantLookupDoc
61
61
  }
62
62
  };
63
+ var lookup_default = GET;
63
64
  export {
64
65
  GET,
66
+ lookup_default as default,
65
67
  metadata,
66
68
  openApi
67
69
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/directory/api/get/tenants/lookup.ts"],
4
- "sourcesContent": ["import { NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { Tenant } from '@open-mercato/core/modules/directory/data/entities'\nimport type { OpenApiMethodDoc, OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\n\nexport const metadata = {\n GET: {\n requireAuth: false,\n },\n}\n\nconst tenantLookupQuerySchema = z.object({\n tenantId: z.string().uuid(),\n})\n\nexport async function GET(req: Request) {\n const url = new URL(req.url)\n const tenantId = url.searchParams.get('tenantId') || url.searchParams.get('tenant') || ''\n const parsed = tenantLookupQuerySchema.safeParse({ tenantId })\n if (!parsed.success) {\n return NextResponse.json({ ok: false, error: 'Invalid tenant id.' }, { status: 400 })\n }\n\n const container = await createRequestContainer()\n const em = (container.resolve('em') as EntityManager)\n const tenant = await em.findOne(Tenant, { id: parsed.data.tenantId, deletedAt: null })\n if (!tenant) {\n return NextResponse.json({ ok: false, error: 'Tenant not found.' }, { status: 404 })\n }\n return NextResponse.json({\n ok: true,\n tenant: { id: String(tenant.id), name: tenant.name },\n })\n}\n\nconst lookupTag = 'Directory'\n\nconst tenantLookupSuccessSchema = z.object({\n ok: z.literal(true),\n tenant: z.object({\n id: z.string().uuid(),\n name: z.string(),\n }),\n})\n\nconst tenantLookupErrorSchema = z.object({\n ok: z.literal(false),\n error: z.string(),\n})\n\nconst tenantLookupDoc: OpenApiMethodDoc = {\n summary: 'Public tenant lookup',\n description: 'Resolves tenant metadata for login/activation flows.',\n tags: [lookupTag],\n query: tenantLookupQuerySchema,\n responses: [\n { status: 200, description: 'Tenant resolved.', schema: tenantLookupSuccessSchema },\n ],\n errors: [\n { status: 400, description: 'Invalid tenant id', schema: tenantLookupErrorSchema },\n { status: 404, description: 'Tenant not found', schema: tenantLookupErrorSchema },\n ],\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: lookupTag,\n summary: 'Public tenant lookup',\n methods: {\n GET: tenantLookupDoc,\n },\n}\n"],
5
- "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,SAAS;AAElB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AAGhB,MAAM,WAAW;AAAA,EACtB,KAAK;AAAA,IACH,aAAa;AAAA,EACf;AACF;AAEA,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAED,eAAsB,IAAI,KAAc;AACtC,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,QAAM,WAAW,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,aAAa,IAAI,QAAQ,KAAK;AACvF,QAAM,SAAS,wBAAwB,UAAU,EAAE,SAAS,CAAC;AAC7D,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,qBAAqB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtF;AAEA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,KAAM,UAAU,QAAQ,IAAI;AAClC,QAAM,SAAS,MAAM,GAAG,QAAQ,QAAQ,EAAE,IAAI,OAAO,KAAK,UAAU,WAAW,KAAK,CAAC;AACrF,MAAI,CAAC,QAAQ;AACX,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,oBAAoB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AACA,SAAO,aAAa,KAAK;AAAA,IACvB,IAAI;AAAA,IACJ,QAAQ,EAAE,IAAI,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO,KAAK;AAAA,EACrD,CAAC;AACH;AAEA,MAAM,YAAY;AAElB,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,QAAQ,IAAI;AAAA,EAClB,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,IACpB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAED,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,IAAI,EAAE,QAAQ,KAAK;AAAA,EACnB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,MAAM,kBAAoC;AAAA,EACxC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,SAAS;AAAA,EAChB,OAAO;AAAA,EACP,WAAW;AAAA,IACT,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,0BAA0B;AAAA,EACpF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,QAAQ,KAAK,aAAa,qBAAqB,QAAQ,wBAAwB;AAAA,IACjF,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,wBAAwB;AAAA,EAClF;AACF;AAEO,MAAM,UAA2B;AAAA,EACtC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,EACP;AACF;",
4
+ "sourcesContent": ["import { NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { Tenant } from '@open-mercato/core/modules/directory/data/entities'\nimport type { OpenApiMethodDoc, OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\n\nexport const metadata = {\n GET: {\n requireAuth: false,\n },\n}\n\nconst tenantLookupQuerySchema = z.object({\n tenantId: z.string().uuid(),\n})\n\nexport async function GET(req: Request) {\n const url = new URL(req.url)\n const tenantId = url.searchParams.get('tenantId') || url.searchParams.get('tenant') || ''\n const parsed = tenantLookupQuerySchema.safeParse({ tenantId })\n if (!parsed.success) {\n return NextResponse.json({ ok: false, error: 'Invalid tenant id.' }, { status: 400 })\n }\n\n const container = await createRequestContainer()\n const em = (container.resolve('em') as EntityManager)\n const tenant = await em.findOne(Tenant, { id: parsed.data.tenantId, deletedAt: null })\n if (!tenant) {\n return NextResponse.json({ ok: false, error: 'Tenant not found.' }, { status: 404 })\n }\n return NextResponse.json({\n ok: true,\n tenant: { id: String(tenant.id), name: tenant.name },\n })\n}\n\nconst lookupTag = 'Directory'\n\nconst tenantLookupSuccessSchema = z.object({\n ok: z.literal(true),\n tenant: z.object({\n id: z.string().uuid(),\n name: z.string(),\n }),\n})\n\nconst tenantLookupErrorSchema = z.object({\n ok: z.literal(false),\n error: z.string(),\n})\n\nconst tenantLookupDoc: OpenApiMethodDoc = {\n summary: 'Public tenant lookup',\n description: 'Resolves tenant metadata for login/activation flows.',\n tags: [lookupTag],\n query: tenantLookupQuerySchema,\n responses: [\n { status: 200, description: 'Tenant resolved.', schema: tenantLookupSuccessSchema },\n ],\n errors: [\n { status: 400, description: 'Invalid tenant id', schema: tenantLookupErrorSchema },\n { status: 404, description: 'Tenant not found', schema: tenantLookupErrorSchema },\n ],\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: lookupTag,\n summary: 'Public tenant lookup',\n methods: {\n GET: tenantLookupDoc,\n },\n}\n\nexport default GET\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,SAAS;AAElB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AAGhB,MAAM,WAAW;AAAA,EACtB,KAAK;AAAA,IACH,aAAa;AAAA,EACf;AACF;AAEA,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAED,eAAsB,IAAI,KAAc;AACtC,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,QAAM,WAAW,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,aAAa,IAAI,QAAQ,KAAK;AACvF,QAAM,SAAS,wBAAwB,UAAU,EAAE,SAAS,CAAC;AAC7D,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,qBAAqB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtF;AAEA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,KAAM,UAAU,QAAQ,IAAI;AAClC,QAAM,SAAS,MAAM,GAAG,QAAQ,QAAQ,EAAE,IAAI,OAAO,KAAK,UAAU,WAAW,KAAK,CAAC;AACrF,MAAI,CAAC,QAAQ;AACX,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,oBAAoB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AACA,SAAO,aAAa,KAAK;AAAA,IACvB,IAAI;AAAA,IACJ,QAAQ,EAAE,IAAI,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO,KAAK;AAAA,EACrD,CAAC;AACH;AAEA,MAAM,YAAY;AAElB,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,QAAQ,IAAI;AAAA,EAClB,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,IACpB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAED,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,IAAI,EAAE,QAAQ,KAAK;AAAA,EACnB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,MAAM,kBAAoC;AAAA,EACxC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,SAAS;AAAA,EAChB,OAAO;AAAA,EACP,WAAW;AAAA,IACT,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,0BAA0B;AAAA,EACpF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,QAAQ,KAAK,aAAa,qBAAqB,QAAQ,wBAAwB;AAAA,IACjF,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,wBAAwB;AAAA,EAClF;AACF;AAEO,MAAM,UAA2B;AAAA,EACtC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,EACP;AACF;AAEA,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,13 @@
1
+ import { Migration } from "@mikro-orm/migrations";
2
+ class Migration20260129082610 extends Migration {
3
+ async up() {
4
+ this.addSql(`alter table "notifications" add column if not exists "title_key" text null, add column if not exists "body_key" text null, add column if not exists "title_variables" jsonb null, add column if not exists "body_variables" jsonb null;`);
5
+ }
6
+ async down() {
7
+ this.addSql(`alter table "notifications" drop column if exists "title_key", drop column if exists "body_key", drop column if exists "title_variables", drop column if exists "body_variables";`);
8
+ }
9
+ }
10
+ export {
11
+ Migration20260129082610
12
+ };
13
+ //# sourceMappingURL=Migration20260129082610.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/notifications/migrations/Migration20260129082610.ts"],
4
+ "sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260129082610 extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"notifications\" add column if not exists \"title_key\" text null, add column if not exists \"body_key\" text null, add column if not exists \"title_variables\" jsonb null, add column if not exists \"body_variables\" jsonb null;`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`alter table \"notifications\" drop column if exists \"title_key\", drop column if exists \"body_key\", drop column if exists \"title_variables\", drop column if exists \"body_variables\";`);\n }\n\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,gCAAgC,UAAU;AAAA,EAErD,MAAe,KAAoB;AACjC,SAAK,OAAO,yOAAyO;AAAA,EACvP;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,mLAAmL;AAAA,EACjM;AAEF;",
6
+ "names": []
7
+ }
@@ -10,6 +10,43 @@ import { upsertIndexBatch } from "./lib/batch.js";
10
10
  import { reindexEntity, DEFAULT_REINDEX_PARTITIONS } from "./lib/reindexer.js";
11
11
  import { purgeIndexScope } from "./lib/purge.js";
12
12
  import { flattenSystemEntityIds } from "@open-mercato/shared/lib/entities/system-entities";
13
+ function isIndexerVerbose() {
14
+ const parsed = parseBooleanToken(process.env.OM_INDEXER_VERBOSE ?? "");
15
+ return parsed === true;
16
+ }
17
+ function createGroupedProgress(label, partitionTargets) {
18
+ const totals = /* @__PURE__ */ new Map();
19
+ const processed = /* @__PURE__ */ new Map();
20
+ let bar = null;
21
+ const getTotals = () => {
22
+ let total = 0;
23
+ let done = 0;
24
+ for (const value of totals.values()) total += value;
25
+ for (const value of processed.values()) done += value;
26
+ return { total, done };
27
+ };
28
+ const tryInitBar = () => {
29
+ if (bar) return;
30
+ if (totals.size < partitionTargets.length) return;
31
+ const { total } = getTotals();
32
+ if (total <= 0) return;
33
+ bar = createProgressBar(label, total);
34
+ };
35
+ return {
36
+ onProgress(partition, info) {
37
+ processed.set(partition, info.processed);
38
+ if (!totals.has(partition)) totals.set(partition, info.total);
39
+ tryInitBar();
40
+ if (!bar) return;
41
+ const { done } = getTotals();
42
+ bar.update(done);
43
+ },
44
+ complete() {
45
+ if (bar) bar.complete();
46
+ },
47
+ getTotals
48
+ };
49
+ }
13
50
  function parseArgs(rest) {
14
51
  const args = {};
15
52
  for (let i = 0; i < rest.length; i += 1) {
@@ -444,8 +481,11 @@ const reindex = {
444
481
  await purgeIndexScope(baseEm, { entityType: entity, organizationId: orgId, tenantId });
445
482
  }
446
483
  console.log(`Reindexing ${entity}${force ? " (forced)" : ""} in ${partitionTargets.length} partition(s)...`);
447
- const progressState = /* @__PURE__ */ new Map();
484
+ const verbose = isIndexerVerbose();
485
+ const progressState = verbose ? /* @__PURE__ */ new Map() : null;
486
+ const groupedProgress = !verbose && partitionTargets.length > 1 ? createGroupedProgress(`Reindexing ${entity}`, partitionTargets) : null;
448
487
  const renderProgress = (part, entityId, info) => {
488
+ if (!progressState) return;
449
489
  const state = progressState.get(part) ?? { last: 0 };
450
490
  const now = Date.now();
451
491
  if (now - state.last < 1e3 && info.processed < info.total) return;
@@ -461,7 +501,7 @@ const reindex = {
461
501
  const label = partitionTargets.length > 1 ? ` [partition ${part + 1}/${partitionCount}]` : "";
462
502
  if (partitionTargets.length === 1) {
463
503
  console.log(` -> processing${label}`);
464
- } else if (idx === 0) {
504
+ } else if (verbose && idx === 0) {
465
505
  console.log(` -> processing partitions in parallel (count=${partitionTargets.length})`);
466
506
  }
467
507
  const partitionContainer = await createRequestContainer();
@@ -489,9 +529,14 @@ const reindex = {
489
529
  onProgress(info) {
490
530
  if (useBar) {
491
531
  if (info.total > 0 && !progressBar) {
492
- progressBar = createProgressBar(`Reindexing ${entity}${label}`, info.total);
532
+ progressBar = createProgressBar(
533
+ `Reindexing ${entity}${label}`,
534
+ info.total
535
+ );
493
536
  }
494
537
  progressBar?.update(info.processed);
538
+ } else if (groupedProgress) {
539
+ groupedProgress.onProgress(part, info);
495
540
  } else {
496
541
  renderProgress(part, entity, info);
497
542
  }
@@ -500,7 +545,9 @@ const reindex = {
500
545
  if (progressBar) {
501
546
  progressBar.complete();
502
547
  }
503
- if (!useBar) {
548
+ if (!useBar && groupedProgress) {
549
+ groupedProgress.onProgress(part, { processed: partitionStats.processed, total: partitionStats.total });
550
+ } else if (!useBar) {
504
551
  renderProgress(part, entity, { processed: partitionStats.processed, total: partitionStats.total });
505
552
  } else {
506
553
  console.log(
@@ -515,6 +562,7 @@ const reindex = {
515
562
  }
516
563
  })
517
564
  );
565
+ groupedProgress?.complete();
518
566
  const totalProcessed = stats.reduce((acc, value) => acc + value, 0);
519
567
  console.log(`Finished ${entity}: processed ${totalProcessed} row(s) across ${partitionTargets.length} partition(s)`);
520
568
  await recordIndexerLog(
@@ -569,8 +617,11 @@ const reindex = {
569
617
  console.log(
570
618
  `[${idx + 1}/${entityIds.length}] Reindexing ${id}${force ? " (forced)" : ""} in ${partitionTargets.length} partition(s)...`
571
619
  );
572
- const progressState = /* @__PURE__ */ new Map();
620
+ const verbose = isIndexerVerbose();
621
+ const progressState = verbose ? /* @__PURE__ */ new Map() : null;
622
+ const groupedProgress = !verbose && partitionTargets.length > 1 ? createGroupedProgress(`Reindexing ${id}`, partitionTargets) : null;
573
623
  const renderProgress = (part, entityId, info) => {
624
+ if (!progressState) return;
574
625
  const state = progressState.get(part) ?? { last: 0 };
575
626
  const now = Date.now();
576
627
  if (now - state.last < 1e3 && info.processed < info.total) return;
@@ -586,7 +637,7 @@ const reindex = {
586
637
  const label = partitionTargets.length > 1 ? ` [partition ${part + 1}/${partitionCount}]` : "";
587
638
  if (partitionTargets.length === 1) {
588
639
  console.log(` -> processing${label}`);
589
- } else if (partitionIdx === 0) {
640
+ } else if (verbose && partitionIdx === 0) {
590
641
  console.log(` -> processing partitions in parallel (count=${partitionTargets.length})`);
591
642
  }
592
643
  const partitionContainer = await createRequestContainer();
@@ -617,6 +668,8 @@ const reindex = {
617
668
  progressBar = createProgressBar(`Reindexing ${id}${label}`, info.total);
618
669
  }
619
670
  progressBar?.update(info.processed);
671
+ } else if (groupedProgress) {
672
+ groupedProgress.onProgress(part, info);
620
673
  } else {
621
674
  renderProgress(part, id, info);
622
675
  }
@@ -625,7 +678,9 @@ const reindex = {
625
678
  if (progressBar) {
626
679
  progressBar.complete();
627
680
  }
628
- if (!useBar) {
681
+ if (!useBar && groupedProgress) {
682
+ groupedProgress.onProgress(part, { processed: result.processed, total: result.total });
683
+ } else if (!useBar) {
629
684
  renderProgress(part, id, { processed: result.processed, total: result.total });
630
685
  } else {
631
686
  console.log(
@@ -640,6 +695,7 @@ const reindex = {
640
695
  }
641
696
  })
642
697
  );
698
+ groupedProgress?.complete();
643
699
  const totalProcessed = partitionResults.reduce((acc, value) => acc + value, 0);
644
700
  console.log(` -> ${id} complete: processed ${totalProcessed} row(s) across ${partitionTargets.length} partition(s)`);
645
701
  await recordIndexerLog(