@medusajs/dashboard 3.0.0-snapshot-20251208164410 → 3.0.0-snapshot-20251211180009

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 (380) hide show
  1. package/dist/{add-campaign-promotions-I7HDYMBX.mjs → add-campaign-promotions-PHAHMGXP.mjs} +2 -1
  2. package/dist/{adjust-inventory-ZB3AVET7.mjs → adjust-inventory-I5VYMAI4.mjs} +5 -3
  3. package/dist/{api-key-management-create-U6VGZK7R.mjs → api-key-management-create-CVRFY4PL.mjs} +5 -4
  4. package/dist/{api-key-management-detail-OEAWWV5O.mjs → api-key-management-detail-G7O7TDPW.mjs} +12 -12
  5. package/dist/{api-key-management-edit-TJM737A7.mjs → api-key-management-edit-JMU3WEPX.mjs} +7 -5
  6. package/dist/{api-key-management-list-ZRYMMTF5.mjs → api-key-management-list-RGLZMUCB.mjs} +3 -3
  7. package/dist/{api-key-management-sales-channels-D2RAHI7W.mjs → api-key-management-sales-channels-4OU5VGIG.mjs} +8 -7
  8. package/dist/app.css +41 -3
  9. package/dist/app.js +18101 -17658
  10. package/dist/app.mjs +11 -11
  11. package/dist/{campaign-budget-edit-H2KQKD7B.mjs → campaign-budget-edit-B5MSE26J.mjs} +4 -2
  12. package/dist/{campaign-configuration-A452A22M.mjs → campaign-configuration-QOE3D2BE.mjs} +4 -2
  13. package/dist/{campaign-create-IXOWJQ4L.mjs → campaign-create-FJOECKGT.mjs} +5 -4
  14. package/dist/{campaign-detail-TFQCDDIN.mjs → campaign-detail-I2N5WUEC.mjs} +9 -9
  15. package/dist/{campaign-edit-LZV56AYF.mjs → campaign-edit-K2POQH7M.mjs} +4 -2
  16. package/dist/{categories-metadata-7JFVYYUN.mjs → categories-metadata-DNVBNWAJ.mjs} +12 -11
  17. package/dist/{category-create-BTMZYQ5R.mjs → category-create-L2KJCHPO.mjs} +7 -6
  18. package/dist/{category-detail-UUEMLEVJ.mjs → category-detail-XEFMQSZG.mjs} +32 -16
  19. package/dist/{category-edit-Q3KEELHO.mjs → category-edit-U6SLZSAX.mjs} +6 -4
  20. package/dist/{category-list-Z6HS6N75.mjs → category-list-W7JW4PWA.mjs} +21 -6
  21. package/dist/{category-organize-45NPSRNG.mjs → category-organize-LLSVAO3U.mjs} +4 -3
  22. package/dist/{category-products-KW6X3JDW.mjs → category-products-LF7P7MBF.mjs} +15 -14
  23. package/dist/{chunk-O5DGX2NZ.mjs → chunk-34KFHPN6.mjs} +1 -1
  24. package/dist/{chunk-PNPT4W2F.mjs → chunk-3BJLNORD.mjs} +1 -1
  25. package/dist/{chunk-NFEW5CVI.mjs → chunk-3C6WQ7NH.mjs} +3 -37
  26. package/dist/{chunk-NTYLG6Y3.mjs → chunk-3ESSTIV2.mjs} +200 -11
  27. package/dist/{chunk-RNYL6AXZ.mjs → chunk-4VNR7DND.mjs} +2 -2
  28. package/dist/chunk-4Y2NYEXF.mjs +0 -0
  29. package/dist/{chunk-67RC6SEX.mjs → chunk-5LGRZSEH.mjs} +1 -1
  30. package/dist/{chunk-Q6MSICBU.mjs → chunk-6GLZIACV.mjs} +1 -1
  31. package/dist/{chunk-5N33TBBX.mjs → chunk-7AX6R6G6.mjs} +1 -1
  32. package/dist/{chunk-35G7IXTE.mjs → chunk-7GJ5T4R3.mjs} +21 -18
  33. package/dist/{chunk-YGLRZQ4C.mjs → chunk-7R743WZ6.mjs} +18 -7
  34. package/dist/{chunk-EFRTOOI5.mjs → chunk-AFXODJBA.mjs} +1 -1
  35. package/dist/{chunk-FJHAGJ5G.mjs → chunk-AH4DORIW.mjs} +1 -1
  36. package/dist/{chunk-OMRGW7JS.mjs → chunk-BZKI5J2M.mjs} +4 -4
  37. package/dist/{chunk-UM4OIJZ3.mjs → chunk-CFQNWTZV.mjs} +1 -1
  38. package/dist/{chunk-AERWK3TJ.mjs → chunk-D6UW7URG.mjs} +67 -218
  39. package/dist/{chunk-D55WNQYO.mjs → chunk-DCYB22MH.mjs} +1 -1
  40. package/dist/{chunk-3RRA56WC.mjs → chunk-DODQ3KJT.mjs} +3 -8
  41. package/dist/{chunk-PMJJI6GO.mjs → chunk-DS5IRNJY.mjs} +2 -2
  42. package/dist/{chunk-MB7M5THW.mjs → chunk-EQBVGH3N.mjs} +1 -1
  43. package/dist/{chunk-EQTBJSBZ.mjs → chunk-F5I264Q3.mjs} +3 -0
  44. package/dist/{chunk-W7SLPIO2.mjs → chunk-FEB3ZGTL.mjs} +214 -17
  45. package/dist/{chunk-HRSO6H4F.mjs → chunk-FIFVOKTK.mjs} +3 -3
  46. package/dist/{chunk-4YAPXPLM.mjs → chunk-FPBKWWSI.mjs} +1 -1
  47. package/dist/{chunk-GHBURGZC.mjs → chunk-FQDPOKEK.mjs} +1 -1
  48. package/dist/{chunk-M32MJOJN.mjs → chunk-G4BWCU5P.mjs} +6 -3
  49. package/dist/{chunk-3ZJ55SFA.mjs → chunk-GN6OCHP4.mjs} +2 -2
  50. package/dist/{chunk-2QH2TBJ2.mjs → chunk-HPPR6PXK.mjs} +4 -4
  51. package/dist/{chunk-HWKLNKOY.mjs → chunk-I6C52ARQ.mjs} +1 -1
  52. package/dist/{chunk-S3MMZPMX.mjs → chunk-JJGE3EV6.mjs} +2 -2
  53. package/dist/chunk-JQBWAJQZ.mjs +0 -0
  54. package/dist/{chunk-TBEGSDLQ.mjs → chunk-KCWP7RF5.mjs} +1 -1
  55. package/dist/{chunk-T57MRRCF.mjs → chunk-LCEKY54O.mjs} +4 -2
  56. package/dist/{chunk-QW4SQVMT.mjs → chunk-LEJUZW3P.mjs} +53 -110
  57. package/dist/{chunk-FNQ227BC.mjs → chunk-N3FCYZV6.mjs} +1 -1
  58. package/dist/{chunk-6VRDTPH2.mjs → chunk-N3SAXQVR.mjs} +4 -2
  59. package/dist/{chunk-MOGV3UZD.mjs → chunk-N4O5FAUC.mjs} +1 -1
  60. package/dist/{chunk-7H6DB666.mjs → chunk-NHDFPGQ3.mjs} +1 -1
  61. package/dist/{chunk-SAZHCRHS.mjs → chunk-NT6C7CHT.mjs} +1 -1
  62. package/dist/{chunk-7DXVXBSA.mjs → chunk-NTEWUH4C.mjs} +1 -1
  63. package/dist/{chunk-5AM254NB.mjs → chunk-OFN7DIZA.mjs} +3 -83
  64. package/dist/{chunk-42TMWI76.mjs → chunk-OXPE5TAY.mjs} +1 -1
  65. package/dist/{chunk-HEYM67GY.mjs → chunk-PS5T2R6J.mjs} +5 -3
  66. package/dist/{chunk-PPRHEG37.mjs → chunk-R2EBIESZ.mjs} +2 -2
  67. package/dist/{chunk-PCFUZKDS.mjs → chunk-R65S6ZZV.mjs} +4 -1
  68. package/dist/{chunk-25UWYEJX.mjs → chunk-RKUXD6IZ.mjs} +1 -1
  69. package/dist/{chunk-NKGKWMUU.mjs → chunk-UEJOY5PF.mjs} +14 -15
  70. package/dist/{chunk-VSQK3AWP.mjs → chunk-VX2HE7O5.mjs} +20 -16
  71. package/dist/{chunk-3I6G3NRU.mjs → chunk-WG7UTTKY.mjs} +2 -2
  72. package/dist/chunk-WVA4O7QS.mjs +182 -0
  73. package/dist/{chunk-YGEJFHC3.mjs → chunk-XIVBRONM.mjs} +1 -1
  74. package/dist/chunk-XNIVMZHA.mjs +50 -0
  75. package/dist/{chunk-2WLOIS3L.mjs → chunk-Y5UO73CH.mjs} +18 -2
  76. package/dist/{chunk-P23S5LDK.mjs → chunk-YIOBBZUB.mjs} +6 -4
  77. package/dist/{chunk-AGBHQZZT.mjs → chunk-ZADXDNB3.mjs} +343 -356
  78. package/dist/{collection-add-products-YSTEEHMF.mjs → collection-add-products-EM7SAFEH.mjs} +16 -15
  79. package/dist/{collection-create-RIGJHEX5.mjs → collection-create-4JX4YE47.mjs} +4 -3
  80. package/dist/{collection-detail-P5JWWFHH.mjs → collection-detail-UQXMMKRW.mjs} +30 -15
  81. package/dist/{collection-edit-WX5G3FHR.mjs → collection-edit-MXL35GQQ.mjs} +6 -4
  82. package/dist/{collection-list-PU6SWYVL.mjs → collection-list-EO56ZH4Q.mjs} +39 -25
  83. package/dist/{collection-metadata-R55DUZSX.mjs → collection-metadata-UXEYXJY4.mjs} +13 -12
  84. package/dist/{customer-create-VL6SIRZ2.mjs → customer-create-IA56MXE6.mjs} +2 -1
  85. package/dist/{customer-create-address-V5C6M52P.mjs → customer-create-address-27M25HTO.mjs} +2 -1
  86. package/dist/{customer-detail-HVGU3DRM.mjs → customer-detail-OD5I5YWW.mjs} +16 -16
  87. package/dist/{customer-edit-WTBPVWOF.mjs → customer-edit-XQ5NWIVX.mjs} +4 -2
  88. package/dist/{customer-group-add-customers-2Y2GVCDV.mjs → customer-group-add-customers-FRJP6RCY.mjs} +5 -4
  89. package/dist/{customer-group-create-A3CB3Z4K.mjs → customer-group-create-RY4FVEIW.mjs} +2 -1
  90. package/dist/{customer-group-detail-QKFWIFYH.mjs → customer-group-detail-SOWUWFJ4.mjs} +12 -12
  91. package/dist/{customer-group-edit-7KV2PNLE.mjs → customer-group-edit-MQWARIQZ.mjs} +4 -2
  92. package/dist/{customer-group-list-WLG2ZMBD.mjs → customer-group-list-A5LER6CN.mjs} +13 -13
  93. package/dist/{customer-group-metadata-4F2SZF4M.mjs → customer-group-metadata-JQJRLLXG.mjs} +3 -2
  94. package/dist/{customer-metadata-LZ3TAXCV.mjs → customer-metadata-HN2DYD5I.mjs} +3 -2
  95. package/dist/{customers-add-customer-group-KL5UXXOR.mjs → customers-add-customer-group-75EEIDW6.mjs} +14 -13
  96. package/dist/{edit-inventory-item-O6JLGZE4.mjs → edit-inventory-item-RATTNP2Y.mjs} +5 -3
  97. package/dist/{edit-inventory-item-attributes-AUVR3GYY.mjs → edit-inventory-item-attributes-JHH5GSNL.mjs} +5 -3
  98. package/dist/{edit-reservation-GQ6R6GVA.mjs → edit-reservation-UZCSNLHY.mjs} +6 -4
  99. package/dist/{edit-rules-PJWEWMM7.mjs → edit-rules-IKV4MGHV.mjs} +15 -13
  100. package/dist/en.json +22 -49
  101. package/dist/{inventory-create-P3WYAGQZ.mjs → inventory-create-DBD7EA7N.mjs} +12 -11
  102. package/dist/{inventory-detail-C2NU7GTA.mjs → inventory-detail-Q2HAUD2Y.mjs} +11 -11
  103. package/dist/{inventory-list-ADJQDNX5.mjs → inventory-list-BQPHK3FV.mjs} +1 -1
  104. package/dist/{inventory-metadata-V2N3HOPG.mjs → inventory-metadata-NQXJBGAQ.mjs} +12 -11
  105. package/dist/{inventory-stock-5DCIGKBI.mjs → inventory-stock-WAZ7CXTY.mjs} +13 -12
  106. package/dist/{invite-VKHAAF4Z.mjs → invite-WISVECE2.mjs} +3 -2
  107. package/dist/{location-create-GDOHM4T3.mjs → location-create-WZ43K3W7.mjs} +2 -1
  108. package/dist/{location-detail-2CJWVT5M.mjs → location-detail-2LKEMZ3X.mjs} +18 -16
  109. package/dist/{location-edit-4SEMGQXA.mjs → location-edit-VCS7GVWQ.mjs} +4 -2
  110. package/dist/{location-fulfillment-providers-PYPUR74W.mjs → location-fulfillment-providers-6WNUCXQL.mjs} +15 -15
  111. package/dist/{location-list-ZJMZZ6T3.mjs → location-list-UK3WRDL5.mjs} +6 -5
  112. package/dist/{location-sales-channels-JPH5BTUY.mjs → location-sales-channels-NKNM5TQK.mjs} +7 -6
  113. package/dist/{location-service-zone-create-35TTX636.mjs → location-service-zone-create-3FWF3DG5.mjs} +5 -3
  114. package/dist/{location-service-zone-edit-RWZS2XYW.mjs → location-service-zone-edit-KHHMSPXD.mjs} +4 -2
  115. package/dist/{location-service-zone-manage-areas-RGMM5Y6C.mjs → location-service-zone-manage-areas-YFEAZUUN.mjs} +5 -3
  116. package/dist/{location-service-zone-shipping-option-create-HLZLP422.mjs → location-service-zone-shipping-option-create-DSLYSNY4.mjs} +16 -14
  117. package/dist/{location-service-zone-shipping-option-edit-OYTEZGGC.mjs → location-service-zone-shipping-option-edit-QCURIIGL.mjs} +20 -8
  118. package/dist/{location-service-zone-shipping-option-pricing-NQRIEGTX.mjs → location-service-zone-shipping-option-pricing-Z5IFOLFJ.mjs} +6 -4
  119. package/dist/{login-AKO3BIQT.mjs → login-2DAZRDSC.mjs} +12 -11
  120. package/dist/{manage-locations-ATCDVTSR.mjs → manage-locations-MLNMPQ5I.mjs} +5 -3
  121. package/dist/{order-allocate-items-2H25GRTK.mjs → order-allocate-items-I5KMPZY5.mjs} +5 -4
  122. package/dist/{order-create-claim-CWGDAFFU.mjs → order-create-claim-E543W2TJ.mjs} +24 -22
  123. package/dist/{order-create-edit-KJODOQXN.mjs → order-create-edit-HDWLEUKF.mjs} +14 -12
  124. package/dist/{order-create-exchange-TM4FQLKM.mjs → order-create-exchange-HBQWTMXR.mjs} +30 -28
  125. package/dist/{order-create-fulfillment-2WJZPAWX.mjs → order-create-fulfillment-PN3HLLB2.mjs} +15 -14
  126. package/dist/{order-create-refund-A6WKCHX7.mjs → order-create-refund-EC7XRI5O.mjs} +18 -16
  127. package/dist/{order-create-return-NDKTI4E5.mjs → order-create-return-LTGYASZZ.mjs} +13 -11
  128. package/dist/{order-create-shipment-3AVEAGAY.mjs → order-create-shipment-CPEAPIJU.mjs} +11 -10
  129. package/dist/{order-detail-7HXZEBWJ.mjs → order-detail-MPNBAUUI.mjs} +27 -27
  130. package/dist/{order-edit-billing-address-DPK7HTLM.mjs → order-edit-billing-address-KMV6RJ6F.mjs} +13 -11
  131. package/dist/{order-edit-email-UJ2OUKHJ.mjs → order-edit-email-377D6O22.mjs} +13 -11
  132. package/dist/{order-edit-shipping-address-5ZCGHHZE.mjs → order-edit-shipping-address-HEFMKAJP.mjs} +13 -11
  133. package/dist/{order-list-5C4TVJRH.mjs → order-list-QOYJFYD5.mjs} +11 -12
  134. package/dist/{order-metadata-UKTGLYWR.mjs → order-metadata-QABOWLXK.mjs} +12 -11
  135. package/dist/{order-receive-return-N7VLM2GX.mjs → order-receive-return-4WFBZ2T7.mjs} +14 -12
  136. package/dist/{order-request-transfer-5ENT7IOT.mjs → order-request-transfer-ISZSSGKO.mjs} +14 -12
  137. package/dist/{price-list-configuration-SS2VMD4N.mjs → price-list-configuration-WZFAJ7ZM.mjs} +8 -6
  138. package/dist/{price-list-create-FF4F6M2A.mjs → price-list-create-DQFXQ247.mjs} +27 -23
  139. package/dist/{price-list-detail-HQF4ZR2U.mjs → price-list-detail-WWJPFIT2.mjs} +27 -20
  140. package/dist/{price-list-edit-VRI5T4W3.mjs → price-list-edit-I5QNCWJP.mjs} +6 -4
  141. package/dist/{price-list-list-S2HWTXKV.mjs → price-list-list-AZOGEZAS.mjs} +34 -18
  142. package/dist/{price-list-prices-add-JYZAHKAQ.mjs → price-list-prices-add-6BCDF4DE.mjs} +22 -18
  143. package/dist/{price-list-prices-edit-TRCLLGU4.mjs → price-list-prices-edit-Z4YJ4YBY.mjs} +11 -7
  144. package/dist/{product-attributes-NEXVST24.mjs → product-attributes-RKEXUYKR.mjs} +17 -17
  145. package/dist/{product-create-WU4YFCMM.mjs → product-create-S7YVI2MR.mjs} +560 -381
  146. package/dist/product-create-option-UMZKRNTC.mjs +150 -0
  147. package/dist/{product-create-variant-RDEE4IX7.mjs → product-create-variant-JRKDSU6D.mjs} +19 -14
  148. package/dist/{product-detail-J4JYWH2M.mjs → product-detail-G7ZVDV46.mjs} +108 -44
  149. package/dist/{product-edit-ZF2WYHPB.mjs → product-edit-CMHKUDQP.mjs} +17 -17
  150. package/dist/product-edit-option-ZMTSLRG5.mjs +155 -0
  151. package/dist/{product-export-QDX6343F.mjs → product-export-H7KYYMGI.mjs} +26 -25
  152. package/dist/{product-image-variants-edit-5L5J32SO.mjs → product-image-variants-edit-HU6NVV6T.mjs} +17 -12
  153. package/dist/{product-import-6TEVSKGQ.mjs → product-import-5PKTI7YC.mjs} +13 -11
  154. package/dist/{product-list-BHGGJX6B.mjs → product-list-ABFSFWKV.mjs} +33 -21
  155. package/dist/{product-media-EKXMOSO4.mjs → product-media-ULNJ7JJY.mjs} +8 -4
  156. package/dist/{product-metadata-BCJJNWAC.mjs → product-metadata-GHL5HV37.mjs} +16 -12
  157. package/dist/{product-organization-IG54OB75.mjs → product-organization-Z7SXABDX.mjs} +19 -19
  158. package/dist/{product-prices-UMEIS5AZ.mjs → product-prices-5WCCQDS6.mjs} +8 -4
  159. package/dist/{product-sales-channels-2SALTLTF.mjs → product-sales-channels-2PN4L7II.mjs} +11 -7
  160. package/dist/{product-shipping-profile-VPHZLKDT.mjs → product-shipping-profile-45XXB7FM.mjs} +8 -52
  161. package/dist/{product-stock-3ILUPCVN.mjs → product-stock-NHC7WD6Z.mjs} +13 -12
  162. package/dist/{product-tag-create-OOUTLHHD.mjs → product-tag-create-MQ6AUCQM.mjs} +11 -10
  163. package/dist/{product-tag-detail-YVKJEAKT.mjs → product-tag-detail-CGURSGJE.mjs} +45 -31
  164. package/dist/{product-tag-edit-RV5WITSN.mjs → product-tag-edit-TOJYTW4H.mjs} +13 -11
  165. package/dist/{product-tag-list-ZSPFYZIL.mjs → product-tag-list-2U4CIGK5.mjs} +44 -30
  166. package/dist/{product-tag-metadata-S5YL3FUL.mjs → product-tag-metadata-JMFWGTR3.mjs} +12 -11
  167. package/dist/{product-type-create-Y752WGBV.mjs → product-type-create-KHSNCQCV.mjs} +2 -1
  168. package/dist/{product-type-detail-EFVZRETM.mjs → product-type-detail-UY6Y3T3G.mjs} +29 -14
  169. package/dist/{product-type-edit-SMPJ5ZEF.mjs → product-type-edit-3LRBWZ3S.mjs} +4 -2
  170. package/dist/{product-type-list-7WQ5D2KV.mjs → product-type-list-XU6DADMO.mjs} +19 -4
  171. package/dist/{product-type-metadata-TNAASDKX.mjs → product-type-metadata-EGMTZ622.mjs} +12 -11
  172. package/dist/{product-variant-detail-CLP5FJP6.mjs → product-variant-detail-5EKVJXUT.mjs} +27 -11
  173. package/dist/{product-variant-edit-REMB77V7.mjs → product-variant-edit-KKLHPWXO.mjs} +16 -13
  174. package/dist/{product-variant-manage-inventory-items-IGDCLZQE.mjs → product-variant-manage-inventory-items-OGM64KYP.mjs} +4 -3
  175. package/dist/{product-variant-media-EKI4BTEV.mjs → product-variant-media-C3KCFODU.mjs} +3 -2
  176. package/dist/{product-variant-metadata-5JIY5KLN.mjs → product-variant-metadata-LBOIYBBF.mjs} +12 -11
  177. package/dist/{profile-edit-NFVR5Y4I.mjs → profile-edit-YZCUGEXF.mjs} +4 -2
  178. package/dist/{promotion-add-campaign-DOALJUKJ.mjs → promotion-add-campaign-DO67QK6M.mjs} +5 -4
  179. package/dist/{promotion-create-2PTB6NQI.mjs → promotion-create-U6CJPBYU.mjs} +19 -18
  180. package/dist/{promotion-detail-RGXCA2XS.mjs → promotion-detail-BYXN4YXZ.mjs} +9 -9
  181. package/dist/{promotion-edit-details-AKKNOCLM.mjs → promotion-edit-details-6BSOOWQN.mjs} +4 -2
  182. package/dist/{refund-reason-create-AGEFXEIZ.mjs → refund-reason-create-TFC4T4GK.mjs} +11 -10
  183. package/dist/{refund-reason-edit-DL56EKBY.mjs → refund-reason-edit-WTM7WR5V.mjs} +13 -11
  184. package/dist/{refund-reason-list-RL2ZG7IJ.mjs → refund-reason-list-7Q6WDYH6.mjs} +18 -18
  185. package/dist/{region-add-countries-6GB2QDJK.mjs → region-add-countries-7U4J5RW6.mjs} +2 -1
  186. package/dist/{region-create-UVJICJRX.mjs → region-create-IUGX33M5.mjs} +5 -3
  187. package/dist/{region-edit-3NVXQECN.mjs → region-edit-WAU347DP.mjs} +5 -3
  188. package/dist/{region-metadata-2HO3SAPM.mjs → region-metadata-EGOMWMMB.mjs} +12 -11
  189. package/dist/{reservation-create-Z7TWUE2L.mjs → reservation-create-C6HTEF3R.mjs} +5 -4
  190. package/dist/{reservation-detail-2AOBK5EY.mjs → reservation-detail-FYS6LFU6.mjs} +9 -9
  191. package/dist/{reservation-list-MN22JYAW.mjs → reservation-list-SOJRN5RI.mjs} +2 -2
  192. package/dist/{reservation-metadata-BFPJTXK6.mjs → reservation-metadata-LZJV35OW.mjs} +12 -11
  193. package/dist/{reset-password-5TAYQEUV.mjs → reset-password-XKX43KUT.mjs} +3 -2
  194. package/dist/{return-reason-create-PLQNC4KW.mjs → return-reason-create-HM54WRJY.mjs} +2 -1
  195. package/dist/{return-reason-edit-XJCPMZ6U.mjs → return-reason-edit-VSIRHVQ6.mjs} +4 -2
  196. package/dist/{return-reason-list-ATE2XU4H.mjs → return-reason-list-IFFIDA5O.mjs} +7 -7
  197. package/dist/{sales-channel-add-products-4LNP2TUM.mjs → sales-channel-add-products-XPS4JTBL.mjs} +15 -14
  198. package/dist/{sales-channel-create-UFFXX5HK.mjs → sales-channel-create-4XLJDVJO.mjs} +4 -3
  199. package/dist/{sales-channel-detail-UMYMS2JA.mjs → sales-channel-detail-5YUELAQ5.mjs} +13 -13
  200. package/dist/{sales-channel-edit-SP2HF4E3.mjs → sales-channel-edit-UZGSXD5X.mjs} +6 -4
  201. package/dist/{sales-channel-list-CV4V6R7H.mjs → sales-channel-list-N3KDOVBS.mjs} +12 -12
  202. package/dist/{sales-channel-metadata-REOQHHUT.mjs → sales-channel-metadata-MU4BVKOJ.mjs} +12 -11
  203. package/dist/{shipping-option-type-create-XAWQO66M.mjs → shipping-option-type-create-AS4AVWZV.mjs} +11 -10
  204. package/dist/{shipping-option-type-detail-G4WLGIAA.mjs → shipping-option-type-detail-MCFL4BJE.mjs} +10 -10
  205. package/dist/{shipping-option-type-edit-OI6TBKGG.mjs → shipping-option-type-edit-PJOD3TA4.mjs} +13 -11
  206. package/dist/{shipping-option-type-list-6GNCKAFB.mjs → shipping-option-type-list-VD567MQD.mjs} +10 -10
  207. package/dist/{shipping-profile-create-NKFUOBVZ.mjs → shipping-profile-create-26R64I3Z.mjs} +2 -1
  208. package/dist/{shipping-profile-metadata-MANQ7ZEI.mjs → shipping-profile-metadata-6MHI75CB.mjs} +12 -11
  209. package/dist/{store-add-currencies-QVG2SI26.mjs → store-add-currencies-ZFS3WZHG.mjs} +2 -1
  210. package/dist/store-add-locales-ERJXWD4L.mjs +264 -0
  211. package/dist/{store-detail-N2CP3MTB.mjs → store-detail-EGDXIVWC.mjs} +280 -14
  212. package/dist/store-edit-AB5CDUTK.mjs +288 -0
  213. package/dist/{store-metadata-U22TVWK2.mjs → store-metadata-ZBUQ62YT.mjs} +12 -11
  214. package/dist/{tax-region-create-JZB7NFIG.mjs → tax-region-create-N4YVNQKV.mjs} +12 -11
  215. package/dist/{tax-region-detail-CBZ3ZJN2.mjs → tax-region-detail-UJASYH57.mjs} +37 -36
  216. package/dist/{tax-region-edit-E56XVHW2.mjs → tax-region-edit-W3B5EUCJ.mjs} +14 -12
  217. package/dist/{tax-region-list-BXZBUXRJ.mjs → tax-region-list-4MQMCMKY.mjs} +4 -3
  218. package/dist/{tax-region-province-create-T2LKEDTK.mjs → tax-region-province-create-GKJ7WMRS.mjs} +2 -1
  219. package/dist/{tax-region-province-detail-2DC2U4EN.mjs → tax-region-province-detail-K4PDPHXP.mjs} +36 -35
  220. package/dist/{tax-region-tax-override-create-JWGWGYB4.mjs → tax-region-tax-override-create-NUI4Z76X.mjs} +34 -33
  221. package/dist/{tax-region-tax-override-edit-7DCU55AS.mjs → tax-region-tax-override-edit-Q4GJHUMJ.mjs} +31 -31
  222. package/dist/{tax-region-tax-rate-create-UEOU5QRU.mjs → tax-region-tax-rate-create-MECFGVPL.mjs} +2 -1
  223. package/dist/{tax-region-tax-rate-edit-ILCDNXHV.mjs → tax-region-tax-rate-edit-7DYSPYOD.mjs} +4 -2
  224. package/dist/translation-list-5ZOAGLCT.mjs +146 -0
  225. package/dist/translations-edit-QPJLE55N.mjs +390 -0
  226. package/dist/{user-detail-K5UMPO2L.mjs → user-detail-KEDJ7N3Q.mjs} +1 -1
  227. package/dist/{user-edit-25HD3BYT.mjs → user-edit-ZBB4RMTP.mjs} +4 -2
  228. package/dist/{user-invite-CRQTVEYA.mjs → user-invite-XB635N26.mjs} +2 -1
  229. package/dist/{user-list-KPI3BTOA.mjs → user-list-YYUOQKQY.mjs} +4 -4
  230. package/dist/{user-metadata-EX5WDGCR.mjs → user-metadata-2FTA4EB3.mjs} +12 -11
  231. package/dist/{workflow-execution-detail-GBPFVG3O.mjs → workflow-execution-detail-MGIZSKVA.mjs} +9 -9
  232. package/package.json +9 -9
  233. package/src/components/common/icon-avatar/icon-avatar.tsx +4 -0
  234. package/src/components/data-grid/components/data-grid-textarea-modal-cell.tsx +233 -0
  235. package/src/components/data-grid/components/index.ts +1 -0
  236. package/src/components/data-grid/data-grid.tsx +2 -0
  237. package/src/components/inputs/combobox/combobox.tsx +92 -173
  238. package/src/components/layout/main-layout/main-layout.tsx +4 -7
  239. package/src/components/layout/settings-layout/settings-layout.tsx +11 -1
  240. package/src/components/modals/route-focus-modal/route-focus-modal.tsx +8 -3
  241. package/src/components/modals/route-modal-form/route-modal-form.tsx +6 -1
  242. package/src/components/modals/route-modal-provider/route-provider.tsx +16 -4
  243. package/src/components/search/use-search-results.tsx +3 -1
  244. package/src/components/table/table-cells/order/total-cell/total-cell.tsx +3 -2
  245. package/src/dashboard-app/routes/get-route.map.tsx +36 -64
  246. package/src/hooks/api/feature-flags.tsx +9 -5
  247. package/src/hooks/api/index.ts +2 -1
  248. package/src/hooks/api/locales.tsx +52 -0
  249. package/src/hooks/api/price-lists.tsx +28 -1
  250. package/src/hooks/api/product-variants.tsx +7 -1
  251. package/src/hooks/api/products.tsx +71 -27
  252. package/src/hooks/api/translations.tsx +254 -0
  253. package/src/hooks/table/columns/use-order-table-columns.tsx +18 -4
  254. package/src/hooks/table/filters/index.ts +0 -1
  255. package/src/hooks/table/query/use-product-table-query.tsx +2 -1
  256. package/src/i18n/translations/$schema.json +68 -171
  257. package/src/i18n/translations/en.json +22 -49
  258. package/src/i18n/translations/es.json +19 -0
  259. package/src/lib/order-helpers.ts +1 -1
  260. package/src/lib/table/cell-renderers.tsx +102 -83
  261. package/src/routes/categories/category-detail/components/category-general-section/category-general-section.tsx +16 -1
  262. package/src/routes/categories/category-list/components/category-list-table/category-list-table.tsx +16 -1
  263. package/src/routes/collections/collection-detail/components/collection-general-section/collection-general-section.tsx +16 -1
  264. package/src/routes/collections/collection-list/components/collection-list-table/collection-row-actions.tsx +16 -1
  265. package/src/routes/orders/order-create-claim/components/claim-create-form/claim-create-form.tsx +11 -4
  266. package/src/routes/orders/order-create-exchange/components/exchange-create-form/exchange-create-form.tsx +11 -4
  267. package/src/routes/orders/order-create-return/components/return-create-form/return-create-form.tsx +11 -4
  268. package/src/routes/orders/order-list/const.ts +1 -1
  269. package/src/routes/price-lists/price-list-create/components/price-list-create-form/price-list-prices-form.tsx +3 -1
  270. package/src/routes/price-lists/price-list-create/components/price-list-create-form/price-list-products-form.tsx +1 -0
  271. package/src/routes/price-lists/price-list-detail/components/price-list-general-section/price-list-general-section.tsx +13 -5
  272. package/src/routes/price-lists/price-list-list/components/price-list-list-table/price-count-cell.tsx +19 -0
  273. package/src/routes/price-lists/price-list-list/components/price-list-list-table/use-pricing-table-columns.tsx +5 -6
  274. package/src/routes/price-lists/price-list-prices-add/components/price-list-prices-add-form/price-list-prices-add-prices-form.tsx +3 -1
  275. package/src/routes/price-lists/price-list-prices-add/price-list-prices-add.tsx +4 -1
  276. package/src/routes/price-lists/price-list-prices-edit/price-list-prices-edit.tsx +6 -2
  277. package/src/routes/product-tags/product-tag-detail/components/product-tag-general-section/product-tag-general-section.tsx +16 -1
  278. package/src/routes/product-tags/product-tag-list/components/product-tag-list-table/product-tag-list-table.tsx +16 -1
  279. package/src/routes/product-types/product-type-detail/components/product-type-general-section/product-type-general-section.tsx +16 -1
  280. package/src/routes/product-types/product-type-list/components/product-type-list-table/product-table-row-actions.tsx +16 -1
  281. package/src/routes/product-variants/product-variant-detail/components/variant-general-section/variant-general-section.tsx +16 -1
  282. package/src/routes/product-variants/product-variant-edit/product-variant-edit.tsx +2 -1
  283. package/src/routes/products/product-attributes/product-attributes.tsx +3 -2
  284. package/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-general-section/product-create-general-section.tsx +4 -16
  285. package/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-variant-section/product-create-details-variant-section.tsx +198 -220
  286. package/src/routes/products/product-create/components/product-create-form/product-create-form.tsx +7 -4
  287. package/src/routes/products/product-create/constants.ts +0 -2
  288. package/src/routes/products/product-create/utils.ts +1 -6
  289. package/src/routes/products/product-create-option/components/create-product-option-form/create-product-option-form.tsx +122 -0
  290. package/src/routes/products/product-create-option/components/create-product-option-form/index.ts +1 -0
  291. package/src/routes/products/product-create-option/index.ts +1 -0
  292. package/src/routes/products/product-create-option/product-create-option.tsx +30 -0
  293. package/src/routes/products/product-create-variant/product-create-variant.tsx +4 -1
  294. package/src/routes/products/product-detail/breadcrumb.tsx +3 -2
  295. package/src/routes/products/product-detail/components/product-general-section/product-general-section.tsx +16 -1
  296. package/src/routes/products/product-detail/components/product-option-section/product-option-section.tsx +49 -31
  297. package/src/routes/products/product-detail/components/product-variant-section/product-variant-section.tsx +32 -1
  298. package/src/routes/products/product-edit/product-edit.tsx +3 -2
  299. package/src/routes/products/product-edit-option/components/edit-product-option-form/edit-product-option-form.tsx +123 -0
  300. package/src/routes/products/product-edit-option/components/edit-product-option-form/index.ts +1 -0
  301. package/src/routes/products/product-edit-option/index.ts +1 -0
  302. package/src/routes/products/product-edit-option/product-edit-option.tsx +35 -0
  303. package/src/routes/products/product-image-variants-edit/product-image-variants-edit.tsx +5 -1
  304. package/src/routes/products/product-list/components/product-list-table/product-list-table.tsx +15 -1
  305. package/src/routes/products/product-media/product-media.tsx +4 -1
  306. package/src/routes/products/product-metadata/product-metadata.tsx +5 -1
  307. package/src/routes/products/product-organization/product-organization.tsx +2 -2
  308. package/src/routes/products/product-prices/product-prices.tsx +4 -1
  309. package/src/routes/products/product-sales-channels/product-sales-channels.tsx +4 -1
  310. package/src/routes/products/product-shipping-profile/product-shipping-profile.tsx +3 -2
  311. package/src/routes/store/common/hooks/use-locales-table-columns.tsx +29 -0
  312. package/src/routes/store/common/hooks/use-locales-table-query.tsx +21 -0
  313. package/src/routes/store/store-add-locales/components/add-locales-form/add-locales-form.tsx +240 -0
  314. package/src/routes/store/store-add-locales/index.ts +1 -0
  315. package/src/routes/store/store-add-locales/store-add-locales.tsx +29 -0
  316. package/src/routes/store/store-detail/components/store-general-section/store-general-section.tsx +24 -0
  317. package/src/routes/store/store-detail/components/store-locale-section/index.ts +1 -0
  318. package/src/routes/store/store-detail/components/store-locale-section/store-locale-section.tsx +290 -0
  319. package/src/routes/store/store-detail/store-detail.tsx +4 -0
  320. package/src/routes/store/store-edit/components/edit-store-form/edit-store-form.tsx +50 -3
  321. package/src/routes/tax-regions/common/components/target-item/target-item.tsx +5 -1
  322. package/src/routes/tax-regions/common/components/tax-override-card/tax-override-card.tsx +10 -10
  323. package/src/routes/translations/translation-list/index.tsx +1 -0
  324. package/src/routes/translations/translation-list/translation-list.tsx +131 -0
  325. package/src/routes/translations/translations-edit/components/translations-edit-form/index.ts +1 -0
  326. package/src/routes/translations/translations-edit/components/translations-edit-form/translations-edit-form.tsx +423 -0
  327. package/src/routes/translations/translations-edit/index.ts +1 -0
  328. package/src/routes/translations/translations-edit/translations-edit.tsx +67 -0
  329. package/src/routes/translations/translations-edit/utils/index.ts +1 -0
  330. package/src/routes/translations/translations-edit/utils/reference-label-map.ts +10 -0
  331. package/dist/chunk-6CPMXY5N.mjs +0 -18
  332. package/dist/chunk-BWU3ZE4W.mjs +0 -13
  333. package/dist/chunk-ZHH3W7CN.mjs +0 -171
  334. package/dist/product-option-create-3Z73MSHD.mjs +0 -336
  335. package/dist/product-option-detail-4VRUA7KT.mjs +0 -322
  336. package/dist/product-option-edit-YIKFL6OY.mjs +0 -324
  337. package/dist/product-option-list-CR7NCCMH.mjs +0 -267
  338. package/dist/product-option-metadata-7CSZUQ7M.mjs +0 -71
  339. package/dist/product-options-manage-QOMXMPGW.mjs +0 -304
  340. package/dist/store-edit-Q25HCMCQ.mjs +0 -238
  341. package/src/hooks/api/product-options.tsx +0 -151
  342. package/src/hooks/table/columns/use-product-option-table-columns.tsx +0 -44
  343. package/src/hooks/table/filters/use-product-option-table-filters.tsx +0 -33
  344. package/src/hooks/table/query/use-product-option-table-query.tsx +0 -34
  345. package/src/routes/product-options/common/hooks/use-delete-product-option-action.tsx +0 -41
  346. package/src/routes/product-options/product-option-create/components/create-product-option-form/create-product-option-details.tsx +0 -71
  347. package/src/routes/product-options/product-option-create/components/create-product-option-form/create-product-option-form.tsx +0 -192
  348. package/src/routes/product-options/product-option-create/components/create-product-option-form/create-product-option-organize.tsx +0 -77
  349. package/src/routes/product-options/product-option-create/components/create-product-option-form/index.ts +0 -1
  350. package/src/routes/product-options/product-option-create/components/create-product-option-form/schema.ts +0 -15
  351. package/src/routes/product-options/product-option-create/index.ts +0 -1
  352. package/src/routes/product-options/product-option-create/product-option-create.tsx +0 -10
  353. package/src/routes/product-options/product-option-detail/breadcrumb.tsx +0 -14
  354. package/src/routes/product-options/product-option-detail/components/product-option-general-section/index.ts +0 -1
  355. package/src/routes/product-options/product-option-detail/components/product-option-general-section/product-option-general-section.tsx +0 -81
  356. package/src/routes/product-options/product-option-detail/components/product-option-product-section/index.ts +0 -1
  357. package/src/routes/product-options/product-option-detail/components/product-option-product-section/product-option-product-section.tsx +0 -74
  358. package/src/routes/product-options/product-option-detail/index.ts +0 -3
  359. package/src/routes/product-options/product-option-detail/loader.ts +0 -17
  360. package/src/routes/product-options/product-option-detail/product-option-detail.tsx +0 -50
  361. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/edit-product-option-details.tsx +0 -94
  362. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/edit-product-option-form.tsx +0 -116
  363. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/edit-product-option-organize.tsx +0 -77
  364. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/index.ts +0 -1
  365. package/src/routes/product-options/product-option-edit/components/edit-product-option-form/schema.ts +0 -13
  366. package/src/routes/product-options/product-option-edit/index.ts +0 -1
  367. package/src/routes/product-options/product-option-edit/product-option-edit.tsx +0 -34
  368. package/src/routes/product-options/product-option-list/components/product-option-list-table/index.ts +0 -1
  369. package/src/routes/product-options/product-option-list/components/product-option-list-table/product-option-list-table.tsx +0 -140
  370. package/src/routes/product-options/product-option-list/index.ts +0 -1
  371. package/src/routes/product-options/product-option-list/product-option-list.tsx +0 -19
  372. package/src/routes/product-options/product-option-metadata/index.ts +0 -1
  373. package/src/routes/product-options/product-option-metadata/product-option-metadata.tsx +0 -27
  374. package/src/routes/products/product-options-manage/components/product-options-manage-form/index.ts +0 -1
  375. package/src/routes/products/product-options-manage/components/product-options-manage-form/product-options-manage-form.tsx +0 -284
  376. package/src/routes/products/product-options-manage/index.ts +0 -1
  377. package/src/routes/products/product-options-manage/product-options-manage.tsx +0 -35
  378. package/dist/{chunk-6WKBBTKM.mjs → chunk-CTUJXJYA.mjs} +0 -0
  379. package/dist/{customer-list-TG4D4QOT.mjs → customer-list-ZXCGIXJC.mjs} +3 -3
  380. package/dist/{region-list-JAQXIBYD.mjs → region-list-XQRIBDMF.mjs} +3 -3
@@ -15,7 +15,7 @@ import {
15
15
  TrianglesMini,
16
16
  XMarkMini,
17
17
  } from "@medusajs/icons"
18
- import { Badge, clx, Text } from "@medusajs/ui"
18
+ import { clx, Text } from "@medusajs/ui"
19
19
  import { matchSorter } from "match-sorter"
20
20
  import {
21
21
  ComponentPropsWithoutRef,
@@ -59,7 +59,6 @@ interface ComboboxProps<T extends Value = Value>
59
59
  noResultsPlaceholder?: ReactNode
60
60
  allowClear?: boolean
61
61
  forceHideInput?: boolean // always hide input -> used for singe value select that don't have query/filter
62
- displayMode?: "count" | "chips" // how to display multiple selected values
63
62
  }
64
63
 
65
64
  const ComboboxImpl = <T extends Value = string>(
@@ -77,7 +76,6 @@ const ComboboxImpl = <T extends Value = string>(
77
76
  noResultsPlaceholder,
78
77
  allowClear,
79
78
  forceHideInput,
80
- displayMode = "count",
81
79
  ...inputProps
82
80
  }: ComboboxProps<T>,
83
81
  ref: ForwardedRef<HTMLInputElement>
@@ -145,15 +143,6 @@ const ComboboxImpl = <T extends Value = string>(
145
143
  }
146
144
  }
147
145
 
148
- const handleRemoveValue = (valueToRemove: string) => {
149
- if (!isArrayValue || !Array.isArray(selectedValues)) {
150
- return
151
- }
152
-
153
- const newValues = selectedValues.filter((v) => v !== valueToRemove) as T
154
- handleValueChange(newValues)
155
- }
156
-
157
146
  /**
158
147
  * Filter and sort the options based on the search value,
159
148
  * and whether the value is already selected.
@@ -246,179 +235,109 @@ const ComboboxImpl = <T extends Value = string>(
246
235
  startTransition(() => handleSearchChange(query))
247
236
  }}
248
237
  >
249
- {displayMode === "chips" && isArrayValue ? (
250
- <div
251
- className={clx(
252
- "relative flex cursor-pointer flex-wrap items-center gap-1.5",
253
- "min-h-8 w-full rounded-md",
254
- "bg-ui-bg-field transition-fg shadow-borders-base",
255
- "has-[input:focus]:shadow-borders-interactive-with-active",
256
- "has-[:invalid]:shadow-borders-error has-[[aria-invalid=true]]:shadow-borders-error",
257
- "has-[:disabled]:bg-ui-bg-disabled has-[:disabled]:text-ui-fg-disabled has-[:disabled]:cursor-not-allowed",
258
- "p-1",
259
- className
260
- )}
261
- >
262
- {Array.isArray(selectedValues) &&
263
- selectedValues.map((value) => {
264
- const option = options.find((o) => o.value === value)
265
- if (!option) return null
266
-
267
- return (
268
- <Badge
269
- key={value}
270
- size="2xsmall"
271
- className="gap-x-0.5 pl-1.5 pr-1 transition-fg"
272
- >
273
- {option.label}
274
- <button
275
- tabIndex={-1}
276
- type="button"
277
- onClick={(e) => {
278
- e.preventDefault()
279
- handleRemoveValue(value)
280
- }}
281
- className="text-ui-fg-subtle transition-fg outline-none"
282
- >
283
- <XMarkMini />
284
- </button>
285
- </Badge>
286
- )
287
- })}
288
- <div className="relative flex flex-1 items-center min-w-[120px]">
289
- <PrimitiveCombobox
290
- autoSelect
291
- ref={comboboxRef}
292
- onFocus={() => setOpen(true)}
238
+ <div
239
+ className={clx(
240
+ "relative flex cursor-pointer items-center gap-x-2 overflow-hidden",
241
+ "h-8 w-full rounded-md",
242
+ "bg-ui-bg-field transition-fg shadow-borders-base",
243
+ "has-[input:focus]:shadow-borders-interactive-with-active",
244
+ "has-[:invalid]:shadow-borders-error has-[[aria-invalid=true]]:shadow-borders-error",
245
+ "has-[:disabled]:bg-ui-bg-disabled has-[:disabled]:text-ui-fg-disabled has-[:disabled]:cursor-not-allowed",
246
+ className
247
+ )}
248
+ style={
249
+ {
250
+ "--tag-width": `${tagWidth}px`,
251
+ } as CSSProperties
252
+ }
253
+ >
254
+ {showTag && (
255
+ <button
256
+ type="button"
257
+ onClick={(e) => {
258
+ e.preventDefault()
259
+ handleValueChange(isArrayValue ? ([] as unknown as T) : undefined)
260
+ }}
261
+ className="bg-ui-bg-base hover:bg-ui-bg-base-hover txt-compact-small-plus text-ui-fg-subtle focus-within:border-ui-fg-interactive transition-fg absolute start-0.5 top-0.5 z-[1] flex h-[28px] items-center rounded-[4px] border py-[3px] pe-1 ps-1.5 outline-none"
262
+ >
263
+ <span className="tabular-nums">{selectedValues.length}</span>
264
+ <XMarkMini className="text-ui-fg-muted" />
265
+ </button>
266
+ )}
267
+ <div className="relative flex size-full items-center">
268
+ {showSelected && (
269
+ <div
293
270
  className={clx(
294
- "txt-compact-small text-ui-fg-base !placeholder:text-ui-fg-muted transition-fg size-full cursor-pointer bg-transparent pe-8 ps-1 outline-none focus:cursor-text"
271
+ "pointer-events-none absolute inset-y-0 flex size-full items-center",
272
+ {
273
+ "start-[calc(var(--tag-width)+8px)]": showTag,
274
+ "start-2": !showTag,
275
+ }
295
276
  )}
296
- placeholder={
297
- Array.isArray(selectedValues) && selectedValues.length > 0
298
- ? undefined
299
- : placeholder
300
- }
301
- {...inputProps}
302
- />
303
- </div>
304
- <PrimitiveComboboxDisclosure
305
- render={(props) => {
306
- return (
307
- <button
308
- {...props}
309
- type="button"
310
- className="text-ui-fg-muted transition-fg hover:bg-ui-bg-field-hover absolute end-0 top-0 flex h-8 w-8 items-center justify-center rounded-r outline-none"
311
- >
312
- <TrianglesMini />
313
- </button>
314
- )
315
- }}
316
- />
317
- </div>
318
- ) : (
319
- <div
320
- className={clx(
321
- "relative flex cursor-pointer items-center gap-x-2 overflow-hidden",
322
- "h-8 w-full rounded-md",
323
- "bg-ui-bg-field transition-fg shadow-borders-base",
324
- "has-[input:focus]:shadow-borders-interactive-with-active",
325
- "has-[:invalid]:shadow-borders-error has-[[aria-invalid=true]]:shadow-borders-error",
326
- "has-[:disabled]:bg-ui-bg-disabled has-[:disabled]:text-ui-fg-disabled has-[:disabled]:cursor-not-allowed",
327
- className
328
- )}
329
- style={
330
- {
331
- "--tag-width": `${tagWidth}px`,
332
- } as CSSProperties
333
- }
334
- >
335
- {showTag && (
336
- <button
337
- type="button"
338
- onClick={(e) => {
339
- e.preventDefault()
340
- handleValueChange(isArrayValue ? ([] as unknown as T) : undefined)
341
- }}
342
- className="bg-ui-bg-base hover:bg-ui-bg-base-hover txt-compact-small-plus text-ui-fg-subtle focus-within:border-ui-fg-interactive transition-fg absolute start-0.5 top-0.5 z-[1] flex h-[28px] items-center rounded-[4px] border py-[3px] pe-1 ps-1.5 outline-none"
343
277
  >
344
- <span className="tabular-nums">{selectedValues.length}</span>
345
- <XMarkMini className="text-ui-fg-muted" />
346
- </button>
278
+ <Text size="small" leading="compact">
279
+ {t("general.selected")}
280
+ </Text>
281
+ </div>
347
282
  )}
348
- <div className="relative flex size-full items-center">
349
- {showSelected && (
350
- <div
351
- className={clx(
352
- "pointer-events-none absolute inset-y-0 flex size-full items-center",
353
- {
354
- "start-[calc(var(--tag-width)+8px)]": showTag,
355
- "start-2": !showTag,
356
- }
357
- )}
358
- >
359
- <Text size="small" leading="compact">
360
- {t("general.selected")}
361
- </Text>
362
- </div>
363
- )}
364
- {hideInput && (
365
- <div
366
- className={clx(
367
- "pointer-events-none absolute inset-y-0 flex size-full items-center overflow-hidden",
368
- {
369
- "start-[calc(var(--tag-width)+8px)]": showTag,
370
- "start-2": !showTag,
371
- }
372
- )}
373
- >
374
- <Text size="small" leading="compact" className="truncate">
375
- {selectedLabel}
376
- </Text>
377
- </div>
378
- )}
379
- <PrimitiveCombobox
380
- autoSelect
381
- ref={comboboxRef}
382
- onFocus={() => setOpen(true)}
283
+ {hideInput && (
284
+ <div
383
285
  className={clx(
384
- "txt-compact-small text-ui-fg-base !placeholder:text-ui-fg-muted transition-fg size-full cursor-pointer bg-transparent pe-8 ps-2 outline-none focus:cursor-text",
286
+ "pointer-events-none absolute inset-y-0 flex size-full items-center overflow-hidden",
385
287
  {
386
- "opacity-0": hideInput,
387
- "ps-2": !showTag,
388
- "ps-[calc(var(--tag-width)+8px)]": showTag,
288
+ "start-[calc(var(--tag-width)+8px)]": showTag,
289
+ "start-2": !showTag,
389
290
  }
390
291
  )}
391
- placeholder={hidePlaceholder ? undefined : placeholder}
392
- {...inputProps}
393
- />
394
- </div>
395
- {allowClear && controlledValue && (
396
- <button
397
- type="button"
398
- onClick={(e) => {
399
- e.preventDefault()
400
- handleValueChange(undefined)
401
- }}
402
- className="bg-ui-bg-base hover:bg-ui-bg-base-hover txt-compact-small-plus text-ui-fg-subtle focus-within:border-ui-fg-interactive transition-fg absolute end-[28px] top-0.5 z-[1] flex h-[28px] items-center rounded-[4px] border px-1.5 py-[2px] outline-none"
403
292
  >
404
- <XMarkMini className="text-ui-fg-muted" />
405
- </button>
293
+ <Text size="small" leading="compact" className="truncate">
294
+ {selectedLabel}
295
+ </Text>
296
+ </div>
406
297
  )}
407
- <PrimitiveComboboxDisclosure
408
- render={(props) => {
409
- return (
410
- <button
411
- {...props}
412
- type="button"
413
- className="text-ui-fg-muted transition-fg hover:bg-ui-bg-field-hover absolute end-0 flex size-8 items-center justify-center rounded-r outline-none"
414
- >
415
- <TrianglesMini />
416
- </button>
417
- )
418
- }}
298
+ <PrimitiveCombobox
299
+ autoSelect
300
+ ref={comboboxRef}
301
+ onFocus={() => setOpen(true)}
302
+ className={clx(
303
+ "txt-compact-small text-ui-fg-base !placeholder:text-ui-fg-muted transition-fg size-full cursor-pointer bg-transparent pe-8 ps-2 outline-none focus:cursor-text",
304
+ "hover:bg-ui-bg-field-hover",
305
+ {
306
+ "opacity-0": hideInput,
307
+ "ps-2": !showTag,
308
+ "ps-[calc(var(--tag-width)+8px)]": showTag,
309
+ }
310
+ )}
311
+ placeholder={hidePlaceholder ? undefined : placeholder}
312
+ {...inputProps}
419
313
  />
420
314
  </div>
421
- )}
315
+ {allowClear && controlledValue && (
316
+ <button
317
+ type="button"
318
+ onClick={(e) => {
319
+ e.preventDefault()
320
+ handleValueChange(undefined)
321
+ }}
322
+ className="bg-ui-bg-base hover:bg-ui-bg-base-hover txt-compact-small-plus text-ui-fg-subtle focus-within:border-ui-fg-interactive transition-fg absolute end-[28px] top-0.5 z-[1] flex h-[28px] items-center rounded-[4px] border px-1.5 py-[2px] outline-none"
323
+ >
324
+ <XMarkMini className="text-ui-fg-muted" />
325
+ </button>
326
+ )}
327
+ <PrimitiveComboboxDisclosure
328
+ render={(props) => {
329
+ return (
330
+ <button
331
+ {...props}
332
+ type="button"
333
+ className="text-ui-fg-muted transition-fg hover:bg-ui-bg-field-hover absolute end-0 flex size-8 items-center justify-center rounded-r outline-none"
334
+ >
335
+ <TrianglesMini />
336
+ </button>
337
+ )
338
+ }}
339
+ />
340
+ </div>
422
341
  <PrimitiveComboboxPopover
423
342
  gutter={4}
424
343
  sameWidth
@@ -1,6 +1,6 @@
1
1
  import {
2
- Buildings,
3
2
  BuildingStorefront,
3
+ Buildings,
4
4
  ChevronDownMini,
5
5
  CogSixTooth,
6
6
  CurrencyDollar,
@@ -14,7 +14,7 @@ import {
14
14
  Tag,
15
15
  Users,
16
16
  } from "@medusajs/icons"
17
- import { Avatar, clx, Divider, DropdownMenu, Text } from "@medusajs/ui"
17
+ import { Avatar, Divider, DropdownMenu, Text, clx } from "@medusajs/ui"
18
18
  import { Collapsible as RadixCollapsible } from "radix-ui"
19
19
  import { useTranslation } from "react-i18next"
20
20
 
@@ -107,7 +107,8 @@ const Header = () => {
107
107
 
108
108
  return (
109
109
  <div className="w-full p-3">
110
- <DropdownMenu dir={direction}>
110
+ <DropdownMenu
111
+ dir={direction}>
111
112
  <DropdownMenu.Trigger
112
113
  disabled={!isLoaded}
113
114
  className={clx(
@@ -205,10 +206,6 @@ const useCoreRoutes = (): Omit<INavItem, "pathname">[] => {
205
206
  label: t("categories.domain"),
206
207
  to: "/categories",
207
208
  },
208
- {
209
- label: t("productOptions.domain"),
210
- to: "/product-options",
211
- },
212
209
  // TODO: Enable when domin is introduced
213
210
  // {
214
211
  // label: t("giftCards.domain"),
@@ -9,6 +9,7 @@ import { useExtension } from "../../../providers/extension-provider"
9
9
  import { INavItem, NavItem } from "../nav-item"
10
10
  import { Shell } from "../shell"
11
11
  import { UserMenu } from "../user-menu"
12
+ import { useFeatureFlag } from "../../../providers/feature-flag-provider"
12
13
 
13
14
  export const SettingsLayout = () => {
14
15
  return (
@@ -19,10 +20,19 @@ export const SettingsLayout = () => {
19
20
  }
20
21
 
21
22
  const useSettingRoutes = (): INavItem[] => {
23
+ const isTranslationsEnabled = useFeatureFlag("translation")
22
24
  const { t } = useTranslation()
23
25
 
24
26
  return useMemo(
25
27
  () => [
28
+ ...(isTranslationsEnabled
29
+ ? [
30
+ {
31
+ label: t("translations.domain"),
32
+ to: "/settings/translations",
33
+ },
34
+ ]
35
+ : []),
26
36
  {
27
37
  label: t("store.domain"),
28
38
  to: "/settings/store",
@@ -64,7 +74,7 @@ const useSettingRoutes = (): INavItem[] => {
64
74
  to: "/settings/locations",
65
75
  },
66
76
  ],
67
- [t]
77
+ [t, isTranslationsEnabled]
68
78
  )
69
79
  }
70
80
 
@@ -8,7 +8,7 @@ import { RouteModalProvider } from "../route-modal-provider/route-provider"
8
8
  import { StackedModalProvider } from "../stacked-modal-provider"
9
9
 
10
10
  type RouteFocusModalProps = PropsWithChildren<{
11
- prev?: string | Partial<Path>
11
+ prev?: string | Partial<Path> | number
12
12
  }>
13
13
 
14
14
  const Root = ({ prev = "..", children }: RouteFocusModalProps) => {
@@ -16,7 +16,8 @@ const Root = ({ prev = "..", children }: RouteFocusModalProps) => {
16
16
  const [open, setOpen] = useState(false)
17
17
  const [stackedModalOpen, onStackedModalOpen] = useState(false)
18
18
 
19
- const to = useStateAwareTo(prev)
19
+ const to: string | Partial<Path> | number =
20
+ typeof prev === "number" ? prev : useStateAwareTo(prev)
20
21
 
21
22
  /**
22
23
  * Open the modal when the component mounts. This
@@ -34,7 +35,11 @@ const Root = ({ prev = "..", children }: RouteFocusModalProps) => {
34
35
  const handleOpenChange = (open: boolean) => {
35
36
  if (!open) {
36
37
  document.body.style.pointerEvents = "auto"
37
- navigate(to, { replace: true })
38
+ if (typeof to === "number") {
39
+ navigate(to)
40
+ } else {
41
+ navigate(to, { replace: true })
42
+ }
38
43
  return
39
44
  }
40
45
 
@@ -24,7 +24,12 @@ export const RouteModalForm = <TFieldValues extends FieldValues = any>({
24
24
  } = form
25
25
 
26
26
  const blocker = useBlocker(({ currentLocation, nextLocation }) => {
27
- const { isSubmitSuccessful } = nextLocation.state || {}
27
+ // Check both nextLocation and currentLocation state for successful submission
28
+ // This handles browser history navigation (-1) where we set state on current location
29
+ const { isSubmitSuccessful: nextIsSuccessful } = nextLocation.state || {}
30
+ const { isSubmitSuccessful: currentIsSuccessful } =
31
+ currentLocation.state || {}
32
+ const isSubmitSuccessful = nextIsSuccessful || currentIsSuccessful
28
33
 
29
34
  if (isSubmitSuccessful) {
30
35
  onClose?.(true)
@@ -1,9 +1,9 @@
1
1
  import { PropsWithChildren, useCallback, useMemo, useState } from "react"
2
- import { Path, useNavigate } from "react-router-dom"
2
+ import { Path, useLocation, useNavigate } from "react-router-dom"
3
3
  import { RouteModalProviderContext } from "./route-modal-context"
4
4
 
5
5
  type RouteModalProviderProps = PropsWithChildren<{
6
- prev: string | Partial<Path>
6
+ prev: string | Partial<Path> | number
7
7
  }>
8
8
 
9
9
  export const RouteModalProvider = ({
@@ -11,15 +11,27 @@ export const RouteModalProvider = ({
11
11
  children,
12
12
  }: RouteModalProviderProps) => {
13
13
  const navigate = useNavigate()
14
+ const location = useLocation()
14
15
 
15
16
  const [closeOnEscape, setCloseOnEscape] = useState(true)
16
17
 
17
18
  const handleSuccess = useCallback(
18
19
  (path?: string) => {
19
20
  const to = path || prev
20
- navigate(to, { replace: true, state: { isSubmitSuccessful: true } })
21
+ if (typeof to === "number") {
22
+ // Replace current location with success state, then navigate back
23
+ navigate(location.pathname + location.search, {
24
+ replace: true,
25
+ state: { ...location.state, isSubmitSuccessful: true },
26
+ })
27
+ setTimeout(() => {
28
+ navigate(to)
29
+ }, 0)
30
+ } else {
31
+ navigate(to, { replace: true, state: { isSubmitSuccessful: true } })
32
+ }
21
33
  },
22
- [navigate, prev]
34
+ [navigate, prev, location]
23
35
  )
24
36
 
25
37
  const value = useMemo(
@@ -117,7 +117,9 @@ const useDynamicSearchResults = (
117
117
  {
118
118
  q: debouncedSearch,
119
119
  limit,
120
- fields: "id,title,thumbnail",
120
+ // TODO: Remove exclusion once we avoid including unnecessary relations by default in the query config
121
+ fields:
122
+ "id,title,thumbnail,-type,-collection,-options,-tags,-images,-variants,-sales_channels",
121
123
  },
122
124
  {
123
125
  enabled: isAreaEnabled(currentArea, "product"),
@@ -5,15 +5,16 @@ import { PlaceholderCell } from "../../common/placeholder-cell"
5
5
  type TotalCellProps = {
6
6
  currencyCode: string
7
7
  total: number | null
8
+ className?: string
8
9
  }
9
10
 
10
- export const TotalCell = ({ currencyCode, total }: TotalCellProps) => {
11
+ export const TotalCell = ({ currencyCode, total, className }: TotalCellProps) => {
11
12
  if (!total) {
12
13
  return <PlaceholderCell />
13
14
  }
14
15
 
15
16
  return (
16
- <MoneyAmountCell currencyCode={currencyCode} amount={total} align="right" />
17
+ <MoneyAmountCell currencyCode={currencyCode} amount={total} className={className} align="right" />
17
18
  )
18
19
  }
19
20
 
@@ -136,6 +136,18 @@ export function getRouteMap({
136
136
  lazy: () =>
137
137
  import("../../routes/products/product-prices"),
138
138
  },
139
+ {
140
+ path: "options/create",
141
+ lazy: () =>
142
+ import(
143
+ "../../routes/products/product-create-option"
144
+ ),
145
+ },
146
+ {
147
+ path: "options/:option_id/edit",
148
+ lazy: () =>
149
+ import("../../routes/products/product-edit-option"),
150
+ },
139
151
  {
140
152
  path: "variants/create",
141
153
  lazy: () =>
@@ -153,13 +165,6 @@ export function getRouteMap({
153
165
  lazy: () =>
154
166
  import("../../routes/products/product-metadata"),
155
167
  },
156
- {
157
- path: "options/manage",
158
- lazy: () =>
159
- import(
160
- "../../routes/products/product-options-manage"
161
- ),
162
- },
163
168
  ],
164
169
  },
165
170
  {
@@ -220,63 +225,6 @@ export function getRouteMap({
220
225
  },
221
226
  ],
222
227
  },
223
- {
224
- path: "/product-options",
225
- errorElement: <ErrorBoundary />,
226
- handle: {
227
- breadcrumb: () => t("productOptions.domain"),
228
- },
229
- children: [
230
- {
231
- path: "",
232
- lazy: () =>
233
- import("../../routes/product-options/product-option-list"),
234
- children: [
235
- {
236
- path: "create",
237
- lazy: () =>
238
- import(
239
- "../../routes/product-options/product-option-create"
240
- ),
241
- },
242
- ],
243
- },
244
- {
245
- path: ":id",
246
- lazy: async () => {
247
- const { Component, Breadcrumb, loader } = await import(
248
- "../../routes/product-options/product-option-detail"
249
- )
250
-
251
- return {
252
- Component,
253
- loader,
254
- handle: {
255
- breadcrumb: (match: UIMatch<any>) => (
256
- <Breadcrumb {...match} />
257
- ),
258
- },
259
- }
260
- },
261
- children: [
262
- {
263
- path: "edit",
264
- lazy: () =>
265
- import(
266
- "../../routes/product-options/product-option-edit"
267
- ),
268
- },
269
- {
270
- path: "metadata/edit",
271
- lazy: () =>
272
- import(
273
- "../../routes/product-options/product-option-metadata"
274
- ),
275
- },
276
- ],
277
- },
278
- ],
279
- },
280
228
  {
281
229
  path: "/categories",
282
230
  errorElement: <ErrorBoundary />,
@@ -991,6 +939,26 @@ export function getRouteMap({
991
939
  },
992
940
  ],
993
941
  },
942
+ {
943
+ path: "translations",
944
+ errorElement: <ErrorBoundary />,
945
+ element: <Outlet />,
946
+ handle: {
947
+ breadcrumb: () => t("translations.domain"),
948
+ },
949
+ children: [
950
+ {
951
+ path: "",
952
+ lazy: () =>
953
+ import("../../routes/translations/translation-list"),
954
+ },
955
+ {
956
+ path: "edit",
957
+ lazy: () =>
958
+ import("../../routes/translations/translations-edit"),
959
+ },
960
+ ],
961
+ },
994
962
  {
995
963
  path: "regions",
996
964
  errorElement: <ErrorBoundary />,
@@ -1061,6 +1029,10 @@ export function getRouteMap({
1061
1029
  path: "currencies",
1062
1030
  lazy: () => import("../../routes/store/store-add-currencies"),
1063
1031
  },
1032
+ {
1033
+ path: "locales",
1034
+ lazy: () => import("../../routes/store/store-add-locales"),
1035
+ },
1064
1036
  {
1065
1037
  path: "metadata/edit",
1066
1038
  lazy: () => import("../../routes/store/store-metadata"),
@@ -3,6 +3,7 @@ import { sdk } from "../../lib/client"
3
3
 
4
4
  export type FeatureFlags = {
5
5
  view_configurations?: boolean
6
+ translation?: boolean
6
7
  [key: string]: boolean | undefined
7
8
  }
8
9
 
@@ -10,13 +11,16 @@ export const useFeatureFlags = () => {
10
11
  return useQuery<FeatureFlags>({
11
12
  queryKey: ["admin", "feature-flags"],
12
13
  queryFn: async () => {
13
- const response = await sdk.client.fetch<{ feature_flags: FeatureFlags }>("/admin/feature-flags", {
14
- method: "GET",
15
- })
16
-
14
+ const response = await sdk.client.fetch<{ feature_flags: FeatureFlags }>(
15
+ "/admin/feature-flags",
16
+ {
17
+ method: "GET",
18
+ }
19
+ )
20
+
17
21
  return response.feature_flags
18
22
  },
19
23
  staleTime: 5 * 60 * 1000, // Cache for 5 minutes
20
24
  cacheTime: 10 * 60 * 1000, // Keep in cache for 10 minutes
21
25
  })
22
- }
26
+ }