@medusajs/dashboard 3.0.0-snapshot-20251212142124 → 3.0.0-snapshot-20251214110905

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 (248) hide show
  1. package/dist/{add-campaign-promotions-JQKPED4U.mjs → add-campaign-promotions-PHAHMGXP.mjs} +2 -2
  2. package/dist/{adjust-inventory-2MFA656V.mjs → adjust-inventory-I5VYMAI4.mjs} +2 -2
  3. package/dist/{api-key-management-create-ZUVF3SLR.mjs → api-key-management-create-CVRFY4PL.mjs} +2 -2
  4. package/dist/{api-key-management-detail-F7ZRCFPA.mjs → api-key-management-detail-HRVP6HRC.mjs} +3 -3
  5. package/dist/{api-key-management-edit-42HNUSXL.mjs → api-key-management-edit-JMU3WEPX.mjs} +2 -2
  6. package/dist/{api-key-management-sales-channels-7FVABESO.mjs → api-key-management-sales-channels-4OU5VGIG.mjs} +2 -2
  7. package/dist/app.css +45 -0
  8. package/dist/app.js +13473 -12039
  9. package/dist/app.mjs +4 -4
  10. package/dist/{campaign-budget-edit-6DMZGUCI.mjs → campaign-budget-edit-B5MSE26J.mjs} +2 -2
  11. package/dist/{campaign-configuration-UNFRB5HR.mjs → campaign-configuration-QOE3D2BE.mjs} +2 -2
  12. package/dist/{campaign-create-QXG7PD3S.mjs → campaign-create-FJOECKGT.mjs} +3 -3
  13. package/dist/{campaign-detail-6VNSVZHQ.mjs → campaign-detail-BDI3P2SF.mjs} +3 -3
  14. package/dist/{campaign-edit-HN4US7DV.mjs → campaign-edit-K2POQH7M.mjs} +2 -2
  15. package/dist/{categories-metadata-ORPB2LIW.mjs → categories-metadata-BARTITD5.mjs} +6 -6
  16. package/dist/{category-create-FFIBWXAH.mjs → category-create-L2KJCHPO.mjs} +2 -2
  17. package/dist/{category-detail-RICXPIVS.mjs → category-detail-CUMEBNXU.mjs} +22 -7
  18. package/dist/{category-edit-74MZ6TXN.mjs → category-edit-U6SLZSAX.mjs} +2 -2
  19. package/dist/{category-list-AH2EGTI7.mjs → category-list-W7JW4PWA.mjs} +16 -1
  20. package/dist/{category-organize-B6EFBFKB.mjs → category-organize-LLSVAO3U.mjs} +2 -2
  21. package/dist/{category-products-L4XIX3IQ.mjs → category-products-GYXTDDBQ.mjs} +8 -8
  22. package/dist/{chunk-XTQ7UFA3.mjs → chunk-2HDKZN4Q.mjs} +1 -1
  23. package/dist/chunk-35LSPN2U.mjs +66 -0
  24. package/dist/{chunk-PNPT4W2F.mjs → chunk-3BJLNORD.mjs} +1 -1
  25. package/dist/{chunk-4G2UHUXX.mjs → chunk-67KHYLIQ.mjs} +9 -9
  26. package/dist/{chunk-AMOGGDOW.mjs → chunk-AIZ6W4QI.mjs} +1 -1
  27. package/dist/{chunk-EQBVGH3N.mjs → chunk-B3AOQW2B.mjs} +1 -1
  28. package/dist/{chunk-UKECZ5PA.mjs → chunk-BBTE6VKD.mjs} +3 -3
  29. package/dist/{chunk-3YPRDSZ6.mjs → chunk-BZKI5J2M.mjs} +1 -1
  30. package/dist/{chunk-25UWYEJX.mjs → chunk-CQOOXWPZ.mjs} +1 -1
  31. package/dist/{chunk-42OOM4DJ.mjs → chunk-D6UW7URG.mjs} +23 -6
  32. package/dist/{chunk-LHNU4DYZ.mjs → chunk-DS5IRNJY.mjs} +2 -2
  33. package/dist/{chunk-4VNR7DND.mjs → chunk-F5NZDW7L.mjs} +2 -2
  34. package/dist/{chunk-JJGE3EV6.mjs → chunk-F63F3FIT.mjs} +2 -2
  35. package/dist/{chunk-W7SLPIO2.mjs → chunk-FEB3ZGTL.mjs} +214 -17
  36. package/dist/{chunk-4YAPXPLM.mjs → chunk-FPBKWWSI.mjs} +1 -1
  37. package/dist/{chunk-EXDBX4YX.mjs → chunk-GC3QXC6D.mjs} +3 -3
  38. package/dist/{chunk-JUVGXLY5.mjs → chunk-HKKZJTRO.mjs} +188 -13
  39. package/dist/{chunk-EQTBJSBZ.mjs → chunk-KIIT4BNH.mjs} +3 -0
  40. package/dist/{chunk-KF7ZWW4K.mjs → chunk-LCEKY54O.mjs} +2 -2
  41. package/dist/{chunk-D4J3CEWH.mjs → chunk-N3SAXQVR.mjs} +2 -2
  42. package/dist/{chunk-Q6MSICBU.mjs → chunk-O333RR6K.mjs} +1 -1
  43. package/dist/{chunk-YV4ANEZF.mjs → chunk-PXZEQZ6Q.mjs} +1 -1
  44. package/dist/{chunk-Q4E6LV6K.mjs → chunk-Q4AXBDFH.mjs} +269 -182
  45. package/dist/{chunk-CZFLKMYE.mjs → chunk-RMDYKRWW.mjs} +4 -4
  46. package/dist/{chunk-GN6OCHP4.mjs → chunk-RU4ZS47V.mjs} +11 -1
  47. package/dist/{chunk-UM4OIJZ3.mjs → chunk-S22SJRPO.mjs} +1 -1
  48. package/dist/{chunk-HWKLNKOY.mjs → chunk-U726TGCM.mjs} +1 -1
  49. package/dist/{chunk-XXBP2Z5M.mjs → chunk-WVA4O7QS.mjs} +1 -1
  50. package/dist/{chunk-L4NOVTH5.mjs → chunk-YIOBBZUB.mjs} +2 -2
  51. package/dist/{chunk-FIFVOKTK.mjs → chunk-Z6NHG5LQ.mjs} +1 -1
  52. package/dist/{collection-add-products-MO4FGYD5.mjs → collection-add-products-4WBPS6PY.mjs} +8 -8
  53. package/dist/{collection-create-DCRW344Z.mjs → collection-create-4JX4YE47.mjs} +2 -2
  54. package/dist/{collection-detail-ZCHVPXW5.mjs → collection-detail-HT4SSV32.mjs} +22 -7
  55. package/dist/{collection-edit-UNFEW6HT.mjs → collection-edit-MXL35GQQ.mjs} +2 -2
  56. package/dist/{collection-list-3UUFO7AP.mjs → collection-list-FYONEBDN.mjs} +29 -14
  57. package/dist/{collection-metadata-ZOYQDOOT.mjs → collection-metadata-YEZ2TBRX.mjs} +6 -6
  58. package/dist/{customer-create-XCLZENJS.mjs → customer-create-IA56MXE6.mjs} +2 -2
  59. package/dist/{customer-create-address-4HZUIAM7.mjs → customer-create-address-27M25HTO.mjs} +2 -2
  60. package/dist/{customer-detail-RMZTHQIQ.mjs → customer-detail-MB7CS7OG.mjs} +6 -6
  61. package/dist/{customer-edit-BW5GVTQI.mjs → customer-edit-XQ5NWIVX.mjs} +2 -2
  62. package/dist/{customer-group-add-customers-HUGHHMU6.mjs → customer-group-add-customers-DM4VLTNB.mjs} +5 -5
  63. package/dist/{customer-group-create-6YV7W6TI.mjs → customer-group-create-RY4FVEIW.mjs} +2 -2
  64. package/dist/{customer-group-detail-4S7WB3WV.mjs → customer-group-detail-U5UAP7QS.mjs} +6 -6
  65. package/dist/{customer-group-edit-7NXU34BQ.mjs → customer-group-edit-MQWARIQZ.mjs} +2 -2
  66. package/dist/{customer-group-list-JQX6PW6E.mjs → customer-group-list-KAS6JSCQ.mjs} +3 -3
  67. package/dist/{customer-group-metadata-WK2BGEGO.mjs → customer-group-metadata-JQJRLLXG.mjs} +3 -3
  68. package/dist/{customer-metadata-ZUWCUTM7.mjs → customer-metadata-HN2DYD5I.mjs} +3 -3
  69. package/dist/{customers-add-customer-group-JKTM33OU.mjs → customers-add-customer-group-UKLSPYEU.mjs} +8 -8
  70. package/dist/{edit-inventory-item-Y5W6VTHJ.mjs → edit-inventory-item-RATTNP2Y.mjs} +2 -2
  71. package/dist/{edit-inventory-item-attributes-NAAZDFEJ.mjs → edit-inventory-item-attributes-JHH5GSNL.mjs} +2 -2
  72. package/dist/{edit-reservation-2UD4RZJX.mjs → edit-reservation-UZCSNLHY.mjs} +2 -2
  73. package/dist/{edit-rules-AXG2NQNS.mjs → edit-rules-VMEHCXYQ.mjs} +5 -5
  74. package/dist/en.json +34 -0
  75. package/dist/{inventory-create-6SKU4TZL.mjs → inventory-create-KN72V2KK.mjs} +6 -6
  76. package/dist/{inventory-detail-LAYYI2QT.mjs → inventory-detail-7OHCFAJO.mjs} +3 -3
  77. package/dist/{inventory-metadata-Q6E6SZF3.mjs → inventory-metadata-I3IRRMLH.mjs} +6 -6
  78. package/dist/{inventory-stock-SNAWXRBE.mjs → inventory-stock-5IUICNEH.mjs} +7 -7
  79. package/dist/{invite-VKHAAF4Z.mjs → invite-FVE4ZBKB.mjs} +2 -2
  80. package/dist/{location-create-RPLEXUZR.mjs → location-create-WZ43K3W7.mjs} +2 -2
  81. package/dist/{location-detail-XXH22FLG.mjs → location-detail-3MSUGB4W.mjs} +8 -8
  82. package/dist/{location-edit-L4ISEQHX.mjs → location-edit-VCS7GVWQ.mjs} +2 -2
  83. package/dist/{location-fulfillment-providers-FSC27EK7.mjs → location-fulfillment-providers-ZVZMLCIC.mjs} +6 -6
  84. package/dist/{location-list-Z42ZYHUF.mjs → location-list-KVBA6J47.mjs} +2 -2
  85. package/dist/{location-sales-channels-YMABMECM.mjs → location-sales-channels-NKNM5TQK.mjs} +2 -2
  86. package/dist/{location-service-zone-create-NSMZCD5N.mjs → location-service-zone-create-3FWF3DG5.mjs} +3 -3
  87. package/dist/{location-service-zone-edit-6OUAFEZD.mjs → location-service-zone-edit-KHHMSPXD.mjs} +2 -2
  88. package/dist/{location-service-zone-manage-areas-SEC6LKCZ.mjs → location-service-zone-manage-areas-YFEAZUUN.mjs} +3 -3
  89. package/dist/{location-service-zone-shipping-option-create-GWNLLSM5.mjs → location-service-zone-shipping-option-create-CZWEHKVJ.mjs} +7 -7
  90. package/dist/{location-service-zone-shipping-option-edit-QS6HTWST.mjs → location-service-zone-shipping-option-edit-4CGPQ3VT.mjs} +5 -5
  91. package/dist/{location-service-zone-shipping-option-pricing-23QLNSBT.mjs → location-service-zone-shipping-option-pricing-Z5IFOLFJ.mjs} +4 -4
  92. package/dist/{login-MFUCIAT6.mjs → login-OCYZM7SI.mjs} +5 -5
  93. package/dist/{manage-locations-JD6FSBOT.mjs → manage-locations-MLNMPQ5I.mjs} +2 -2
  94. package/dist/{order-allocate-items-3DDI4V3W.mjs → order-allocate-items-VRPPVPP3.mjs} +3 -3
  95. package/dist/{order-create-claim-G7BDA7WR.mjs → order-create-claim-O3ZYTAIC.mjs} +7 -7
  96. package/dist/{order-create-edit-BXYPZRZV.mjs → order-create-edit-HUS7IRS3.mjs} +6 -6
  97. package/dist/{order-create-exchange-AGEXEKOF.mjs → order-create-exchange-TUP4NHHX.mjs} +13 -13
  98. package/dist/{order-create-fulfillment-GMLSBCEK.mjs → order-create-fulfillment-4BGDYHBB.mjs} +5 -5
  99. package/dist/{order-create-refund-BT33POIN.mjs → order-create-refund-FA5ERI7M.mjs} +5 -5
  100. package/dist/{order-create-return-QGXWSPMP.mjs → order-create-return-7GPHJ2WU.mjs} +4 -4
  101. package/dist/{order-create-shipment-ZVTOKNC4.mjs → order-create-shipment-27UBYPKT.mjs} +5 -5
  102. package/dist/{order-detail-MORQRSHL.mjs → order-detail-2J7KDTKG.mjs} +11 -11
  103. package/dist/{order-edit-billing-address-IUVC4GSZ.mjs → order-edit-billing-address-E7CD5FBQ.mjs} +5 -5
  104. package/dist/{order-edit-email-MKLJPREH.mjs → order-edit-email-ELRIQYVN.mjs} +5 -5
  105. package/dist/{order-edit-shipping-address-GFSRTDFG.mjs → order-edit-shipping-address-HVNAJUZI.mjs} +5 -5
  106. package/dist/order-export-TRMFVBFO.mjs +121 -0
  107. package/dist/{order-list-QOYJFYD5.mjs → order-list-Y4FET3XV.mjs} +38 -82
  108. package/dist/{order-metadata-BRSYOGKE.mjs → order-metadata-THARHEJC.mjs} +6 -6
  109. package/dist/{order-receive-return-NI345L43.mjs → order-receive-return-X5ASB7DL.mjs} +6 -6
  110. package/dist/{order-request-transfer-ZGGIUFRV.mjs → order-request-transfer-PKF4ULJY.mjs} +5 -5
  111. package/dist/{price-list-configuration-CWTP3Y5X.mjs → price-list-configuration-SZRY7CXO.mjs} +4 -4
  112. package/dist/{price-list-create-HDYM5ZGW.mjs → price-list-create-TYNSJDDM.mjs} +15 -15
  113. package/dist/{price-list-detail-GVGNB5AY.mjs → price-list-detail-ORYFRNB6.mjs} +6 -6
  114. package/dist/{price-list-edit-SW7YIR3Z.mjs → price-list-edit-I5QNCWJP.mjs} +2 -2
  115. package/dist/{price-list-prices-add-P4XHE3F4.mjs → price-list-prices-add-MWAUNUBF.mjs} +10 -10
  116. package/dist/{price-list-prices-edit-C6SX2TLJ.mjs → price-list-prices-edit-Z4YJ4YBY.mjs} +4 -4
  117. package/dist/{product-attributes-AXSXHPI5.mjs → product-attributes-5QW6ZEYB.mjs} +6 -6
  118. package/dist/{product-create-CAGTWFTS.mjs → product-create-YQ76CEF3.mjs} +7 -7
  119. package/dist/{product-create-option-GEGQNSMQ.mjs → product-create-option-UMZKRNTC.mjs} +2 -2
  120. package/dist/{product-create-variant-5DLZZQPL.mjs → product-create-variant-IASRY2JX.mjs} +6 -6
  121. package/dist/{product-detail-FSORFVRL.mjs → product-detail-NVLJQGGK.mjs} +51 -10
  122. package/dist/{product-edit-EYQIREZ6.mjs → product-edit-DP42G3EU.mjs} +6 -6
  123. package/dist/{product-edit-option-HBIOBQTS.mjs → product-edit-option-ZMTSLRG5.mjs} +2 -2
  124. package/dist/{product-export-4XRDDWZQ.mjs → product-export-OK5FCD42.mjs} +15 -15
  125. package/dist/{product-image-variants-edit-KCFCTXE2.mjs → product-image-variants-edit-VEWNL52X.mjs} +5 -5
  126. package/dist/{product-import-JTEXWYY7.mjs → product-import-LX625CIX.mjs} +5 -5
  127. package/dist/{product-list-T4OZG4OC.mjs → product-list-TXEPE6NL.mjs} +19 -7
  128. package/dist/{product-media-EGK66SRX.mjs → product-media-ULNJ7JJY.mjs} +2 -2
  129. package/dist/{product-metadata-5BLG4EIR.mjs → product-metadata-ZKKBE6GG.mjs} +6 -6
  130. package/dist/{product-organization-BEXN2KXC.mjs → product-organization-NMA2WJNT.mjs} +6 -6
  131. package/dist/{product-prices-WQDE4XYT.mjs → product-prices-5WCCQDS6.mjs} +3 -3
  132. package/dist/{product-sales-channels-ZICOOOKY.mjs → product-sales-channels-2PN4L7II.mjs} +2 -2
  133. package/dist/{product-shipping-profile-KIDRTPWA.mjs → product-shipping-profile-45XXB7FM.mjs} +2 -2
  134. package/dist/{product-stock-SSJVQPBZ.mjs → product-stock-KUHH6MFA.mjs} +7 -7
  135. package/dist/{product-tag-create-ZPYRJTC4.mjs → product-tag-create-7EVRE5BL.mjs} +5 -5
  136. package/dist/{product-tag-detail-VRGVJNDT.mjs → product-tag-detail-WULO55NT.mjs} +31 -16
  137. package/dist/{product-tag-edit-2KFYOID4.mjs → product-tag-edit-J4ODRLXN.mjs} +5 -5
  138. package/dist/{product-tag-list-WTX6GV7O.mjs → product-tag-list-V4CCQTL6.mjs} +31 -16
  139. package/dist/{product-tag-metadata-Y7YHTUKM.mjs → product-tag-metadata-KHDYQMSG.mjs} +6 -6
  140. package/dist/{product-type-create-HBDROTGB.mjs → product-type-create-KHSNCQCV.mjs} +2 -2
  141. package/dist/{product-type-detail-3ZLSMENL.mjs → product-type-detail-F35MUSLD.mjs} +22 -7
  142. package/dist/{product-type-edit-H3JCMVRV.mjs → product-type-edit-3LRBWZ3S.mjs} +2 -2
  143. package/dist/{product-type-list-QX7QC6RI.mjs → product-type-list-K2GULUPF.mjs} +19 -4
  144. package/dist/{product-type-metadata-GJACA4N6.mjs → product-type-metadata-CGXFFEJO.mjs} +6 -6
  145. package/dist/{product-variant-detail-L5G4CPVH.mjs → product-variant-detail-NT2MB3Z4.mjs} +19 -4
  146. package/dist/{product-variant-edit-YXALQPQT.mjs → product-variant-edit-KZ6D5CSA.mjs} +5 -5
  147. package/dist/{product-variant-manage-inventory-items-BLHCH6QD.mjs → product-variant-manage-inventory-items-OGM64KYP.mjs} +2 -2
  148. package/dist/{product-variant-media-KLSUISGH.mjs → product-variant-media-C3KCFODU.mjs} +2 -2
  149. package/dist/{product-variant-metadata-OQOE34VY.mjs → product-variant-metadata-I2PN64TH.mjs} +6 -6
  150. package/dist/{profile-edit-5EEKOEO5.mjs → profile-edit-YZCUGEXF.mjs} +2 -2
  151. package/dist/{promotion-add-campaign-JRTM7WBR.mjs → promotion-add-campaign-DO67QK6M.mjs} +3 -3
  152. package/dist/{promotion-create-OXNLKBL7.mjs → promotion-create-4KVSXYAI.mjs} +12 -12
  153. package/dist/{promotion-detail-N6VHHN3X.mjs → promotion-detail-NGNVELME.mjs} +3 -3
  154. package/dist/{promotion-edit-details-AREFQ6O5.mjs → promotion-edit-details-6BSOOWQN.mjs} +2 -2
  155. package/dist/{refund-reason-create-L36EUXXM.mjs → refund-reason-create-CTAPBK3X.mjs} +5 -5
  156. package/dist/{refund-reason-edit-364ALB4G.mjs → refund-reason-edit-B6HRNXGE.mjs} +5 -5
  157. package/dist/{refund-reason-list-ICO2GYRP.mjs → refund-reason-list-7OUHUORB.mjs} +4 -4
  158. package/dist/{region-add-countries-AFWXMQ6W.mjs → region-add-countries-7U4J5RW6.mjs} +2 -2
  159. package/dist/{region-create-YC4VZ4AS.mjs → region-create-IUGX33M5.mjs} +2 -2
  160. package/dist/{region-edit-5GO25GDF.mjs → region-edit-WAU347DP.mjs} +2 -2
  161. package/dist/{region-metadata-VNLW6NYZ.mjs → region-metadata-GRG3QSJY.mjs} +6 -6
  162. package/dist/{reservation-create-Z2SUMBGT.mjs → reservation-create-C6HTEF3R.mjs} +2 -2
  163. package/dist/{reservation-detail-YXIUIN5I.mjs → reservation-detail-KAI7N5UP.mjs} +3 -3
  164. package/dist/{reservation-metadata-7H7TYWZW.mjs → reservation-metadata-TWV7KLOB.mjs} +6 -6
  165. package/dist/{reset-password-5TAYQEUV.mjs → reset-password-Y5WVXV4Q.mjs} +2 -2
  166. package/dist/{return-reason-create-NXWDC6AC.mjs → return-reason-create-HM54WRJY.mjs} +2 -2
  167. package/dist/{return-reason-edit-M6IKNNKB.mjs → return-reason-edit-VSIRHVQ6.mjs} +2 -2
  168. package/dist/return-reason-list-IFFIDA5O.mjs +1 -1
  169. package/dist/{sales-channel-add-products-N7EPWF2N.mjs → sales-channel-add-products-CBECZU46.mjs} +8 -8
  170. package/dist/{sales-channel-create-E7BDTPWD.mjs → sales-channel-create-4XLJDVJO.mjs} +2 -2
  171. package/dist/{sales-channel-detail-DV6BKC5B.mjs → sales-channel-detail-NQSBPPIE.mjs} +6 -6
  172. package/dist/{sales-channel-edit-HMPA3Y3L.mjs → sales-channel-edit-UZGSXD5X.mjs} +2 -2
  173. package/dist/{sales-channel-list-33QC2ZXP.mjs → sales-channel-list-UYN2OCBR.mjs} +3 -3
  174. package/dist/{sales-channel-metadata-HYYQEVRZ.mjs → sales-channel-metadata-4XWXYN2E.mjs} +6 -6
  175. package/dist/{shipping-option-type-create-IXYDKBKG.mjs → shipping-option-type-create-U7PIKVMV.mjs} +5 -5
  176. package/dist/{shipping-option-type-detail-WMZ3DEY6.mjs → shipping-option-type-detail-QNZLQGI6.mjs} +4 -4
  177. package/dist/{shipping-option-type-edit-YYO3Q2QV.mjs → shipping-option-type-edit-BP6HLZ7B.mjs} +5 -5
  178. package/dist/{shipping-option-type-list-YAL6IQF2.mjs → shipping-option-type-list-L274RM6A.mjs} +4 -4
  179. package/dist/{shipping-profile-create-752TMBBE.mjs → shipping-profile-create-26R64I3Z.mjs} +2 -2
  180. package/dist/{shipping-profile-metadata-YBXPOVZF.mjs → shipping-profile-metadata-BZKPLXHO.mjs} +6 -6
  181. package/dist/{store-add-currencies-3VMLZ6KB.mjs → store-add-currencies-ZFS3WZHG.mjs} +2 -2
  182. package/dist/{store-add-locales-AYY44DB3.mjs → store-add-locales-EXR3NLOM.mjs} +4 -4
  183. package/dist/{store-detail-4YVABC3P.mjs → store-detail-T4YY5NHG.mjs} +3 -3
  184. package/dist/{store-edit-EPAHLLKP.mjs → store-edit-AB5CDUTK.mjs} +2 -2
  185. package/dist/{store-metadata-QQD2NP5U.mjs → store-metadata-FN3WZLXA.mjs} +6 -6
  186. package/dist/{tax-region-create-AFGAIC3C.mjs → tax-region-create-PWXTFE3Q.mjs} +5 -5
  187. package/dist/{tax-region-detail-LM7VIA2N.mjs → tax-region-detail-GJW63AMV.mjs} +22 -22
  188. package/dist/{tax-region-edit-ZLSY22NQ.mjs → tax-region-edit-WOUO7TPQ.mjs} +5 -5
  189. package/dist/{tax-region-list-BXZBUXRJ.mjs → tax-region-list-P4LDOPZD.mjs} +3 -3
  190. package/dist/{tax-region-province-create-5JP3PVID.mjs → tax-region-province-create-GKJ7WMRS.mjs} +2 -2
  191. package/dist/{tax-region-province-detail-ZF75A3Z2.mjs → tax-region-province-detail-FCHPIRXW.mjs} +21 -21
  192. package/dist/{tax-region-tax-override-create-JVMTMMWB.mjs → tax-region-tax-override-create-ZLWXRNLN.mjs} +16 -16
  193. package/dist/{tax-region-tax-override-edit-HS4BCVC7.mjs → tax-region-tax-override-edit-ZM2JUFNJ.mjs} +17 -17
  194. package/dist/{tax-region-tax-rate-create-O2SDSXCH.mjs → tax-region-tax-rate-create-MECFGVPL.mjs} +2 -2
  195. package/dist/{tax-region-tax-rate-edit-W62VEVKT.mjs → tax-region-tax-rate-edit-7DYSPYOD.mjs} +2 -2
  196. package/dist/translation-list-Y2GWTRGW.mjs +302 -0
  197. package/dist/translations-edit-PM4PSMRF.mjs +390 -0
  198. package/dist/{user-edit-LXQCTDGA.mjs → user-edit-ZBB4RMTP.mjs} +2 -2
  199. package/dist/{user-invite-2OKB7SCF.mjs → user-invite-XB635N26.mjs} +2 -2
  200. package/dist/{user-metadata-U3WGLABX.mjs → user-metadata-LNADHFTW.mjs} +6 -6
  201. package/dist/{workflow-execution-detail-L4IESFKA.mjs → workflow-execution-detail-POTSURJX.mjs} +4 -4
  202. package/package.json +9 -9
  203. package/src/components/common/icon-avatar/icon-avatar.tsx +4 -0
  204. package/src/components/data-grid/components/data-grid-textarea-modal-cell.tsx +233 -0
  205. package/src/components/data-grid/components/index.ts +1 -0
  206. package/src/components/data-grid/data-grid.tsx +2 -0
  207. package/src/components/layout/settings-layout/settings-layout.tsx +11 -1
  208. package/src/components/modals/route-focus-modal/route-focus-modal.tsx +8 -3
  209. package/src/components/modals/route-modal-form/route-modal-form.tsx +6 -1
  210. package/src/components/modals/route-modal-provider/route-provider.tsx +16 -4
  211. package/src/dashboard-app/routes/get-route.map.tsx +25 -0
  212. package/src/hooks/api/index.ts +1 -0
  213. package/src/hooks/api/orders.tsx +18 -1
  214. package/src/hooks/api/product-variants.tsx +7 -1
  215. package/src/hooks/api/translations.tsx +254 -0
  216. package/src/i18n/translations/$schema.json +104 -0
  217. package/src/i18n/translations/en.json +34 -0
  218. package/src/i18n/translations/es.json +22 -0
  219. package/src/routes/categories/category-detail/components/category-general-section/category-general-section.tsx +16 -1
  220. package/src/routes/categories/category-list/components/category-list-table/category-list-table.tsx +16 -1
  221. package/src/routes/collections/collection-detail/components/collection-general-section/collection-general-section.tsx +16 -1
  222. package/src/routes/collections/collection-list/components/collection-list-table/collection-row-actions.tsx +16 -1
  223. package/src/routes/orders/order-export/components/export-filters.tsx +22 -0
  224. package/src/routes/orders/order-export/index.ts +1 -0
  225. package/src/routes/orders/order-export/order-export.tsx +66 -0
  226. package/src/routes/orders/order-list/components/order-list-table/configurable-order-list-table.tsx +14 -6
  227. package/src/routes/orders/order-list/components/order-list-table/order-list-table.tsx +8 -2
  228. package/src/routes/product-tags/product-tag-detail/components/product-tag-general-section/product-tag-general-section.tsx +16 -1
  229. package/src/routes/product-tags/product-tag-list/components/product-tag-list-table/product-tag-list-table.tsx +16 -1
  230. package/src/routes/product-types/product-type-detail/components/product-type-general-section/product-type-general-section.tsx +16 -1
  231. package/src/routes/product-types/product-type-list/components/product-type-list-table/product-table-row-actions.tsx +16 -1
  232. package/src/routes/product-variants/product-variant-detail/components/variant-general-section/variant-general-section.tsx +16 -1
  233. package/src/routes/products/product-detail/components/product-general-section/product-general-section.tsx +16 -1
  234. package/src/routes/products/product-detail/components/product-variant-section/product-variant-section.tsx +32 -1
  235. package/src/routes/products/product-list/components/product-list-table/product-list-table.tsx +15 -1
  236. package/src/routes/translations/translation-list/components/active-locales-section/active-locales-section.tsx +68 -0
  237. package/src/routes/translations/translation-list/components/translation-list-section/translation-list-section.tsx +46 -0
  238. package/src/routes/translations/translation-list/components/translations-completion-section/translations-completion-section.tsx +67 -0
  239. package/src/routes/translations/translation-list/index.tsx +1 -0
  240. package/src/routes/translations/translation-list/translation-list.tsx +128 -0
  241. package/src/routes/translations/translations-edit/components/translations-edit-form/index.ts +1 -0
  242. package/src/routes/translations/translations-edit/components/translations-edit-form/translations-edit-form.tsx +423 -0
  243. package/src/routes/translations/translations-edit/index.ts +1 -0
  244. package/src/routes/translations/translations-edit/translations-edit.tsx +67 -0
  245. package/src/routes/translations/translations-edit/utils/index.ts +1 -0
  246. package/src/routes/translations/translations-edit/utils/reference-label-map.ts +10 -0
  247. package/dist/{customer-list-ZXCGIXJC.mjs → customer-list-TG4D4QOT.mjs} +3 -3
  248. package/dist/{region-list-XQRIBDMF.mjs → region-list-JAQXIBYD.mjs} +3 -3
@@ -0,0 +1,66 @@
1
+ import { Button, Heading, toast } from "@medusajs/ui"
2
+ import { useTranslation } from "react-i18next"
3
+ import { RouteDrawer, useRouteModal } from "../../../components/modals"
4
+ import { useExportOrders } from "../../../hooks/api"
5
+ import { useOrderTableQuery } from "../../../hooks/table/query"
6
+ import { ExportFilters } from "./components/export-filters"
7
+
8
+ export const OrderExport = () => {
9
+ const { t } = useTranslation()
10
+
11
+ return (
12
+ <RouteDrawer>
13
+ <RouteDrawer.Header>
14
+ <RouteDrawer.Title asChild>
15
+ <Heading>{t("orders.export.header")}</Heading>
16
+ </RouteDrawer.Title>
17
+ <RouteDrawer.Description className="sr-only">
18
+ {t("orders.export.description")}
19
+ </RouteDrawer.Description>
20
+ </RouteDrawer.Header>
21
+ <OrderExportContent />
22
+ </RouteDrawer>
23
+ )
24
+ }
25
+
26
+ const OrderExportContent = () => {
27
+ const { t } = useTranslation()
28
+ const { searchParams } = useOrderTableQuery({})
29
+
30
+ const { mutateAsync } = useExportOrders(searchParams)
31
+ const { handleSuccess } = useRouteModal()
32
+
33
+ const handleExportRequest = async () => {
34
+ await mutateAsync(searchParams, {
35
+ onSuccess: () => {
36
+ toast.info(t("orders.export.success.title"), {
37
+ description: t("orders.export.success.description"),
38
+ })
39
+ handleSuccess()
40
+ },
41
+ onError: (err) => {
42
+ toast.error(err.message)
43
+ },
44
+ })
45
+ }
46
+
47
+ return (
48
+ <>
49
+ <RouteDrawer.Body>
50
+ <ExportFilters />
51
+ </RouteDrawer.Body>
52
+ <RouteDrawer.Footer>
53
+ <div className="flex items-center gap-x-2">
54
+ <RouteDrawer.Close asChild>
55
+ <Button size="small" variant="secondary">
56
+ {t("actions.cancel")}
57
+ </Button>
58
+ </RouteDrawer.Close>
59
+ <Button onClick={handleExportRequest} size="small">
60
+ {t("actions.export")}
61
+ </Button>
62
+ </div>
63
+ </RouteDrawer.Footer>
64
+ </>
65
+ )
66
+ }
@@ -1,16 +1,24 @@
1
1
  import { useTranslation } from "react-i18next"
2
+ import { Outlet, useLocation } from "react-router-dom"
3
+
2
4
  import { ConfigurableDataTable } from "../../../../../components/table/configurable-data-table"
3
5
  import { useOrderTableAdapter } from "./order-table-adapter"
4
6
 
5
7
  export const ConfigurableOrderListTable = () => {
6
8
  const { t } = useTranslation()
7
- const orderAdapter = useOrderTableAdapter()
9
+ const location = useLocation()
10
+ const adapter = useOrderTableAdapter()
8
11
 
9
12
  return (
10
- <ConfigurableDataTable
11
- adapter={orderAdapter}
12
- heading={t("orders.domain")}
13
- layout="fill"
14
- />
13
+ <>
14
+ <ConfigurableDataTable
15
+ adapter={adapter}
16
+ heading={t("orders.domain")}
17
+ actions={[
18
+ { label: t("actions.export"), to: `export${location.search}` },
19
+ ]}
20
+ />
21
+ <Outlet />
22
+ </>
15
23
  )
16
24
  }
@@ -1,15 +1,16 @@
1
- import { Container, Heading } from "@medusajs/ui"
1
+ import { Button, Container, Heading } from "@medusajs/ui"
2
2
  import { keepPreviousData } from "@tanstack/react-query"
3
3
  import { useTranslation } from "react-i18next"
4
+ import { Link, Outlet, useLocation } from "react-router-dom"
4
5
 
5
6
  import { _DataTable } from "../../../../../components/table/data-table/data-table"
6
7
  import { useOrders } from "../../../../../hooks/api/orders"
7
8
  import { useOrderTableColumns } from "../../../../../hooks/table/columns/use-order-table-columns"
8
- import { useOrderTableFilters } from "./use-order-table-filters"
9
9
  import { useOrderTableQuery } from "../../../../../hooks/table/query/use-order-table-query"
10
10
  import { useDataTable } from "../../../../../hooks/use-data-table"
11
11
  import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
12
12
  import { ConfigurableOrderListTable } from "./configurable-order-list-table"
13
+ import { useOrderTableFilters } from "./use-order-table-filters"
13
14
 
14
15
  import { DEFAULT_FIELDS } from "../../const"
15
16
 
@@ -17,6 +18,7 @@ const PAGE_SIZE = 20
17
18
 
18
19
  export const OrderListTable = () => {
19
20
  const { t } = useTranslation()
21
+ const location = useLocation()
20
22
  const isViewConfigEnabled = useFeatureFlag("view_configurations")
21
23
 
22
24
  // If feature flag is enabled, use the new configurable table
@@ -57,6 +59,9 @@ export const OrderListTable = () => {
57
59
  <Container className="divide-y p-0">
58
60
  <div className="flex items-center justify-between px-6 py-4">
59
61
  <Heading>{t("orders.domain")}</Heading>
62
+ <Button size="small" variant="secondary" asChild>
63
+ <Link to={`export${location.search}`}>{t("actions.export")}</Link>
64
+ </Button>
60
65
  </div>
61
66
  <_DataTable
62
67
  columns={columns}
@@ -78,6 +83,7 @@ export const OrderListTable = () => {
78
83
  message: t("orders.list.noRecordsMessage"),
79
84
  }}
80
85
  />
86
+ <Outlet />
81
87
  </Container>
82
88
  )
83
89
  }
@@ -1,9 +1,10 @@
1
- import { PencilSquare, Trash } from "@medusajs/icons"
1
+ import { GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { HttpTypes } from "@medusajs/types"
3
3
  import { Container, Heading } from "@medusajs/ui"
4
4
  import { useTranslation } from "react-i18next"
5
5
  import { ActionMenu } from "../../../../../components/common/action-menu"
6
6
  import { useDeleteProductTagAction } from "../../../common/hooks/use-delete-product-tag-action"
7
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
7
8
 
8
9
  type ProductTagGeneralSectionProps = {
9
10
  productTag: HttpTypes.AdminProductTag
@@ -14,6 +15,7 @@ export const ProductTagGeneralSection = ({
14
15
  }: ProductTagGeneralSectionProps) => {
15
16
  const { t } = useTranslation()
16
17
  const handleDelete = useDeleteProductTagAction({ productTag })
18
+ const isTranslationsEnabled = useFeatureFlag("translation")
17
19
 
18
20
  return (
19
21
  <Container className="flex items-center justify-between">
@@ -32,6 +34,19 @@ export const ProductTagGeneralSection = ({
32
34
  },
33
35
  ],
34
36
  },
37
+ ...(isTranslationsEnabled
38
+ ? [
39
+ {
40
+ actions: [
41
+ {
42
+ label: t("translations.actions.manage"),
43
+ to: `/settings/translations/edit?reference=product_tag&reference_id=${productTag.id}`,
44
+ icon: <GlobeEurope />,
45
+ },
46
+ ],
47
+ },
48
+ ]
49
+ : []),
35
50
  {
36
51
  actions: [
37
52
  {
@@ -1,4 +1,4 @@
1
- import { PencilSquare, Trash } from "@medusajs/icons"
1
+ import { GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { HttpTypes } from "@medusajs/types"
3
3
  import { Button, Container, Heading } from "@medusajs/ui"
4
4
  import { keepPreviousData } from "@tanstack/react-query"
@@ -16,6 +16,7 @@ import { useProductTagTableQuery } from "../../../../../hooks/table/query"
16
16
  import { useDataTable } from "../../../../../hooks/use-data-table"
17
17
  import { useDeleteProductTagAction } from "../../../common/hooks/use-delete-product-tag-action"
18
18
  import { productTagListLoader } from "../../loader"
19
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
19
20
 
20
21
  const PAGE_SIZE = 20
21
22
 
@@ -88,6 +89,7 @@ const ProductTagRowActions = ({
88
89
  }) => {
89
90
  const { t } = useTranslation()
90
91
  const handleDelete = useDeleteProductTagAction({ productTag })
92
+ const isTranslationsEnabled = useFeatureFlag("translation")
91
93
 
92
94
  return (
93
95
  <ActionMenu
@@ -101,6 +103,19 @@ const ProductTagRowActions = ({
101
103
  },
102
104
  ],
103
105
  },
106
+ ...(isTranslationsEnabled
107
+ ? [
108
+ {
109
+ actions: [
110
+ {
111
+ icon: <GlobeEurope />,
112
+ label: t("translations.actions.manage"),
113
+ to: `/settings/translations/edit?reference=product_tag&reference_id=${productTag.id}`,
114
+ },
115
+ ],
116
+ },
117
+ ]
118
+ : []),
104
119
  {
105
120
  actions: [
106
121
  {
@@ -1,9 +1,10 @@
1
- import { PencilSquare, Trash } from "@medusajs/icons"
1
+ import { GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { HttpTypes } from "@medusajs/types"
3
3
  import { Container, Heading } from "@medusajs/ui"
4
4
  import { useTranslation } from "react-i18next"
5
5
  import { ActionMenu } from "../../../../../components/common/action-menu"
6
6
  import { useDeleteProductTypeAction } from "../../../common/hooks/use-delete-product-type-action"
7
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
7
8
 
8
9
  type ProductTypeGeneralSectionProps = {
9
10
  productType: HttpTypes.AdminProductType
@@ -17,6 +18,7 @@ export const ProductTypeGeneralSection = ({
17
18
  productType.id,
18
19
  productType.value
19
20
  )
21
+ const isTranslationsEnabled = useFeatureFlag("translation")
20
22
 
21
23
  return (
22
24
  <Container className="flex items-center justify-between">
@@ -32,6 +34,19 @@ export const ProductTypeGeneralSection = ({
32
34
  },
33
35
  ],
34
36
  },
37
+ ...(isTranslationsEnabled
38
+ ? [
39
+ {
40
+ actions: [
41
+ {
42
+ label: t("translations.actions.manage"),
43
+ to: `/settings/translations/edit?reference=product_type&reference_id=${productType.id}`,
44
+ icon: <GlobeEurope />,
45
+ },
46
+ ],
47
+ },
48
+ ]
49
+ : []),
35
50
  {
36
51
  actions: [
37
52
  {
@@ -1,8 +1,9 @@
1
- import { PencilSquare, Trash } from "@medusajs/icons"
1
+ import { GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { HttpTypes } from "@medusajs/types"
3
3
  import { useTranslation } from "react-i18next"
4
4
  import { ActionMenu } from "../../../../../components/common/action-menu"
5
5
  import { useDeleteProductTypeAction } from "../../../common/hooks/use-delete-product-type-action"
6
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
6
7
 
7
8
  type ProductTypeRowActionsProps = {
8
9
  productType: HttpTypes.AdminProductType
@@ -16,6 +17,7 @@ export const ProductTypeRowActions = ({
16
17
  productType.id,
17
18
  productType.value
18
19
  )
20
+ const isTranslationsEnabled = useFeatureFlag("translation")
19
21
 
20
22
  return (
21
23
  <ActionMenu
@@ -29,6 +31,19 @@ export const ProductTypeRowActions = ({
29
31
  },
30
32
  ],
31
33
  },
34
+ ...(isTranslationsEnabled
35
+ ? [
36
+ {
37
+ actions: [
38
+ {
39
+ icon: <GlobeEurope />,
40
+ label: t("translations.actions.manage"),
41
+ to: `/settings/translations/edit?reference=product_type&reference_id=${productType.id}`,
42
+ },
43
+ ],
44
+ },
45
+ ]
46
+ : []),
32
47
  {
33
48
  actions: [
34
49
  {
@@ -1,4 +1,4 @@
1
- import { Component, PencilSquare, Trash } from "@medusajs/icons"
1
+ import { Component, GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { HttpTypes } from "@medusajs/types"
3
3
  import { Badge, Container, Heading, usePrompt } from "@medusajs/ui"
4
4
  import { useTranslation } from "react-i18next"
@@ -7,6 +7,7 @@ import { useNavigate } from "react-router-dom"
7
7
  import { ActionMenu } from "../../../../../components/common/action-menu"
8
8
  import { SectionRow } from "../../../../../components/common/section"
9
9
  import { useDeleteVariant } from "../../../../../hooks/api/products"
10
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
10
11
 
11
12
  type VariantGeneralSectionProps = {
12
13
  variant: HttpTypes.AdminProductVariant
@@ -16,6 +17,7 @@ export function VariantGeneralSection({ variant }: VariantGeneralSectionProps) {
16
17
  const { t } = useTranslation()
17
18
  const prompt = usePrompt()
18
19
  const navigate = useNavigate()
20
+ const isTranslationsEnabled = useFeatureFlag("translation")
19
21
 
20
22
  const hasInventoryKit = variant.inventory?.length > 1
21
23
 
@@ -70,6 +72,19 @@ export function VariantGeneralSection({ variant }: VariantGeneralSectionProps) {
70
72
  },
71
73
  ],
72
74
  },
75
+ ...(isTranslationsEnabled
76
+ ? [
77
+ {
78
+ actions: [
79
+ {
80
+ label: t("translations.actions.manage"),
81
+ to: `/settings/translations/edit?reference=product_variant&reference_id=${variant.id}`,
82
+ icon: <GlobeEurope />,
83
+ },
84
+ ],
85
+ },
86
+ ]
87
+ : []),
73
88
  {
74
89
  actions: [
75
90
  {
@@ -1,4 +1,4 @@
1
- import { PencilSquare, Trash } from "@medusajs/icons"
1
+ import { GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { HttpTypes } from "@medusajs/types"
3
3
  import { Container, Heading, StatusBadge, toast, usePrompt } from "@medusajs/ui"
4
4
  import { useTranslation } from "react-i18next"
@@ -8,6 +8,7 @@ import { ActionMenu } from "../../../../../components/common/action-menu"
8
8
  import { SectionRow } from "../../../../../components/common/section"
9
9
  import { useDeleteProduct } from "../../../../../hooks/api/products"
10
10
  import { useExtension } from "../../../../../providers/extension-provider"
11
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
11
12
 
12
13
  const productStatusColor = (status: string) => {
13
14
  switch (status) {
@@ -35,6 +36,7 @@ export const ProductGeneralSection = ({
35
36
  const prompt = usePrompt()
36
37
  const navigate = useNavigate()
37
38
  const { getDisplays } = useExtension()
39
+ const isTranslationsEnabled = useFeatureFlag("translation")
38
40
 
39
41
  const displays = getDisplays("product", "general")
40
42
 
@@ -85,6 +87,19 @@ export const ProductGeneralSection = ({
85
87
  },
86
88
  ],
87
89
  },
90
+ ...(isTranslationsEnabled
91
+ ? [
92
+ {
93
+ actions: [
94
+ {
95
+ label: t("translations.actions.manage"),
96
+ to: `/settings/translations/edit?reference=product&reference_id=${product.id}`,
97
+ icon: <GlobeEurope />,
98
+ },
99
+ ],
100
+ },
101
+ ]
102
+ : []),
88
103
  {
89
104
  actions: [
90
105
  {
@@ -1,4 +1,10 @@
1
- import { Buildings, Component, PencilSquare, Trash } from "@medusajs/icons"
1
+ import {
2
+ Buildings,
3
+ Component,
4
+ GlobeEurope,
5
+ PencilSquare,
6
+ Trash,
7
+ } from "@medusajs/icons"
2
8
  import { HttpTypes } from "@medusajs/types"
3
9
  import {
4
10
  Badge,
@@ -26,6 +32,7 @@ import {
26
32
  import { useQueryParams } from "../../../../../hooks/use-query-params"
27
33
  import { PRODUCT_VARIANT_IDS_KEY } from "../../../common/constants"
28
34
  import { Thumbnail } from "../../../../../components/common/thumbnail"
35
+ import { useFeatureFlag } from "../../../../../providers/feature-flag-provider"
29
36
 
30
37
  type ProductVariantSectionProps = {
31
38
  product: HttpTypes.AdminProduct
@@ -38,6 +45,7 @@ export const ProductVariantSection = ({
38
45
  product,
39
46
  }: ProductVariantSectionProps) => {
40
47
  const { t } = useTranslation()
48
+ const isTranslationsEnabled = useFeatureFlag("translation")
41
49
 
42
50
  const { q, order, offset, allow_backorder, manage_inventory } =
43
51
  useQueryParams(
@@ -70,6 +78,11 @@ export const ProductVariantSection = ({
70
78
  }
71
79
  )
72
80
 
81
+ const translationParams = new URLSearchParams()
82
+ variants?.forEach((variant) => {
83
+ translationParams.append("reference_id", variant.id)
84
+ })
85
+
73
86
  if (isError) {
74
87
  throw error
75
88
  }
@@ -115,6 +128,15 @@ export const ProductVariantSection = ({
115
128
  to: `stock`,
116
129
  icon: <Buildings />,
117
130
  },
131
+ ...(isTranslationsEnabled
132
+ ? [
133
+ {
134
+ icon: <GlobeEurope />,
135
+ label: t("translations.actions.manage"),
136
+ to: `/settings/translations/edit?reference=product_variant&${translationParams.toString()}`,
137
+ },
138
+ ]
139
+ : []),
118
140
  ],
119
141
  },
120
142
  ],
@@ -225,6 +247,15 @@ const useColumns = (product: HttpTypes.AdminProduct) => {
225
247
  )
226
248
  },
227
249
  },
250
+ {
251
+ icon: <GlobeEurope />,
252
+ label: t("translations.actions.manage"),
253
+ onClick: () => {
254
+ navigate(
255
+ `/settings/translations/edit?reference=product_variant&reference_id=${variant.id}`
256
+ )
257
+ },
258
+ },
228
259
  ]
229
260
 
230
261
  const secondaryActions: DataTableAction<HttpTypes.AdminProductVariant>[] =
@@ -1,4 +1,4 @@
1
- import { PencilSquare, Trash } from "@medusajs/icons"
1
+ import { GlobeEurope, PencilSquare, Trash } from "@medusajs/icons"
2
2
  import { Button, Container, Heading, toast, usePrompt } from "@medusajs/ui"
3
3
  import { keepPreviousData } from "@tanstack/react-query"
4
4
  import { createColumnHelper } from "@tanstack/react-table"
@@ -110,6 +110,7 @@ const ProductActions = ({ product }: { product: HttpTypes.AdminProduct }) => {
110
110
  const { t } = useTranslation()
111
111
  const prompt = usePrompt()
112
112
  const { mutateAsync } = useDeleteProduct(product.id)
113
+ const isTranslationsEnabled = useFeatureFlag("translation")
113
114
 
114
115
  const handleDelete = async () => {
115
116
  const res = await prompt({
@@ -153,6 +154,19 @@ const ProductActions = ({ product }: { product: HttpTypes.AdminProduct }) => {
153
154
  },
154
155
  ],
155
156
  },
157
+ ...(isTranslationsEnabled
158
+ ? [
159
+ {
160
+ actions: [
161
+ {
162
+ icon: <GlobeEurope />,
163
+ label: t("translations.actions.manage"),
164
+ to: `/settings/translations/edit?reference=product&reference_id=${product.id}`,
165
+ },
166
+ ],
167
+ },
168
+ ]
169
+ : []),
156
170
  {
157
171
  actions: [
158
172
  {
@@ -0,0 +1,68 @@
1
+ import { PencilSquare, Text as TextIcon } from "@medusajs/icons"
2
+ import { Container, Heading, IconButton, InlineTip, Text } from "@medusajs/ui"
3
+ import { useTranslation } from "react-i18next"
4
+ import { IconAvatar } from "../../../../../components/common/icon-avatar"
5
+ import { HttpTypes } from "@medusajs/types"
6
+ import { useCallback } from "react"
7
+ import { useNavigate } from "react-router-dom"
8
+
9
+ type ActiveLocalesSectionProps = {
10
+ locales: HttpTypes.AdminLocale[]
11
+ }
12
+
13
+ export const ActiveLocalesSection = ({
14
+ locales,
15
+ }: ActiveLocalesSectionProps) => {
16
+ const { t } = useTranslation()
17
+ const navigate = useNavigate()
18
+
19
+ const handleManageLocales = useCallback(() => {
20
+ navigate("/settings/store/locales")
21
+ }, [navigate])
22
+
23
+ const renderLocales = useCallback(() => {
24
+ const maxLocalesToDetail = 2
25
+ if (locales.length <= maxLocalesToDetail) {
26
+ return locales.map((locale) => locale.name).join(", ")
27
+ }
28
+
29
+ return `${locales
30
+ .slice(0, maxLocalesToDetail)
31
+ .map((locale) => locale.name)
32
+ .join(", ")} + ${locales.length - maxLocalesToDetail}`
33
+ }, [locales])
34
+
35
+ const hasLocales = locales.length > 0
36
+
37
+ return (
38
+ <Container className="flex flex-col p-0">
39
+ <div className="flex items-center justify-between px-6 py-4">
40
+ <Heading>{t("translations.activeLocales.heading")}</Heading>
41
+ <IconButton variant="transparent" onClick={handleManageLocales}>
42
+ <PencilSquare></PencilSquare>
43
+ </IconButton>
44
+ </div>
45
+ <div className="px-1 pb-1">
46
+ {hasLocales ? (
47
+ <Container className="bg-ui-bg-component flex items-center gap-x-4 px-6 py-2">
48
+ <IconAvatar>
49
+ <TextIcon />
50
+ </IconAvatar>
51
+ <div className="flex flex-col">
52
+ <Text size="small" weight="plus">
53
+ {t("translations.activeLocales.subtitle")}
54
+ </Text>
55
+ <Text className="text-ui-fg-subtle" size="small">
56
+ {renderLocales()}
57
+ </Text>
58
+ </div>
59
+ </Container>
60
+ ) : (
61
+ <InlineTip label="Tip">
62
+ {t("translations.activeLocales.noLocalesTip")}
63
+ </InlineTip>
64
+ )}
65
+ </div>
66
+ </Container>
67
+ )
68
+ }
@@ -0,0 +1,46 @@
1
+ import { Button, Container, Text } from "@medusajs/ui"
2
+ import { Link } from "react-router-dom"
3
+
4
+ type TranslatableEntity = {
5
+ icon: React.ReactNode
6
+ label: string
7
+ reference: string
8
+ translatedCount?: number
9
+ totalCount?: number
10
+ }
11
+
12
+ type TranslationListSectionProps = {
13
+ entities: TranslatableEntity[]
14
+ hasLocales: boolean
15
+ }
16
+
17
+ export const TranslationListSection = ({
18
+ entities,
19
+ hasLocales = false,
20
+ }: TranslationListSectionProps) => {
21
+ return (
22
+ <Container className="divide-y p-0">
23
+ {entities.map((entity) => (
24
+ <div
25
+ key={entity.reference}
26
+ className="grid grid-cols-[250px_1fr_auto] items-center gap-x-4 px-6 py-4"
27
+ >
28
+ <Text size="small" weight="plus">
29
+ {entity.label}
30
+ </Text>
31
+ <Text size="small" className="text-ui-fg-subtle">
32
+ {(entity.translatedCount ?? 0).toLocaleString()} of{" "}
33
+ {(entity.totalCount ?? 0).toLocaleString()} fields translated
34
+ </Text>
35
+ <Link
36
+ to={`/settings/translations/edit?reference=${entity.reference}`}
37
+ >
38
+ <Button variant="secondary" size="small" disabled={!hasLocales}>
39
+ Edit
40
+ </Button>
41
+ </Link>
42
+ </div>
43
+ ))}
44
+ </Container>
45
+ )
46
+ }
@@ -0,0 +1,67 @@
1
+ import { Container, Heading, Text } from "@medusajs/ui"
2
+ import { useTranslation } from "react-i18next"
3
+
4
+ type TranslationsCompletionSectionProps = {
5
+ translatedCount?: number
6
+ totalCount?: number
7
+ }
8
+
9
+ export const TranslationsCompletionSection = ({
10
+ translatedCount = 0,
11
+ totalCount = 0,
12
+ }: TranslationsCompletionSectionProps) => {
13
+ const { t } = useTranslation()
14
+
15
+ const percentage = totalCount > 0 ? (translatedCount / totalCount) * 100 : 0
16
+ const remaining = Math.max(0, totalCount - translatedCount)
17
+
18
+ return (
19
+ <Container className="flex flex-col gap-y-3 px-6 py-4">
20
+ <div className="flex items-center justify-between">
21
+ <Heading>{t("translations.completion.heading")}</Heading>
22
+ <Text size="small" className="text-ui-fg-subtle">
23
+ {translatedCount.toLocaleString()} {t("general.of")}{" "}
24
+ {totalCount.toLocaleString()}
25
+ </Text>
26
+ </div>
27
+
28
+ <div className="flex h-2 w-full overflow-hidden rounded-full">
29
+ {percentage > 0 ? (
30
+ <>
31
+ <div
32
+ className="mr-0.5 h-full rounded-l-full transition-all"
33
+ style={{
34
+ width: `${percentage}%`,
35
+ backgroundColor: "var(--bg-interactive)",
36
+ }}
37
+ />
38
+ <div
39
+ className="h-full flex-1 rounded-r-full"
40
+ style={{
41
+ backgroundColor: "var(--bg-interactive)",
42
+ opacity: 0.3,
43
+ }}
44
+ />
45
+ </>
46
+ ) : (
47
+ <div
48
+ className="h-full w-full rounded-full"
49
+ style={{
50
+ backgroundColor: "var(--bg-interactive)",
51
+ opacity: 0.3,
52
+ }}
53
+ />
54
+ )}
55
+ </div>
56
+
57
+ <div className="flex items-center justify-between">
58
+ <Text size="small" className="text-ui-fg-subtle">
59
+ {percentage.toFixed(1)}%
60
+ </Text>
61
+ <Text size="small" className="text-ui-fg-subtle">
62
+ {remaining.toLocaleString()} {t("general.remaining").toLowerCase()}
63
+ </Text>
64
+ </div>
65
+ </Container>
66
+ )
67
+ }
@@ -0,0 +1 @@
1
+ export { TranslationList as Component } from "./translation-list"