@mantajs/dashboard 0.1.12 → 0.1.14

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +253 -0
  3. package/dist/{api-key-management-detail-TM6K63HF.mjs → api-key-management-detail-SZR6LLZY.mjs} +16 -16
  4. package/dist/{api-key-management-sales-channels-4GOYD6BF.mjs → api-key-management-sales-channels-WZAGFYC5.mjs} +6 -6
  5. package/dist/app.css +0 -20
  6. package/dist/app.js +11156 -11279
  7. package/dist/app.mjs +9 -9
  8. package/dist/campaign-create-FJOECKGT.mjs +1 -1
  9. package/dist/{chunk-LISLAU2F.mjs → chunk-FBYTX6K7.mjs} +7 -7
  10. package/dist/{chunk-VHUQFKRO.mjs → chunk-M5AMBSF6.mjs} +188 -181
  11. package/dist/{collection-list-KLL2VLDE.mjs → collection-list-EFER73U6.mjs} +10 -10
  12. package/dist/{customer-detail-DN46Z4Z7.mjs → customer-detail-NCPDOSIN.mjs} +15 -15
  13. package/dist/{customer-group-list-UW5KXNKV.mjs → customer-group-list-KZHWADWX.mjs} +17 -17
  14. package/dist/{home-524EFXYO.mjs → home-KFQGXKRT.mjs} +1 -1
  15. package/dist/{inventory-detail-42PY5NFS.mjs → inventory-detail-2MFCIKDT.mjs} +16 -16
  16. package/dist/{inventory-stock-MCURFEYD.mjs → inventory-stock-3PPGJ2JD.mjs} +8 -9
  17. package/dist/{location-fulfillment-providers-KQUDIYAF.mjs → location-fulfillment-providers-TXNXNHRD.mjs} +16 -16
  18. package/dist/{location-list-YDMTR5QM.mjs → location-list-KVBA6J47.mjs} +4 -4
  19. package/dist/{location-sales-channels-WGVKHV3B.mjs → location-sales-channels-P6O7KJAO.mjs} +6 -6
  20. package/dist/{location-service-zone-shipping-option-create-5XHKSHIS.mjs → location-service-zone-shipping-option-create-XXHX5DWG.mjs} +15 -15
  21. package/dist/{location-service-zone-shipping-option-pricing-VTD5YQ7X.mjs → location-service-zone-shipping-option-pricing-5HN2Z5RB.mjs} +2 -2
  22. package/dist/{order-export-Z7RZH5EX.mjs → order-export-IFN234IN.mjs} +12 -12
  23. package/dist/{order-list-BXZST6UW.mjs → order-list-57XK2DRD.mjs} +10 -10
  24. package/dist/{product-attributes-NT25DQN6.mjs → product-attributes-TGLEKV7Y.mjs} +8 -8
  25. package/dist/{product-create-GZANVK54.mjs → product-create-IGJXOMQN.mjs} +28 -28
  26. package/dist/{product-detail-P3LEJNTC.mjs → product-detail-ZZMHLWWL.mjs} +19 -19
  27. package/dist/{product-edit-ZWEDI4DK.mjs → product-edit-AH2FVEYF.mjs} +8 -8
  28. package/dist/{product-export-TJYITBFD.mjs → product-export-TX7U6SYH.mjs} +10 -10
  29. package/dist/{product-list-7EB54CNP.mjs → product-list-RZNYCKTQ.mjs} +13 -13
  30. package/dist/{product-media-WN2GYSM3.mjs → product-media-CG4RFOTX.mjs} +2 -2
  31. package/dist/{product-organization-3PJP3Y43.mjs → product-organization-C4LU2WFS.mjs} +8 -8
  32. package/dist/{product-sales-channels-KZMXJISB.mjs → product-sales-channels-XBALPVAL.mjs} +6 -6
  33. package/dist/{product-tag-detail-JPH3QX6V.mjs → product-tag-detail-JPNWE5QK.mjs} +12 -12
  34. package/dist/{product-tag-list-AOR3RSJW.mjs → product-tag-list-KOYJZMGY.mjs} +12 -12
  35. package/dist/promotion-add-campaign-DO67QK6M.mjs +1 -1
  36. package/dist/{refund-reason-list-GKHO2WDS.mjs → refund-reason-list-YROTDEQW.mjs} +12 -12
  37. package/dist/{sales-channel-list-SWDVR3IS.mjs → sales-channel-list-BHMHTVP5.mjs} +13 -13
  38. package/dist/{tax-region-detail-D22AOV54.mjs → tax-region-detail-JDWO7JFL.mjs} +17 -17
  39. package/dist/{tax-region-province-detail-B5FBOF3U.mjs → tax-region-province-detail-NEYURIVX.mjs} +17 -17
  40. package/dist/{tax-region-tax-override-create-XDO7RON2.mjs → tax-region-tax-override-create-EBTFIY7C.mjs} +19 -19
  41. package/dist/{tax-region-tax-override-edit-3RTRDVDI.mjs → tax-region-tax-override-edit-UUKEKERW.mjs} +15 -15
  42. package/dist/{user-list-XFW3SHWQ.mjs → user-list-YTZQNYSO.mjs} +5 -5
  43. package/dist/vite-plugin/index.js +79 -21
  44. package/dist/vite-plugin/index.mjs +79 -21
  45. package/package.json +29 -3
  46. package/src/app.tsx +1 -1
  47. package/src/components/layout/main-layout/main-layout.tsx +2 -2
  48. package/src/dashboard-app/dashboard-app.tsx +2 -1
  49. package/src/dashboard-app/forms/hooks.tsx +1 -1
  50. package/src/dashboard-app/links/utils.ts +1 -1
  51. package/src/dashboard-app/routes/get-route.map.tsx +0 -8
  52. package/src/dashboard-app/routes/merge-extension-routes.ts +13 -4
  53. package/src/dashboard-app/routes/utils.ts +1 -1
  54. package/src/dashboard-app/utils/sort-menu-items-by-rank.ts +9 -7
  55. package/src/index.css +2 -8
  56. package/src/routes/home/home.tsx +1 -1
  57. package/src/routes/inventory/inventory-stock/components/inventory-stock-form/inventory-stock-form.tsx +1 -1
  58. package/src/vite-env.d.ts +4 -4
  59. package/src/vite-plugin/index.ts +91 -21
  60. package/dist/dashboard-C2M5PQNL.mjs +0 -135
  61. package/src/routes/dashboard/dashboard.tsx +0 -174
  62. package/src/routes/dashboard/index.ts +0 -1
  63. package/dist/{add-campaign-promotions-H7C2TJIH.mjs → add-campaign-promotions-OYPGISTF.mjs} +6 -6
  64. package/dist/{add-locales-47HF5EWF.mjs → add-locales-F4BOSZNU.mjs} +10 -10
  65. package/dist/{api-key-management-list-DPFW5U7B.mjs → api-key-management-list-2T35G3KT.mjs} +4 -4
  66. package/dist/{campaign-budget-edit-NLP7CWGC.mjs → campaign-budget-edit-B5MSE26J.mjs} +3 -3
  67. package/dist/{campaign-detail-JWCA2BOR.mjs → campaign-detail-2SHJIBIS.mjs} +9 -9
  68. package/dist/{campaign-list-CXECHCH4.mjs → campaign-list-PEOTTWBA.mjs} +2 -2
  69. package/dist/{categories-metadata-WYRXRAIH.mjs → categories-metadata-4OV6MKAD.mjs} +7 -7
  70. package/dist/{category-create-RCWOWE4W.mjs → category-create-G2JK5KDF.mjs} +3 -3
  71. package/dist/{category-detail-3GT2DMFA.mjs → category-detail-2TPOPANL.mjs} +9 -9
  72. package/dist/{category-list-C3JVQYQF.mjs → category-list-WHGMREI2.mjs} +4 -4
  73. package/dist/{category-products-KHRVHYTY.mjs → category-products-LKS7U7MI.mjs} +13 -13
  74. package/dist/{chunk-RCTRYC7L.mjs → chunk-5FMYPGTX.mjs} +3 -3
  75. package/dist/{chunk-5WXY5NFW.mjs → chunk-DODQ3KJT.mjs} +3 -3
  76. package/dist/{chunk-QV7RN52R.mjs → chunk-JUZ754L2.mjs} +3 -3
  77. package/dist/{chunk-5YS7C2IA.mjs → chunk-KCWP7RF5.mjs} +3 -3
  78. package/dist/{chunk-K737PKHV.mjs → chunk-KSDXSKJ7.mjs} +3 -3
  79. package/dist/{collection-add-products-5U6UXZO5.mjs → collection-add-products-KTACHFJO.mjs} +12 -12
  80. package/dist/{collection-detail-62PCW5E4.mjs → collection-detail-7GFJ3MAT.mjs} +9 -9
  81. package/dist/{collection-metadata-72WIRMTB.mjs → collection-metadata-EVPJGU6A.mjs} +7 -7
  82. package/dist/{customer-group-add-customers-OHFJCJAX.mjs → customer-group-add-customers-XMR2WBXX.mjs} +6 -6
  83. package/dist/{customer-group-detail-W2JHFS5S.mjs → customer-group-detail-GWTXNJ3C.mjs} +13 -13
  84. package/dist/{customer-list-RRV4GEKX.mjs → customer-list-UI5EQDII.mjs} +2 -2
  85. package/dist/{customers-add-customer-group-CG24Z4SE.mjs → customers-add-customer-group-3XYEAGX4.mjs} +16 -16
  86. package/dist/{edit-rules-IMAV7O5S.mjs → edit-rules-OOIFNR4Z.mjs} +7 -7
  87. package/dist/{inventory-create-PUU6JZLV.mjs → inventory-create-HQNGRBCA.mjs} +16 -16
  88. package/dist/{inventory-list-R5DC2CUH.mjs → inventory-list-IPORNDO4.mjs} +4 -4
  89. package/dist/{inventory-metadata-S66XTCLQ.mjs → inventory-metadata-RC7I7WAH.mjs} +7 -7
  90. package/dist/{location-detail-ULAMYS5R.mjs → location-detail-POZVJTS7.mjs} +8 -8
  91. package/dist/{location-service-zone-create-QINLHG5Y.mjs → location-service-zone-create-J43WN6G4.mjs} +3 -3
  92. package/dist/{location-service-zone-manage-areas-T5DBC22A.mjs → location-service-zone-manage-areas-6ZPMKMSX.mjs} +3 -3
  93. package/dist/{location-service-zone-shipping-option-edit-GGMKFUXK.mjs → location-service-zone-shipping-option-edit-4CGPQ3VT.mjs} +3 -3
  94. package/dist/{login-WK4YY6KQ.mjs → login-IMDOL4BZ.mjs} +7 -7
  95. package/dist/{order-create-claim-AB33KP6F.mjs → order-create-claim-H75RPNWI.mjs} +20 -20
  96. package/dist/{order-create-edit-QKGYBXVY.mjs → order-create-edit-6ZOYALA6.mjs} +15 -15
  97. package/dist/{order-create-exchange-YYNNY3HT.mjs → order-create-exchange-BUZTV7O7.mjs} +20 -20
  98. package/dist/{order-create-fulfillment-B4UKJX5F.mjs → order-create-fulfillment-YJS27E6Y.mjs} +9 -9
  99. package/dist/{order-create-refund-7MWFY4N3.mjs → order-create-refund-MY2VRRFA.mjs} +15 -15
  100. package/dist/{order-create-return-UZ2BDDH5.mjs → order-create-return-W3KT5LKU.mjs} +8 -8
  101. package/dist/{order-create-shipment-626Z6TQY.mjs → order-create-shipment-QMFZC6ZM.mjs} +9 -9
  102. package/dist/{order-detail-HISCRCUI.mjs → order-detail-VYLTG5MG.mjs} +20 -20
  103. package/dist/{order-edit-billing-address-3KER7QBF.mjs → order-edit-billing-address-ZZ4KK47F.mjs} +9 -9
  104. package/dist/{order-edit-email-4VZBU7P3.mjs → order-edit-email-TCRXOK3W.mjs} +9 -9
  105. package/dist/{order-edit-shipping-address-RKSV6BV6.mjs → order-edit-shipping-address-C3K5IZRG.mjs} +9 -9
  106. package/dist/{order-metadata-3F3KZ3GQ.mjs → order-metadata-5ESVMAPY.mjs} +9 -9
  107. package/dist/{order-receive-return-DA7KQHSO.mjs → order-receive-return-7N3532LA.mjs} +10 -10
  108. package/dist/{order-request-transfer-FP4FQQXG.mjs → order-request-transfer-VUPJ2FET.mjs} +9 -9
  109. package/dist/{price-list-configuration-MTUTPHQE.mjs → price-list-configuration-OH3KGRDN.mjs} +5 -5
  110. package/dist/{price-list-create-6TE264GD.mjs → price-list-create-77TLF2P2.mjs} +14 -14
  111. package/dist/{price-list-detail-ZML6WEJG.mjs → price-list-detail-KDMHC6V4.mjs} +12 -12
  112. package/dist/{price-list-list-P4O3ONES.mjs → price-list-list-JJXWBCTJ.mjs} +5 -5
  113. package/dist/{price-list-prices-add-BZIVC7QO.mjs → price-list-prices-add-RWB7WFOE.mjs} +14 -14
  114. package/dist/{price-list-prices-edit-42U6MFTL.mjs → price-list-prices-edit-ICTQBHHM.mjs} +2 -2
  115. package/dist/{product-create-variant-5HSS43Z7.mjs → product-create-variant-7EIWI54C.mjs} +13 -13
  116. package/dist/{product-image-variants-edit-S336246K.mjs → product-image-variants-edit-DWZWPK64.mjs} +12 -12
  117. package/dist/{product-import-72B4A7NT.mjs → product-import-NPPDYH7E.mjs} +7 -7
  118. package/dist/{product-metadata-QC3M4MYP.mjs → product-metadata-YNSTB5IC.mjs} +7 -7
  119. package/dist/{product-prices-WEGXAXQO.mjs → product-prices-LAVS64HJ.mjs} +1 -1
  120. package/dist/{product-stock-C5XB6GSY.mjs → product-stock-PEGYC4J5.mjs} +11 -11
  121. package/dist/{product-tag-create-TBICZVLL.mjs → product-tag-create-DJQIEWOF.mjs} +7 -7
  122. package/dist/{product-tag-edit-3DQJQ5YE.mjs → product-tag-edit-76EA7NLB.mjs} +7 -7
  123. package/dist/{product-tag-metadata-MQ5SCB3J.mjs → product-tag-metadata-HMCF2W4C.mjs} +7 -7
  124. package/dist/{product-type-detail-N2MDJT6X.mjs → product-type-detail-IJ6FGSB2.mjs} +9 -9
  125. package/dist/{product-type-list-BZDXJ2HH.mjs → product-type-list-MQ2PW2IE.mjs} +2 -2
  126. package/dist/{product-type-metadata-WPX7ZGF4.mjs → product-type-metadata-5Y5M2IQP.mjs} +7 -7
  127. package/dist/{product-variant-detail-PR4HNZ5A.mjs → product-variant-detail-N7YAKUOH.mjs} +8 -8
  128. package/dist/{product-variant-edit-UZBA2SBV.mjs → product-variant-edit-L2T5V2HJ.mjs} +11 -11
  129. package/dist/{product-variant-metadata-3YFLI23Q.mjs → product-variant-metadata-VTAPSZ24.mjs} +7 -7
  130. package/dist/{promotion-create-QDNLZXBY.mjs → promotion-create-I7OYJO55.mjs} +11 -11
  131. package/dist/{promotion-detail-P2C5XMVT.mjs → promotion-detail-Q7MMF7CC.mjs} +8 -8
  132. package/dist/{promotion-edit-details-DDT7MQVJ.mjs → promotion-edit-details-6BSOOWQN.mjs} +4 -4
  133. package/dist/{promotion-list-JFBYPMYZ.mjs → promotion-list-L22GJE3P.mjs} +2 -2
  134. package/dist/{refund-reason-create-DY22FUI4.mjs → refund-reason-create-UFAJFFFX.mjs} +7 -7
  135. package/dist/{refund-reason-edit-GLTVSOTD.mjs → refund-reason-edit-HM42SYVK.mjs} +7 -7
  136. package/dist/{region-add-countries-7P7MDPO2.mjs → region-add-countries-2VAVXMJQ.mjs} +3 -3
  137. package/dist/{region-create-DIZZS7HR.mjs → region-create-NA7Y2LN4.mjs} +6 -6
  138. package/dist/{region-detail-PL2IAQ4V.mjs → region-detail-3BARMXUE.mjs} +2 -2
  139. package/dist/{region-edit-2XQSSCPV.mjs → region-edit-WAU347DP.mjs} +3 -3
  140. package/dist/{region-list-J7R4D635.mjs → region-list-V4R2REMH.mjs} +2 -2
  141. package/dist/{region-metadata-ISC23DPY.mjs → region-metadata-UZXRJHUJ.mjs} +7 -7
  142. package/dist/{reservation-detail-7HTLPUEY.mjs → reservation-detail-JRY5S7TS.mjs} +9 -9
  143. package/dist/{reservation-list-IQ7T3RF2.mjs → reservation-list-HSF22GFZ.mjs} +4 -4
  144. package/dist/{reservation-metadata-E55IGDZR.mjs → reservation-metadata-UQZXHUCV.mjs} +9 -9
  145. package/dist/{return-reason-list-EGGZ7O6G.mjs → return-reason-list-EYLIXARO.mjs} +4 -4
  146. package/dist/{sales-channel-add-products-M37VZP3G.mjs → sales-channel-add-products-WNHRWOZS.mjs} +14 -14
  147. package/dist/{sales-channel-detail-4E2NPXYK.mjs → sales-channel-detail-GKI35W5H.mjs} +10 -10
  148. package/dist/{sales-channel-metadata-TXFO5GWM.mjs → sales-channel-metadata-GY2GM5OH.mjs} +8 -8
  149. package/dist/{shipping-option-type-create-Q47KBJCI.mjs → shipping-option-type-create-WKI3RSYP.mjs} +7 -7
  150. package/dist/{shipping-option-type-detail-UM6CAZRM.mjs → shipping-option-type-detail-RJ75KMFI.mjs} +7 -7
  151. package/dist/{shipping-option-type-edit-UB3ORRBC.mjs → shipping-option-type-edit-4KGCJFG3.mjs} +7 -7
  152. package/dist/{shipping-option-type-list-H3VQNXL7.mjs → shipping-option-type-list-NAT6DIHR.mjs} +11 -11
  153. package/dist/{shipping-profile-metadata-3VGQN6KZ.mjs → shipping-profile-metadata-6D3FYDC4.mjs} +7 -7
  154. package/dist/{shipping-profiles-list-RCSILIP5.mjs → shipping-profiles-list-WRPIJBZZ.mjs} +4 -4
  155. package/dist/{store-add-currencies-JCQAADSP.mjs → store-add-currencies-OX2WXFMS.mjs} +3 -3
  156. package/dist/{store-add-locales-S2HKXAPY.mjs → store-add-locales-37443R2E.mjs} +10 -10
  157. package/dist/{store-detail-LRVBWDU5.mjs → store-detail-IIKGTBWO.mjs} +11 -11
  158. package/dist/{store-metadata-X7X7J26V.mjs → store-metadata-3P5YI3YQ.mjs} +7 -7
  159. package/dist/{tax-region-create-BH4AS4OU.mjs → tax-region-create-BFOF2UVZ.mjs} +7 -7
  160. package/dist/{tax-region-edit-AGUULZKA.mjs → tax-region-edit-I2DTFHH4.mjs} +7 -7
  161. package/dist/{tax-region-list-ZYTJG7HC.mjs → tax-region-list-P4LDOPZD.mjs} +1 -1
  162. package/dist/{translation-list-3EGUQC7L.mjs → translation-list-2QIA5IZ4.mjs} +7 -7
  163. package/dist/{translations-edit-IWXQCTSI.mjs → translations-edit-K7EMV5N3.mjs} +8 -8
  164. package/dist/{user-invite-AQQMVG4K.mjs → user-invite-GAGIM5DO.mjs} +5 -5
  165. package/dist/{user-metadata-CGFMJKPT.mjs → user-metadata-WQ57HEMA.mjs} +7 -7
  166. package/dist/{workflow-execution-detail-QKA2H2VA.mjs → workflow-execution-detail-RRZJQZV6.mjs} +7 -7
  167. package/dist/{workflow-execution-list-N6YFMSXW.mjs → workflow-execution-list-C3EJMVSZ.mjs} +4 -4
@@ -6,18 +6,61 @@ const MENU_VIRTUAL_ID = "virtual:dashboard/menu-config"
6
6
  const MENU_RESOLVED_ID = "\0" + MENU_VIRTUAL_ID
7
7
 
8
8
  const COMPONENT_EXTENSIONS = [".tsx", ".ts", ".jsx", ".js", ".mts", ".mjs"]
9
+ const COMPONENT_EXT_SET = new Set(COMPONENT_EXTENSIONS)
10
+
11
+ const VALID_LOADERS: Record<string, string> = {
12
+ tsx: "tsx",
13
+ ts: "ts",
14
+ jsx: "jsx",
15
+ js: "js",
16
+ mts: "ts",
17
+ mjs: "js",
18
+ }
19
+
20
+ /**
21
+ * Recursively collect all component files from a directory tree.
22
+ * Includes a depth guard to prevent symlink loops and skips hidden
23
+ * entries / node_modules.
24
+ */
25
+ function collectComponentFiles(dir: string, depth = 0): string[] {
26
+ if (depth > 20) return []
27
+ const results: string[] = []
28
+ let entries: fs.Dirent[]
29
+ try {
30
+ entries = fs.readdirSync(dir, { withFileTypes: true })
31
+ } catch {
32
+ return results
33
+ }
34
+ for (const entry of entries) {
35
+ if (entry.name.startsWith(".") || entry.name === "node_modules") continue
36
+ const fullPath = path.resolve(dir, entry.name)
37
+ if (entry.isDirectory()) {
38
+ results.push(...collectComponentFiles(fullPath, depth + 1))
39
+ } else if (entry.isFile()) {
40
+ const ext = path.extname(entry.name)
41
+ if (COMPONENT_EXT_SET.has(ext)) {
42
+ results.push(fullPath)
43
+ }
44
+ }
45
+ }
46
+ return results
47
+ }
9
48
 
10
49
  /**
11
50
  * Extract a component name from a resolved file path.
12
51
  */
13
52
  function getComponentName(filePath: string): string | null {
14
53
  const normalized = filePath.replace(/\\/g, "/")
15
- const parts = normalized.split("/")
54
+ const parts = normalized.split("/").filter(Boolean)
55
+ if (parts.length === 0) return null
56
+
16
57
  const fileName = parts[parts.length - 1]
17
58
  const baseName = fileName.replace(/\.(tsx?|jsx?|mts|mjs)$/, "")
18
59
 
60
+ if (!baseName) return null
61
+
19
62
  if (baseName === "index") {
20
- return parts.length >= 2 ? parts[parts.length - 2] : null
63
+ return parts.length >= 2 ? parts[parts.length - 2] || null : null
21
64
  }
22
65
  if (parts.length >= 2 && baseName === parts[parts.length - 2]) {
23
66
  return baseName
@@ -38,17 +81,24 @@ export function customDashboardPlugin(): Plugin {
38
81
  const overridesByName = new Map<string, string>()
39
82
 
40
83
  if (fs.existsSync(componentsDir)) {
41
- for (const file of fs.readdirSync(componentsDir)) {
42
- const fullPath = path.resolve(componentsDir, file)
43
- if (!fs.statSync(fullPath).isFile()) continue
44
- const name = file.replace(/\.(tsx?|jsx?|mts|mjs)$/, "")
45
- overridesByName.set(name, fullPath)
84
+ const collectedFiles = collectComponentFiles(componentsDir).sort()
85
+ for (const fullPath of collectedFiles) {
86
+ const fileName = path.basename(fullPath)
87
+ const name = fileName.replace(/\.(tsx?|jsx?|mts|mjs)$/, "")
88
+ if (name && name !== "index") {
89
+ if (overridesByName.has(name) && process.env.NODE_ENV === "development") {
90
+ console.warn(
91
+ `[custom-dashboard] Duplicate override "${name}": ${overridesByName.get(name)} will be replaced by ${fullPath}`
92
+ )
93
+ }
94
+ overridesByName.set(name, fullPath)
95
+ }
46
96
  }
47
97
  }
48
98
 
49
99
  const hasOverrides = overridesByName.size > 0
50
100
 
51
- if (hasOverrides) {
101
+ if (hasOverrides && process.env.NODE_ENV === "development") {
52
102
  console.log("[custom-dashboard] overrides:", [...overridesByName.keys()])
53
103
  }
54
104
 
@@ -82,15 +132,23 @@ export function customDashboardPlugin(): Plugin {
82
132
  const normalized = args.path.replace(/\\/g, "/")
83
133
  if (!normalized.includes("/dashboard/dist/")) return undefined
84
134
 
85
- const srcEntry = args.path
135
+ const srcEntry = normalized
86
136
  .replace(/\/dist\/app\.(mjs|js)$/, "/src/app.tsx")
87
- if (!fs.existsSync(srcEntry)) return undefined
88
137
 
89
- console.log(
90
- `[custom-dashboard] Redirecting entry: ${args.path} → ${srcEntry}`
91
- )
138
+ let contents: string
139
+ try {
140
+ contents = fs.readFileSync(srcEntry, "utf-8")
141
+ } catch {
142
+ return undefined
143
+ }
144
+
145
+ if (process.env.NODE_ENV === "development") {
146
+ console.log(
147
+ `[custom-dashboard] Redirecting entry: ${args.path} → ${srcEntry}`
148
+ )
149
+ }
92
150
  return {
93
- contents: fs.readFileSync(srcEntry, "utf-8"),
151
+ contents,
94
152
  loader: "tsx",
95
153
  resolveDir: path.dirname(srcEntry),
96
154
  }
@@ -109,12 +167,23 @@ export function customDashboardPlugin(): Plugin {
109
167
  if (componentName && overrides.has(componentName)) {
110
168
  const overridePath = overrides.get(componentName)!
111
169
  const ext = path.extname(overridePath).slice(1)
112
- console.log(
113
- `[custom-dashboard] Override: ${componentName} → ${overridePath}`
114
- )
170
+ const loader = VALID_LOADERS[ext] || "tsx"
171
+
172
+ let contents: string
173
+ try {
174
+ contents = fs.readFileSync(overridePath, "utf-8")
175
+ } catch {
176
+ return undefined
177
+ }
178
+
179
+ if (process.env.NODE_ENV === "development") {
180
+ console.log(
181
+ `[custom-dashboard] Override: ${componentName} → ${overridePath}`
182
+ )
183
+ }
115
184
  return {
116
- contents: fs.readFileSync(overridePath, "utf-8"),
117
- loader: ext as any,
185
+ contents,
186
+ loader: loader as any,
118
187
  resolveDir: path.dirname(overridePath),
119
188
  }
120
189
  }
@@ -137,8 +206,9 @@ export function customDashboardPlugin(): Plugin {
137
206
  if (id !== MENU_RESOLVED_ID) return
138
207
  const basePath = path.resolve(process.cwd(), "src/admin/menu.config")
139
208
  for (const ext of COMPONENT_EXTENSIONS) {
140
- if (fs.existsSync(basePath + ext)) {
141
- return `export { default } from "${basePath + ext}"`
209
+ const fullPath = (basePath + ext).replace(/\\/g, "/")
210
+ if (fs.existsSync(fullPath)) {
211
+ return `export { default } from "${fullPath}"`
142
212
  }
143
213
  }
144
214
  return "export default null"
@@ -1,135 +0,0 @@
1
- import {
2
- SingleColumnPage
3
- } from "./chunk-GIZFNLKK.mjs";
4
- import {
5
- SingleColumnPageSkeleton
6
- } from "./chunk-LPEUYMRK.mjs";
7
- import {
8
- useCustomers
9
- } from "./chunk-5AFMB7XQ.mjs";
10
- import {
11
- useOrders
12
- } from "./chunk-73OGFYCU.mjs";
13
- import "./chunk-R3FD2XEU.mjs";
14
- import {
15
- useProducts
16
- } from "./chunk-3TPUO6MD.mjs";
17
- import "./chunk-7AXHHXCX.mjs";
18
- import "./chunk-FXYH54JP.mjs";
19
- import "./chunk-774WSTCC.mjs";
20
- import "./chunk-NFEK63OE.mjs";
21
- import "./chunk-QZ7TP4HQ.mjs";
22
-
23
- // src/routes/dashboard/dashboard.tsx
24
- import { Container, Heading, Text } from "@medusajs/ui";
25
- import {
26
- ShoppingCart,
27
- CurrencyDollar,
28
- Users,
29
- SquaresPlus
30
- } from "@medusajs/icons";
31
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
32
- var StatCard = ({ title, value, subtitle, icon, isLoading }) => /* @__PURE__ */ jsx(Container, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between", children: [
33
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
34
- /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: title }),
35
- isLoading ? /* @__PURE__ */ jsx("div", { className: "h-8 w-20 animate-pulse rounded bg-ui-bg-component" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
36
- /* @__PURE__ */ jsx(Text, { size: "xlarge", leading: "compact", weight: "plus", children: value }),
37
- subtitle && /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: subtitle })
38
- ] })
39
- ] }),
40
- /* @__PURE__ */ jsx("div", { className: "text-ui-fg-muted", children: icon })
41
- ] }) });
42
- var Dashboard = () => {
43
- const { orders, count: ordersCount, isPending: ordersLoading } = useOrders({
44
- limit: 100,
45
- offset: 0
46
- });
47
- const { products, count: productsCount, isPending: productsLoading } = useProducts({
48
- limit: 1,
49
- offset: 0
50
- });
51
- const { customers, count: customersCount, isPending: customersLoading } = useCustomers({
52
- limit: 1,
53
- offset: 0
54
- });
55
- const totalRevenue = orders?.reduce((sum, order) => {
56
- return sum + (order.total || 0);
57
- }, 0) || 0;
58
- const formatCurrency = (amount) => {
59
- return new Intl.NumberFormat("fr-FR", {
60
- style: "currency",
61
- currency: "EUR",
62
- minimumFractionDigits: 0,
63
- maximumFractionDigits: 0
64
- }).format(amount / 100);
65
- };
66
- const recentOrders = orders?.slice(0, 5) || [];
67
- const isLoading = ordersLoading || productsLoading || customersLoading;
68
- if (isLoading && !orders && !products && !customers) {
69
- return /* @__PURE__ */ jsx(SingleColumnPageSkeleton, { sections: 3 });
70
- }
71
- return /* @__PURE__ */ jsxs(SingleColumnPage, { widgets: { before: [], after: [] }, children: [
72
- /* @__PURE__ */ jsx(Container, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-1", children: [
73
- /* @__PURE__ */ jsx(Heading, { level: "h1", children: "Dashboard" }),
74
- /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Vue d'ensemble de votre activit\xE9 commerciale." })
75
- ] }) }),
76
- /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4", children: [
77
- /* @__PURE__ */ jsx(
78
- StatCard,
79
- {
80
- title: "Chiffre d'affaires",
81
- value: formatCurrency(totalRevenue),
82
- subtitle: `${ordersCount || 0} commandes`,
83
- icon: /* @__PURE__ */ jsx(CurrencyDollar, {}),
84
- isLoading: ordersLoading
85
- }
86
- ),
87
- /* @__PURE__ */ jsx(
88
- StatCard,
89
- {
90
- title: "Commandes",
91
- value: ordersCount || 0,
92
- icon: /* @__PURE__ */ jsx(ShoppingCart, {}),
93
- isLoading: ordersLoading
94
- }
95
- ),
96
- /* @__PURE__ */ jsx(
97
- StatCard,
98
- {
99
- title: "Produits",
100
- value: productsCount || 0,
101
- icon: /* @__PURE__ */ jsx(SquaresPlus, {}),
102
- isLoading: productsLoading
103
- }
104
- ),
105
- /* @__PURE__ */ jsx(
106
- StatCard,
107
- {
108
- title: "Clients",
109
- value: customersCount || 0,
110
- icon: /* @__PURE__ */ jsx(Users, {}),
111
- isLoading: customersLoading
112
- }
113
- )
114
- ] }),
115
- /* @__PURE__ */ jsxs(Container, { className: "p-0", children: [
116
- /* @__PURE__ */ jsx("div", { className: "px-6 py-4 border-b border-ui-border-base", children: /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: "Commandes r\xE9centes" }) }),
117
- /* @__PURE__ */ jsx("div", { className: "divide-y divide-ui-border-base", children: ordersLoading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-ui-border-base border-t-ui-fg-base" }) }) : recentOrders.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-6 py-8 text-center", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Aucune commande pour le moment." }) }) : recentOrders.map((order) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-6 py-3", children: [
118
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-0.5", children: [
119
- /* @__PURE__ */ jsxs(Text, { size: "small", leading: "compact", weight: "plus", children: [
120
- "#",
121
- order.display_id
122
- ] }),
123
- /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: new Date(order.created_at).toLocaleDateString("fr-FR") })
124
- ] }),
125
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-end gap-y-0.5", children: [
126
- /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", weight: "plus", children: formatCurrency(order.total || 0) }),
127
- /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle capitalize", children: order.status })
128
- ] })
129
- ] }, order.id)) })
130
- ] })
131
- ] });
132
- };
133
- export {
134
- Dashboard as Component
135
- };
@@ -1,174 +0,0 @@
1
- import { Container, Heading, Text } from "@medusajs/ui"
2
- import {
3
- ChartBar,
4
- ShoppingCart,
5
- CurrencyDollar,
6
- Users,
7
- BuildingStorefront,
8
- SquaresPlus
9
- } from "@medusajs/icons"
10
-
11
- import { useOrders } from "../../hooks/api/orders"
12
- import { useProducts } from "../../hooks/api/products"
13
- import { useCustomers } from "../../hooks/api/customers"
14
- import { SingleColumnPage } from "../../components/layout/pages"
15
- import { SingleColumnPageSkeleton } from "../../components/common/skeleton"
16
-
17
- type StatCardProps = {
18
- title: string
19
- value: string | number
20
- subtitle?: string
21
- icon: React.ReactNode
22
- isLoading?: boolean
23
- }
24
-
25
- const StatCard = ({ title, value, subtitle, icon, isLoading }: StatCardProps) => (
26
- <Container className="p-6">
27
- <div className="flex items-start justify-between">
28
- <div className="flex flex-col gap-y-2">
29
- <Text size="small" leading="compact" className="text-ui-fg-subtle">
30
- {title}
31
- </Text>
32
- {isLoading ? (
33
- <div className="h-8 w-20 animate-pulse rounded bg-ui-bg-component" />
34
- ) : (
35
- <>
36
- <Text size="xlarge" leading="compact" weight="plus">
37
- {value}
38
- </Text>
39
- {subtitle && (
40
- <Text size="small" leading="compact" className="text-ui-fg-subtle">
41
- {subtitle}
42
- </Text>
43
- )}
44
- </>
45
- )}
46
- </div>
47
- <div className="text-ui-fg-muted">{icon}</div>
48
- </div>
49
- </Container>
50
- )
51
-
52
- export const Dashboard = () => {
53
- const { orders, count: ordersCount, isPending: ordersLoading } = useOrders({
54
- limit: 100,
55
- offset: 0,
56
- })
57
-
58
- const { products, count: productsCount, isPending: productsLoading } = useProducts({
59
- limit: 1,
60
- offset: 0,
61
- })
62
-
63
- const { customers, count: customersCount, isPending: customersLoading } = useCustomers({
64
- limit: 1,
65
- offset: 0,
66
- })
67
-
68
- // Calculate total revenue from orders
69
- const totalRevenue = orders?.reduce((sum, order) => {
70
- return sum + (order.total || 0)
71
- }, 0) || 0
72
-
73
- // Format currency
74
- const formatCurrency = (amount: number) => {
75
- return new Intl.NumberFormat("fr-FR", {
76
- style: "currency",
77
- currency: "EUR",
78
- minimumFractionDigits: 0,
79
- maximumFractionDigits: 0,
80
- }).format(amount / 100)
81
- }
82
-
83
- // Get recent orders
84
- const recentOrders = orders?.slice(0, 5) || []
85
-
86
- const isLoading = ordersLoading || productsLoading || customersLoading
87
-
88
- if (isLoading && !orders && !products && !customers) {
89
- return <SingleColumnPageSkeleton sections={3} />
90
- }
91
-
92
- return (
93
- <SingleColumnPage widgets={{ before: [], after: [] }}>
94
- <Container className="p-6">
95
- <div className="flex flex-col gap-y-1">
96
- <Heading level="h1">Dashboard</Heading>
97
- <Text className="text-ui-fg-subtle">
98
- Vue d'ensemble de votre activité commerciale.
99
- </Text>
100
- </div>
101
- </Container>
102
-
103
- {/* Stats Grid */}
104
- <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4">
105
- <StatCard
106
- title="Chiffre d'affaires"
107
- value={formatCurrency(totalRevenue)}
108
- subtitle={`${ordersCount || 0} commandes`}
109
- icon={<CurrencyDollar />}
110
- isLoading={ordersLoading}
111
- />
112
- <StatCard
113
- title="Commandes"
114
- value={ordersCount || 0}
115
- icon={<ShoppingCart />}
116
- isLoading={ordersLoading}
117
- />
118
- <StatCard
119
- title="Produits"
120
- value={productsCount || 0}
121
- icon={<SquaresPlus />}
122
- isLoading={productsLoading}
123
- />
124
- <StatCard
125
- title="Clients"
126
- value={customersCount || 0}
127
- icon={<Users />}
128
- isLoading={customersLoading}
129
- />
130
- </div>
131
-
132
- {/* Recent Orders */}
133
- <Container className="p-0">
134
- <div className="px-6 py-4 border-b border-ui-border-base">
135
- <Text size="small" leading="compact" weight="plus">
136
- Commandes récentes
137
- </Text>
138
- </div>
139
- <div className="divide-y divide-ui-border-base">
140
- {ordersLoading ? (
141
- <div className="flex items-center justify-center py-8">
142
- <div className="h-6 w-6 animate-spin rounded-full border-2 border-ui-border-base border-t-ui-fg-base" />
143
- </div>
144
- ) : recentOrders.length === 0 ? (
145
- <div className="px-6 py-8 text-center">
146
- <Text className="text-ui-fg-subtle">Aucune commande pour le moment.</Text>
147
- </div>
148
- ) : (
149
- recentOrders.map((order) => (
150
- <div key={order.id} className="flex items-center justify-between px-6 py-3">
151
- <div className="flex flex-col gap-y-0.5">
152
- <Text size="small" leading="compact" weight="plus">
153
- #{order.display_id}
154
- </Text>
155
- <Text size="small" leading="compact" className="text-ui-fg-subtle">
156
- {new Date(order.created_at).toLocaleDateString("fr-FR")}
157
- </Text>
158
- </div>
159
- <div className="flex flex-col items-end gap-y-0.5">
160
- <Text size="small" leading="compact" weight="plus">
161
- {formatCurrency(order.total || 0)}
162
- </Text>
163
- <Text size="small" leading="compact" className="text-ui-fg-subtle capitalize">
164
- {order.status}
165
- </Text>
166
- </div>
167
- </div>
168
- ))
169
- )}
170
- </div>
171
- </Container>
172
- </SingleColumnPage>
173
- )
174
- }
@@ -1 +0,0 @@
1
- export { Dashboard as Component } from "./dashboard"
@@ -13,14 +13,16 @@ import {
13
13
  } from "./chunk-DTZXEQXZ.mjs";
14
14
  import "./chunk-HQKGZADC.mjs";
15
15
  import "./chunk-EMIHDNB7.mjs";
16
- import "./chunk-IUCDCPJU.mjs";
17
- import {
18
- KeyboundForm
19
- } from "./chunk-6HTZNHPT.mjs";
20
16
  import {
21
17
  usePromotionTableFilters
22
18
  } from "./chunk-LSEYENCI.mjs";
23
19
  import "./chunk-ZQJPHZKI.mjs";
20
+ import "./chunk-C76H5USB.mjs";
21
+ import "./chunk-DFFLVEZ5.mjs";
22
+ import "./chunk-IUCDCPJU.mjs";
23
+ import {
24
+ KeyboundForm
25
+ } from "./chunk-6HTZNHPT.mjs";
24
26
  import "./chunk-WVA4O7QS.mjs";
25
27
  import {
26
28
  RouteFocusModal,
@@ -32,8 +34,6 @@ import "./chunk-C5P5PL3E.mjs";
32
34
  import "./chunk-LPEUYMRK.mjs";
33
35
  import "./chunk-OC7BQLYI.mjs";
34
36
  import "./chunk-S4DMV3ZT.mjs";
35
- import "./chunk-C76H5USB.mjs";
36
- import "./chunk-DFFLVEZ5.mjs";
37
37
  import "./chunk-535OVBXR.mjs";
38
38
  import "./chunk-OBQI23QM.mjs";
39
39
  import {
@@ -8,9 +8,11 @@ import "./chunk-LQTHYS2Z.mjs";
8
8
  import "./chunk-DTZXEQXZ.mjs";
9
9
  import "./chunk-HQKGZADC.mjs";
10
10
  import "./chunk-EMIHDNB7.mjs";
11
+ import "./chunk-ZQJPHZKI.mjs";
12
+ import "./chunk-C76H5USB.mjs";
13
+ import "./chunk-DFFLVEZ5.mjs";
11
14
  import "./chunk-IUCDCPJU.mjs";
12
15
  import "./chunk-6HTZNHPT.mjs";
13
- import "./chunk-ZQJPHZKI.mjs";
14
16
  import {
15
17
  RouteFocusModal
16
18
  } from "./chunk-D6UW7URG.mjs";
@@ -20,39 +22,37 @@ import {
20
22
  import "./chunk-LPEUYMRK.mjs";
21
23
  import "./chunk-OC7BQLYI.mjs";
22
24
  import "./chunk-S4DMV3ZT.mjs";
23
- import "./chunk-C76H5USB.mjs";
24
- import "./chunk-DFFLVEZ5.mjs";
25
25
  import "./chunk-535OVBXR.mjs";
26
26
  import "./chunk-OBQI23QM.mjs";
27
27
  import "./chunk-4GQYRG3L.mjs";
28
28
  import "./chunk-I4OBEAOJ.mjs";
29
29
  import "./chunk-FAB3VINY.mjs";
30
- import "./chunk-C32SLRTC.mjs";
31
30
  import "./chunk-HI6URQ7H.mjs";
32
31
  import "./chunk-6CLQKVAU.mjs";
33
32
  import "./chunk-KI7TOXBR.mjs";
34
33
  import "./chunk-QBIQEVTU.mjs";
34
+ import "./chunk-C32SLRTC.mjs";
35
35
  import "./chunk-WAXMT4IY.mjs";
36
36
  import "./chunk-DYDGGABK.mjs";
37
37
  import "./chunk-LGNTHZ5Y.mjs";
38
38
  import "./chunk-CN7JXSGW.mjs";
39
39
  import "./chunk-5BQQRHQS.mjs";
40
- import "./chunk-6F74MBBU.mjs";
41
40
  import "./chunk-FWRPGWPC.mjs";
41
+ import "./chunk-5AFMB7XQ.mjs";
42
+ import "./chunk-6F74MBBU.mjs";
42
43
  import "./chunk-A63RZVX6.mjs";
43
44
  import "./chunk-HBXV7ENS.mjs";
44
45
  import "./chunk-CDORR33H.mjs";
46
+ import "./chunk-73OGFYCU.mjs";
47
+ import "./chunk-R3FD2XEU.mjs";
45
48
  import "./chunk-6X2UTJF3.mjs";
49
+ import "./chunk-RNV5E7NV.mjs";
50
+ import "./chunk-3BF5SC66.mjs";
46
51
  import {
47
52
  useStore
48
53
  } from "./chunk-VCSSQVPD.mjs";
49
54
  import "./chunk-HP2JH45P.mjs";
50
55
  import "./chunk-SQDIZZDW.mjs";
51
- import "./chunk-RNV5E7NV.mjs";
52
- import "./chunk-3BF5SC66.mjs";
53
- import "./chunk-5AFMB7XQ.mjs";
54
- import "./chunk-73OGFYCU.mjs";
55
- import "./chunk-R3FD2XEU.mjs";
56
56
  import "./chunk-3TPUO6MD.mjs";
57
57
  import "./chunk-7AXHHXCX.mjs";
58
58
  import "./chunk-FXYH54JP.mjs";
@@ -25,6 +25,10 @@ import "./chunk-ZQJPHZKI.mjs";
25
25
  import {
26
26
  SingleColumnPage
27
27
  } from "./chunk-GIZFNLKK.mjs";
28
+ import {
29
+ useQueryParams
30
+ } from "./chunk-C76H5USB.mjs";
31
+ import "./chunk-DFFLVEZ5.mjs";
28
32
  import {
29
33
  useExtension
30
34
  } from "./chunk-C5P5PL3E.mjs";
@@ -34,10 +38,6 @@ import {
34
38
  } from "./chunk-OZPB6JBL.mjs";
35
39
  import "./chunk-OC7BQLYI.mjs";
36
40
  import "./chunk-S4DMV3ZT.mjs";
37
- import {
38
- useQueryParams
39
- } from "./chunk-C76H5USB.mjs";
40
- import "./chunk-DFFLVEZ5.mjs";
41
41
  import "./chunk-535OVBXR.mjs";
42
42
  import {
43
43
  useApiKeys,
@@ -1,10 +1,10 @@
1
+ import {
2
+ getCurrencySymbol
3
+ } from "./chunk-DK4WIVY6.mjs";
1
4
  import "./chunk-IUCDCPJU.mjs";
2
5
  import {
3
6
  KeyboundForm
4
7
  } from "./chunk-6HTZNHPT.mjs";
5
- import {
6
- getCurrencySymbol
7
- } from "./chunk-DK4WIVY6.mjs";
8
8
  import {
9
9
  RouteDrawer
10
10
  } from "./chunk-WVA4O7QS.mjs";
@@ -26,6 +26,8 @@ import "./chunk-ZQJPHZKI.mjs";
26
26
  import {
27
27
  TwoColumnPage
28
28
  } from "./chunk-GIZFNLKK.mjs";
29
+ import "./chunk-C76H5USB.mjs";
30
+ import "./chunk-DFFLVEZ5.mjs";
29
31
  import "./chunk-4GQOUCX6.mjs";
30
32
  import "./chunk-PMA2D6IL.mjs";
31
33
  import {
@@ -39,24 +41,23 @@ import {
39
41
  } from "./chunk-OZPB6JBL.mjs";
40
42
  import "./chunk-OC7BQLYI.mjs";
41
43
  import "./chunk-S4DMV3ZT.mjs";
42
- import "./chunk-C76H5USB.mjs";
43
- import "./chunk-DFFLVEZ5.mjs";
44
44
  import "./chunk-535OVBXR.mjs";
45
45
  import "./chunk-4GQYRG3L.mjs";
46
46
  import "./chunk-I4OBEAOJ.mjs";
47
47
  import "./chunk-FAB3VINY.mjs";
48
- import "./chunk-C32SLRTC.mjs";
49
48
  import "./chunk-HI6URQ7H.mjs";
50
49
  import "./chunk-6CLQKVAU.mjs";
51
50
  import "./chunk-KI7TOXBR.mjs";
52
51
  import "./chunk-QBIQEVTU.mjs";
52
+ import "./chunk-C32SLRTC.mjs";
53
53
  import "./chunk-WAXMT4IY.mjs";
54
54
  import "./chunk-DYDGGABK.mjs";
55
55
  import "./chunk-LGNTHZ5Y.mjs";
56
56
  import "./chunk-CN7JXSGW.mjs";
57
57
  import "./chunk-5BQQRHQS.mjs";
58
- import "./chunk-6F74MBBU.mjs";
59
58
  import "./chunk-FWRPGWPC.mjs";
59
+ import "./chunk-5AFMB7XQ.mjs";
60
+ import "./chunk-6F74MBBU.mjs";
60
61
  import {
61
62
  campaignsQueryKeys,
62
63
  useAddOrRemoveCampaignPromotions,
@@ -66,15 +67,14 @@ import {
66
67
  } from "./chunk-A63RZVX6.mjs";
67
68
  import "./chunk-HBXV7ENS.mjs";
68
69
  import "./chunk-CDORR33H.mjs";
70
+ import "./chunk-73OGFYCU.mjs";
71
+ import "./chunk-R3FD2XEU.mjs";
69
72
  import "./chunk-6X2UTJF3.mjs";
73
+ import "./chunk-RNV5E7NV.mjs";
74
+ import "./chunk-3BF5SC66.mjs";
70
75
  import "./chunk-VCSSQVPD.mjs";
71
76
  import "./chunk-HP2JH45P.mjs";
72
77
  import "./chunk-SQDIZZDW.mjs";
73
- import "./chunk-RNV5E7NV.mjs";
74
- import "./chunk-3BF5SC66.mjs";
75
- import "./chunk-5AFMB7XQ.mjs";
76
- import "./chunk-73OGFYCU.mjs";
77
- import "./chunk-R3FD2XEU.mjs";
78
78
  import "./chunk-3TPUO6MD.mjs";
79
79
  import "./chunk-7AXHHXCX.mjs";
80
80
  import {
@@ -18,6 +18,8 @@ import "./chunk-ZQJPHZKI.mjs";
18
18
  import {
19
19
  SingleColumnPage
20
20
  } from "./chunk-GIZFNLKK.mjs";
21
+ import "./chunk-C76H5USB.mjs";
22
+ import "./chunk-DFFLVEZ5.mjs";
21
23
  import {
22
24
  useExtension
23
25
  } from "./chunk-C5P5PL3E.mjs";
@@ -27,8 +29,6 @@ import {
27
29
  } from "./chunk-OZPB6JBL.mjs";
28
30
  import "./chunk-OC7BQLYI.mjs";
29
31
  import "./chunk-S4DMV3ZT.mjs";
30
- import "./chunk-C76H5USB.mjs";
31
- import "./chunk-DFFLVEZ5.mjs";
32
32
  import "./chunk-535OVBXR.mjs";
33
33
  import {
34
34
  useCampaigns,