@mercurjs/vendor 2.0.0-canary.0

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 (290) hide show
  1. package/dist/[id]-23D3HY3G.js +444 -0
  2. package/dist/[id]-2VBOAZM4.js +1215 -0
  3. package/dist/[id]-A4FSDRER.js +325 -0
  4. package/dist/[id]-E45G2SDA.js +213 -0
  5. package/dist/[id]-FXKSI52D.js +477 -0
  6. package/dist/[id]-HHZ3BSXV.js +1166 -0
  7. package/dist/[id]-MIV4U5UW.js +137 -0
  8. package/dist/[id]-QSRIPPIP.js +612 -0
  9. package/dist/[id]-RGDXOC7T.js +499 -0
  10. package/dist/[id]-TI2MOR2C.js +377 -0
  11. package/dist/[id]-U5DT2ZLS.js +301 -0
  12. package/dist/[id]-UMFGLDM2.js +354 -0
  13. package/dist/[id]-VTFOP3BF.js +97 -0
  14. package/dist/[id]-ZYF75L6G.js +479 -0
  15. package/dist/[location_id]-4UIEW5KM.js +685 -0
  16. package/dist/[province_id]-ZCHPXXQN.js +205 -0
  17. package/dist/add-KNDQL6YN.js +660 -0
  18. package/dist/add-customer-groups-JA346MTF.js +275 -0
  19. package/dist/add-products-2VB57KXV.js +273 -0
  20. package/dist/add-promotions-KVKEP6EO.js +260 -0
  21. package/dist/add-to-campaign-V6D7JKRS.js +44 -0
  22. package/dist/additional-attributes-E36EZX4V.js +219 -0
  23. package/dist/adjust-inventory-P7AB7VIB.js +228 -0
  24. package/dist/allocate-items-QAS5PZLR.js +529 -0
  25. package/dist/areas-Y7VDWH7G.js +151 -0
  26. package/dist/attributes-UEM2VJKV.js +277 -0
  27. package/dist/breadcrumb-3QTVWXZB.js +27 -0
  28. package/dist/breadcrumb-5OTOCYNL.js +38 -0
  29. package/dist/breadcrumb-6NAAOPIY.js +11 -0
  30. package/dist/breadcrumb-ASB2YCNV.js +25 -0
  31. package/dist/breadcrumb-CIGKLKKS.js +28 -0
  32. package/dist/breadcrumb-EOYLR3IQ.js +22 -0
  33. package/dist/breadcrumb-LENACUAA.js +22 -0
  34. package/dist/breadcrumb-LIXGWUQF.js +44 -0
  35. package/dist/breadcrumb-MOQ7GI3Z.js +27 -0
  36. package/dist/breadcrumb-NCBGPQML.js +23 -0
  37. package/dist/breadcrumb-OVMEC5OZ.js +33 -0
  38. package/dist/breadcrumb-RIXJ5QSX.js +45 -0
  39. package/dist/breadcrumb-TZB6EWNC.js +31 -0
  40. package/dist/breadcrumb-WP34OXGQ.js +23 -0
  41. package/dist/campaigns-PMVKUFEA.js +28 -0
  42. package/dist/categories-CKKIUMYG.js +27 -0
  43. package/dist/chunk-26OOAKQ6.js +18 -0
  44. package/dist/chunk-2C3HUJ3Z.js +222 -0
  45. package/dist/chunk-2F3H6ORE.js +36 -0
  46. package/dist/chunk-2ZFELO2L.js +13 -0
  47. package/dist/chunk-3CK6OINO.js +448 -0
  48. package/dist/chunk-3EF54XFY.js +64 -0
  49. package/dist/chunk-3LPVUPZZ.js +74 -0
  50. package/dist/chunk-3QSRE5LS.js +161 -0
  51. package/dist/chunk-3SIDRPKT.js +185 -0
  52. package/dist/chunk-4F5GP7J7.js +45 -0
  53. package/dist/chunk-4GPAS5GW.js +36 -0
  54. package/dist/chunk-4MFMCZEJ.js +70 -0
  55. package/dist/chunk-4TBDDMFP.js +425 -0
  56. package/dist/chunk-4TLP3TAA.js +34 -0
  57. package/dist/chunk-54TMLQH3.js +9 -0
  58. package/dist/chunk-5NF4OTVV.js +169 -0
  59. package/dist/chunk-66V3GFSW.js +138 -0
  60. package/dist/chunk-6EYGH3TB.js +26 -0
  61. package/dist/chunk-6IJMSVC6.js +16 -0
  62. package/dist/chunk-6YA3C4NB.js +55 -0
  63. package/dist/chunk-7AV5EJJ5.js +29 -0
  64. package/dist/chunk-7RPRNVBS.js +45 -0
  65. package/dist/chunk-A2SY5L5G.js +183 -0
  66. package/dist/chunk-A5DJIOHN.js +4 -0
  67. package/dist/chunk-AIFLEWO2.js +56 -0
  68. package/dist/chunk-ASVMGV2B.js +80 -0
  69. package/dist/chunk-AW77UWCZ.js +363 -0
  70. package/dist/chunk-AYUG34XF.js +84 -0
  71. package/dist/chunk-AYVH6Q5O.js +31 -0
  72. package/dist/chunk-B2RVONU7.js +160 -0
  73. package/dist/chunk-BCU3FKP2.js +18 -0
  74. package/dist/chunk-BDGZ4EQO.js +86 -0
  75. package/dist/chunk-BDZOSMAX.js +23 -0
  76. package/dist/chunk-C6SUTRP2.js +13 -0
  77. package/dist/chunk-CDIZEXFJ.js +145 -0
  78. package/dist/chunk-CFETU5BI.js +261 -0
  79. package/dist/chunk-CMHI2RPL.js +20 -0
  80. package/dist/chunk-CP5IL4P6.js +98 -0
  81. package/dist/chunk-CUO22GTM.js +96 -0
  82. package/dist/chunk-CVVYQI5F.js +41 -0
  83. package/dist/chunk-DARJTN4I.js +60 -0
  84. package/dist/chunk-DB6ANJBO.js +35 -0
  85. package/dist/chunk-DC2K6CFQ.js +86 -0
  86. package/dist/chunk-DDEIH66R.js +123 -0
  87. package/dist/chunk-DY3XQPHC.js +31 -0
  88. package/dist/chunk-DYUTYBAQ.js +67 -0
  89. package/dist/chunk-E3MNEQID.js +24 -0
  90. package/dist/chunk-FBZHM2QZ.js +247 -0
  91. package/dist/chunk-FDZC3TFZ.js +717 -0
  92. package/dist/chunk-FGCKXH45.js +263 -0
  93. package/dist/chunk-FMFVTERD.js +0 -0
  94. package/dist/chunk-FOMEBUX6.js +89 -0
  95. package/dist/chunk-FQERBIVS.js +0 -0
  96. package/dist/chunk-GC33DBKG.js +143 -0
  97. package/dist/chunk-GDMNHL7E.js +144 -0
  98. package/dist/chunk-GTUR4HSV.js +53 -0
  99. package/dist/chunk-H35HHFTB.js +225 -0
  100. package/dist/chunk-HB3BP55W.js +25 -0
  101. package/dist/chunk-HHD2VUED.js +29 -0
  102. package/dist/chunk-HUNGNEPY.js +312 -0
  103. package/dist/chunk-HUZG6A3X.js +127 -0
  104. package/dist/chunk-INNFZYX2.js +183 -0
  105. package/dist/chunk-IQPN4PZJ.js +749 -0
  106. package/dist/chunk-IZ5RG5XI.js +72 -0
  107. package/dist/chunk-J2XP7VRG.js +1080 -0
  108. package/dist/chunk-JHIMVLB2.js +42 -0
  109. package/dist/chunk-JKXAL7WR.js +92 -0
  110. package/dist/chunk-JRTZWK77.js +1764 -0
  111. package/dist/chunk-JVBLYMY2.js +268 -0
  112. package/dist/chunk-JXP5YZ77.js +86 -0
  113. package/dist/chunk-KAZ5BYTQ.js +132 -0
  114. package/dist/chunk-KHHY7EEM.js +267 -0
  115. package/dist/chunk-LAVHRER2.js +17 -0
  116. package/dist/chunk-LQSLDDPT.js +67 -0
  117. package/dist/chunk-LWVBKUUL.js +77 -0
  118. package/dist/chunk-LYUCDASZ.js +115 -0
  119. package/dist/chunk-LZ7QV42C.js +37 -0
  120. package/dist/chunk-MAEP2UCK.js +110 -0
  121. package/dist/chunk-MG4GKUJW.js +31 -0
  122. package/dist/chunk-N2TQXB44.js +1280 -0
  123. package/dist/chunk-N3T24SEK.js +32 -0
  124. package/dist/chunk-NANYVBFI.js +106 -0
  125. package/dist/chunk-NCMUZ6BQ.js +0 -0
  126. package/dist/chunk-NCYTM57J.js +160 -0
  127. package/dist/chunk-NX26QE2O.js +47 -0
  128. package/dist/chunk-NYDJTWRL.js +389 -0
  129. package/dist/chunk-O5LRZEG6.js +253 -0
  130. package/dist/chunk-O6PRBSFL.js +115 -0
  131. package/dist/chunk-OJCDB3N5.js +539 -0
  132. package/dist/chunk-OSFOX7MG.js +176 -0
  133. package/dist/chunk-OVPAOBZB.js +110 -0
  134. package/dist/chunk-PADOWAXM.js +118 -0
  135. package/dist/chunk-PHOCVOZ5.js +9 -0
  136. package/dist/chunk-PKBMQBKP.js +7 -0
  137. package/dist/chunk-PLSJ74T2.js +298 -0
  138. package/dist/chunk-PVZBDWLK.js +41 -0
  139. package/dist/chunk-PWZKFTJS.js +247 -0
  140. package/dist/chunk-PXYDR7WQ.js +48 -0
  141. package/dist/chunk-PYQJ5N25.js +191 -0
  142. package/dist/chunk-Q4UVXS46.js +14 -0
  143. package/dist/chunk-QDPLZDMX.js +17 -0
  144. package/dist/chunk-QSGR43JM.js +30 -0
  145. package/dist/chunk-QUNDGPF7.js +92801 -0
  146. package/dist/chunk-R65A4P4H.js +136 -0
  147. package/dist/chunk-RE7YXVFG.js +128 -0
  148. package/dist/chunk-RETT6WME.js +37 -0
  149. package/dist/chunk-RHKRREUU.js +15 -0
  150. package/dist/chunk-RIILGKYR.js +32 -0
  151. package/dist/chunk-RM5RSDYP.js +353 -0
  152. package/dist/chunk-RNC4NFVK.js +170 -0
  153. package/dist/chunk-RSMZHZI2.js +2078 -0
  154. package/dist/chunk-RXM4B6HR.js +8 -0
  155. package/dist/chunk-S2WEYEQR.js +14 -0
  156. package/dist/chunk-S3PQKKNV.js +49 -0
  157. package/dist/chunk-S5GQ2SES.js +276 -0
  158. package/dist/chunk-SECZTXSU.js +31 -0
  159. package/dist/chunk-SI4ALL7W.js +180 -0
  160. package/dist/chunk-SID3COTK.js +21 -0
  161. package/dist/chunk-SMQT3ZNO.js +8 -0
  162. package/dist/chunk-SOZMJA7V.js +61 -0
  163. package/dist/chunk-TG3TCIL6.js +207 -0
  164. package/dist/chunk-THHRRYRS.js +16 -0
  165. package/dist/chunk-TKGWSUEI.js +0 -0
  166. package/dist/chunk-TTFCO5HU.js +173 -0
  167. package/dist/chunk-TXEPCJEQ.js +430 -0
  168. package/dist/chunk-U2EI2ZLM.js +32 -0
  169. package/dist/chunk-U2ZFCAPX.js +34 -0
  170. package/dist/chunk-U3X4DNV6.js +179 -0
  171. package/dist/chunk-UXKKD4AD.js +437 -0
  172. package/dist/chunk-UYJ65N46.js +261 -0
  173. package/dist/chunk-VDWGP2U6.js +71 -0
  174. package/dist/chunk-VGJTARSA.js +89 -0
  175. package/dist/chunk-VHMGJUYN.js +28 -0
  176. package/dist/chunk-VKC3XKFF.js +283 -0
  177. package/dist/chunk-VKOE5J66.js +31 -0
  178. package/dist/chunk-VOHEQ7B5.js +31 -0
  179. package/dist/chunk-VW56KWO2.js +9 -0
  180. package/dist/chunk-W4KHJ4D6.js +74 -0
  181. package/dist/chunk-W6Y3PPU5.js +73 -0
  182. package/dist/chunk-W6ZVQJYB.js +311 -0
  183. package/dist/chunk-WA3IVAUC.js +123 -0
  184. package/dist/chunk-WHTS4G5K.js +1551 -0
  185. package/dist/chunk-WIYFXWRI.js +30 -0
  186. package/dist/chunk-WPFTRRWV.js +455 -0
  187. package/dist/chunk-WQZ4ONQV.js +6 -0
  188. package/dist/chunk-WS652CCV.js +893 -0
  189. package/dist/chunk-XG4PTPRM.js +0 -0
  190. package/dist/chunk-XRNDVICA.js +85 -0
  191. package/dist/chunk-XXZJISPX.js +48 -0
  192. package/dist/chunk-Y224F4UU.js +81 -0
  193. package/dist/chunk-Y3FR5JC7.js +437 -0
  194. package/dist/chunk-Y4VBOHAP.js +111 -0
  195. package/dist/chunk-Y7QKP6QU.js +35 -0
  196. package/dist/chunk-YVCBMOJG.js +50 -0
  197. package/dist/chunk-Z2WPXJ6J.js +146 -0
  198. package/dist/chunk-ZA2KFUFR.js +19 -0
  199. package/dist/chunk-ZEKV7LGF.js +6 -0
  200. package/dist/chunk-ZFFA36DB.js +186 -0
  201. package/dist/chunk-ZPGWTLF2.js +499 -0
  202. package/dist/chunk-ZVT2QSWR.js +263 -0
  203. package/dist/chunk-ZZ7VKT2S.js +4113 -0
  204. package/dist/collections-TREF67TO.js +63 -0
  205. package/dist/configuration-KWAL2QZ5.js +152 -0
  206. package/dist/configuration-RNWBTRAH.js +205 -0
  207. package/dist/create-7UEEO5TM.js +125 -0
  208. package/dist/create-DTCDJMIT.js +634 -0
  209. package/dist/create-DYDRAY6V.js +622 -0
  210. package/dist/create-EJM5C2XP.js +27 -0
  211. package/dist/create-F7OMPGZV.js +853 -0
  212. package/dist/create-G4UJOJJ6.js +69 -0
  213. package/dist/create-IE6MYOIY.js +170 -0
  214. package/dist/create-L23TGTBH.js +225 -0
  215. package/dist/create-LOBCFTCT.js +583 -0
  216. package/dist/create-MKBBF2V3.js +150 -0
  217. package/dist/create-TFDUNJSI.js +163 -0
  218. package/dist/create-TMTZDKII.js +711 -0
  219. package/dist/create-XGF6DB5F.js +239 -0
  220. package/dist/create-YAAK7JQ3.js +1052 -0
  221. package/dist/create-YPCVTXAK.js +194 -0
  222. package/dist/create-ZU362U3B.js +310 -0
  223. package/dist/customers-4QWR5UOL.js +27 -0
  224. package/dist/edit-2QA5BVOY.js +735 -0
  225. package/dist/edit-47I7VVNB.js +167 -0
  226. package/dist/edit-5BUGSOTL.js +255 -0
  227. package/dist/edit-7LQATDUD.js +193 -0
  228. package/dist/edit-AQAPYMDY.js +260 -0
  229. package/dist/edit-BQLSTFTQ.js +138 -0
  230. package/dist/edit-BYXHU3IG.js +308 -0
  231. package/dist/edit-DG3MY3ZH.js +244 -0
  232. package/dist/edit-J3LD76JS.js +192 -0
  233. package/dist/edit-J6WCPHDS.js +205 -0
  234. package/dist/edit-KCZVZLSZ.js +131 -0
  235. package/dist/edit-LOKLQGM2.js +181 -0
  236. package/dist/edit-MDTTTB33.js +104 -0
  237. package/dist/edit-NFSU2K3O.js +413 -0
  238. package/dist/edit-RHNZWNXD.js +89 -0
  239. package/dist/edit-XU33IVZH.js +204 -0
  240. package/dist/edit-ZMINDMGM.js +116 -0
  241. package/dist/edit-budget-Z5USV462.js +145 -0
  242. package/dist/edit-inventory-item-YFW2AFRD.js +128 -0
  243. package/dist/edit-inventory-item-attributes-IYAMJDTB.js +278 -0
  244. package/dist/fulfillment-SKXAF3BZ.js +545 -0
  245. package/dist/fulfillment-providers-ACERVITQ.js +279 -0
  246. package/dist/home-PP7YYCSB.js +16 -0
  247. package/dist/index.css +6 -0
  248. package/dist/index.d.ts +39 -0
  249. package/dist/index.js +3656 -0
  250. package/dist/inventory-AIRQ2KNS.js +26 -0
  251. package/dist/locations-SQKM7JWN.js +23 -0
  252. package/dist/login-LKFCRHXN.js +35 -0
  253. package/dist/manage-locations-4PQS4QY7.js +195 -0
  254. package/dist/media-PL477QJO.js +703 -0
  255. package/dist/metadata-42MU3H7T.js +60 -0
  256. package/dist/metadata-DIJTVDF7.js +45 -0
  257. package/dist/metadata-NX3LEEB3.js +64 -0
  258. package/dist/metadata-RBDSM567.js +65 -0
  259. package/dist/metadata-VZTWNZPG.js +66 -0
  260. package/dist/metadata-X3XGQ563.js +67 -0
  261. package/dist/no-match-BO2NNLCM.js +33 -0
  262. package/dist/orders-2KHCHNO5.js +59 -0
  263. package/dist/organization-VQXCKHCN.js +233 -0
  264. package/dist/organize-3F5ZUIGB.js +23 -0
  265. package/dist/organize-WPWEPCF7.js +23 -0
  266. package/dist/pages/index.d.ts +1153 -0
  267. package/dist/pages/index.js +198 -0
  268. package/dist/payouts-3BY73LZ3.js +27 -0
  269. package/dist/price-lists-G256JJN7.js +34 -0
  270. package/dist/prices-EW7KBY6R.js +269 -0
  271. package/dist/pricing-3PUJDOZN.js +313 -0
  272. package/dist/product-tags-PI3RENEX.js +80 -0
  273. package/dist/product-types-WJPLJI7H.js +32 -0
  274. package/dist/product-variant-detail-EYTE7PHL.js +377 -0
  275. package/dist/product-variant-edit-PW7W5J5E.js +402 -0
  276. package/dist/products-GSN4I7BT.js +272 -0
  277. package/dist/products-RFYNEY57.js +85 -0
  278. package/dist/promotions-CIZIDQ64.js +31 -0
  279. package/dist/reset-password-OFUSH363.js +299 -0
  280. package/dist/return-reasons-4V2KVSRI.js +52 -0
  281. package/dist/sales-channels-MBWVM3X2.js +184 -0
  282. package/dist/sales-channels-ZKA62EAW.js +156 -0
  283. package/dist/seller-ZFDLKF5Y.js +36 -0
  284. package/dist/settings-NP2IAID5.js +111 -0
  285. package/dist/shipping-profile-7FTHSPY2.js +145 -0
  286. package/dist/shipping-profiles-7R6L65WG.js +43 -0
  287. package/dist/stock-ENMBCZRY.js +502 -0
  288. package/dist/stock-VYDJY46S.js +278 -0
  289. package/dist/tax-regions-V6G6244H.js +87 -0
  290. package/package.json +87 -0
@@ -0,0 +1,502 @@
1
+ import {
2
+ DataGridTogglableNumberCell
3
+ } from "./chunk-RNC4NFVK.js";
4
+ import {
5
+ ProgressBar
6
+ } from "./chunk-QSGR43JM.js";
7
+ import {
8
+ DataGrid,
9
+ DataGridReadonlyCell,
10
+ DataGridSkeleton,
11
+ createDataGridHelper,
12
+ useDataGridDuplicateCell
13
+ } from "./chunk-ZZ7VKT2S.js";
14
+ import "./chunk-IQPN4PZJ.js";
15
+ import {
16
+ castNumber
17
+ } from "./chunk-SMQT3ZNO.js";
18
+ import "./chunk-TKGWSUEI.js";
19
+ import {
20
+ KeyboundForm
21
+ } from "./chunk-U2ZFCAPX.js";
22
+ import {
23
+ RouteFocusModal,
24
+ useRouteModal
25
+ } from "./chunk-3CK6OINO.js";
26
+ import "./chunk-3QSRE5LS.js";
27
+ import {
28
+ Thumbnail
29
+ } from "./chunk-WIYFXWRI.js";
30
+ import "./chunk-LAVHRER2.js";
31
+ import "./chunk-Y7QKP6QU.js";
32
+ import {
33
+ Skeleton
34
+ } from "./chunk-INNFZYX2.js";
35
+ import "./chunk-OSFOX7MG.js";
36
+ import "./chunk-W4KHJ4D6.js";
37
+ import "./chunk-VGJTARSA.js";
38
+ import "./chunk-DYUTYBAQ.js";
39
+ import "./chunk-Y4VBOHAP.js";
40
+ import "./chunk-JKXAL7WR.js";
41
+ import "./chunk-DC2K6CFQ.js";
42
+ import "./chunk-VDWGP2U6.js";
43
+ import "./chunk-RE7YXVFG.js";
44
+ import "./chunk-HUNGNEPY.js";
45
+ import "./chunk-PADOWAXM.js";
46
+ import "./chunk-LWVBKUUL.js";
47
+ import "./chunk-RIILGKYR.js";
48
+ import "./chunk-6EYGH3TB.js";
49
+ import "./chunk-GTUR4HSV.js";
50
+ import {
51
+ useStockLocations
52
+ } from "./chunk-SI4ALL7W.js";
53
+ import "./chunk-ZFFA36DB.js";
54
+ import "./chunk-VHMGJUYN.js";
55
+ import "./chunk-ASVMGV2B.js";
56
+ import {
57
+ useBatchInventoryItemsLocationLevels,
58
+ useProduct
59
+ } from "./chunk-WPFTRRWV.js";
60
+ import "./chunk-A5DJIOHN.js";
61
+ import "./chunk-RHKRREUU.js";
62
+ import "./chunk-ZA2KFUFR.js";
63
+ import "./chunk-Y224F4UU.js";
64
+ import "./chunk-PKBMQBKP.js";
65
+
66
+ // src/pages/products/[id]/stock/index.tsx
67
+ import { AnimatePresence } from "motion/react";
68
+ import { Suspense, useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
69
+ import { useTranslation as useTranslation3 } from "react-i18next";
70
+ import { Await, useParams } from "react-router-dom";
71
+
72
+ // src/pages/products/[id]/stock/product-stock-form/product-stock-form.tsx
73
+ import { zodResolver } from "@hookform/resolvers/zod";
74
+ import { Button, toast, usePrompt } from "@medusajs/ui";
75
+ import { useEffect, useMemo as useMemo2, useRef, useState } from "react";
76
+ import { useForm } from "react-hook-form";
77
+ import { useTranslation as useTranslation2 } from "react-i18next";
78
+
79
+ // src/pages/products/[id]/stock/use-product-stock-columns.tsx
80
+ import { InformationCircle } from "@medusajs/icons";
81
+ import { Switch, Tooltip } from "@medusajs/ui";
82
+ import { useCallback, useMemo } from "react";
83
+ import { useTranslation } from "react-i18next";
84
+
85
+ // src/components/data-grid/components/data-grid-duplicate-cell.tsx
86
+ import { jsx } from "react/jsx-runtime";
87
+ var DataGridDuplicateCell = ({
88
+ duplicateOf,
89
+ children
90
+ }) => {
91
+ const { watchedValue } = useDataGridDuplicateCell({ duplicateOf });
92
+ return /* @__PURE__ */ jsx("div", { className: "bg-ui-bg-base txt-compact-small text-ui-fg-subtle flex size-full cursor-not-allowed items-center justify-between overflow-hidden px-4 py-2.5 outline-none", children: typeof children === "function" ? children({ value: watchedValue }) : children });
93
+ };
94
+
95
+ // src/pages/products/[id]/stock/utils.ts
96
+ function isProductVariant(item) {
97
+ return "product" in item || "product_id" in item;
98
+ }
99
+ function isProductVariantWithInventoryPivot(row) {
100
+ return isProductVariant(row) && Array.isArray(row.inventory_items);
101
+ }
102
+ function getDisabledInventoryRows(variants) {
103
+ const disabled = {};
104
+ const inventoryItemToVariant = {};
105
+ for (const variant of variants) {
106
+ if (!variant.inventory_items) continue;
107
+ for (const item of variant.inventory_items) {
108
+ const existingMapping = inventoryItemToVariant[item.inventory_item_id];
109
+ if (existingMapping && existingMapping.variantId !== variant.id) {
110
+ disabled[item.inventory_item_id] = {
111
+ id: existingMapping.variantId,
112
+ title: existingMapping.title,
113
+ sku: existingMapping.sku
114
+ };
115
+ } else if (!existingMapping) {
116
+ inventoryItemToVariant[item.inventory_item_id] = {
117
+ variantId: variant.id,
118
+ title: variant.title || "",
119
+ sku: variant.sku || ""
120
+ };
121
+ }
122
+ }
123
+ }
124
+ return disabled;
125
+ }
126
+
127
+ // src/pages/products/[id]/stock/use-product-stock-columns.tsx
128
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
129
+ var helper = createDataGridHelper();
130
+ var useProductStockColumns = (locations = [], disabled = {}) => {
131
+ const { t } = useTranslation();
132
+ const getIsDisabled = useCallback(
133
+ (item) => {
134
+ const disabledItem = disabled[item.inventory_item_id];
135
+ const isDisabled = !!disabledItem && disabledItem.id !== item.variant_id;
136
+ if (!isDisabled) {
137
+ return {
138
+ isDisabled: false,
139
+ item: void 0
140
+ };
141
+ }
142
+ return {
143
+ isDisabled,
144
+ item: disabledItem
145
+ };
146
+ },
147
+ [disabled]
148
+ );
149
+ return useMemo(
150
+ () => [
151
+ helper.column({
152
+ id: "title",
153
+ name: "Title",
154
+ header: "Title",
155
+ cell: (context) => {
156
+ const item = context.row.original;
157
+ if (isProductVariant(item)) {
158
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context, children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
159
+ /* @__PURE__ */ jsx2(Thumbnail, { size: "small", src: item.product?.thumbnail }),
160
+ /* @__PURE__ */ jsx2("span", { children: item.title || "-" })
161
+ ] }) });
162
+ }
163
+ const { isDisabled, item: disabledItem } = getIsDisabled(item);
164
+ if (isDisabled) {
165
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context, color: "normal", children: /* @__PURE__ */ jsxs("div", { className: "flex size-full items-center justify-between gap-x-2", children: [
166
+ /* @__PURE__ */ jsx2(
167
+ "span",
168
+ {
169
+ title: item.inventory?.title || void 0,
170
+ className: "text-ui-fg-disabled",
171
+ children: item.inventory?.title || "-"
172
+ }
173
+ ),
174
+ /* @__PURE__ */ jsx2(
175
+ Tooltip,
176
+ {
177
+ content: disabledItem.sku ? t("products.stock.tooltips.alreadyManagedWithSku", {
178
+ title: disabledItem.title,
179
+ sku: disabledItem.sku
180
+ }) : t("products.stock.tooltips.alreadyManaged", {
181
+ title: disabledItem.title
182
+ }),
183
+ children: /* @__PURE__ */ jsx2(InformationCircle, {})
184
+ }
185
+ )
186
+ ] }) });
187
+ }
188
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context, color: "normal", children: item.inventory?.title || "-" });
189
+ },
190
+ disableHiding: true
191
+ }),
192
+ helper.column({
193
+ id: "sku",
194
+ name: "SKU",
195
+ header: "SKU",
196
+ cell: (context) => {
197
+ const item = context.row.original;
198
+ if (isProductVariant(item)) {
199
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context, children: item.sku || "-" });
200
+ }
201
+ const { isDisabled } = getIsDisabled(item);
202
+ if (isDisabled) {
203
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context, color: "normal", children: /* @__PURE__ */ jsx2("span", { className: "text-ui-fg-disabled", children: item.inventory?.sku || "-" }) });
204
+ }
205
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context, color: "normal", children: item.inventory?.sku || "-" });
206
+ },
207
+ disableHiding: true
208
+ }),
209
+ ...locations.map(
210
+ (location) => helper.column({
211
+ id: `location_${location.id}`,
212
+ name: location.name,
213
+ header: location.name,
214
+ field: (context) => {
215
+ const item = context.row.original;
216
+ if (isProductVariant(item)) {
217
+ return null;
218
+ }
219
+ const { isDisabled } = getIsDisabled(item);
220
+ if (isDisabled) {
221
+ return null;
222
+ }
223
+ return `variants.${item.variant_id}.inventory_items.${item.inventory_item_id}.locations.${location.id}`;
224
+ },
225
+ type: "togglable-number",
226
+ cell: (context) => {
227
+ const item = context.row.original;
228
+ if (isProductVariant(item)) {
229
+ return /* @__PURE__ */ jsx2(DataGridReadonlyCell, { context });
230
+ }
231
+ const { isDisabled, item: disabledItem } = getIsDisabled(item);
232
+ if (isDisabled) {
233
+ return /* @__PURE__ */ jsx2(
234
+ DataGridDuplicateCell,
235
+ {
236
+ duplicateOf: `variants.${disabledItem.id}.inventory_items.${item.inventory_item_id}.locations.${location.id}`,
237
+ children: ({ value }) => {
238
+ const { checked, quantity } = value;
239
+ return /* @__PURE__ */ jsxs("div", { className: "flex size-full items-center gap-x-2", children: [
240
+ /* @__PURE__ */ jsx2(
241
+ Switch,
242
+ {
243
+ dir: "ltr",
244
+ className: "shrink-0 cursor-not-allowed rtl:rotate-180",
245
+ tabIndex: -1,
246
+ size: "small",
247
+ checked,
248
+ disabled: true
249
+ }
250
+ ),
251
+ /* @__PURE__ */ jsx2("span", { className: "text-ui-fg-disabled flex size-full items-center justify-end", children: quantity })
252
+ ] });
253
+ }
254
+ }
255
+ );
256
+ }
257
+ return /* @__PURE__ */ jsx2(
258
+ DataGridTogglableNumberCell,
259
+ {
260
+ context,
261
+ disabledToggleTooltip: t(
262
+ "inventory.stock.disabledToggleTooltip"
263
+ ),
264
+ placeholder: t("inventory.stock.placeholder")
265
+ }
266
+ );
267
+ }
268
+ })
269
+ )
270
+ ],
271
+ [locations, getIsDisabled, t]
272
+ );
273
+ };
274
+
275
+ // src/pages/products/[id]/stock/schema.ts
276
+ import { z } from "zod";
277
+ var ProductStockLocationSchema = z.object({
278
+ id: z.string().optional(),
279
+ quantity: z.union([z.number(), z.string()]),
280
+ checked: z.boolean(),
281
+ disabledToggle: z.boolean().optional()
282
+ });
283
+ var ProductStockInventoryItemSchema = z.object({
284
+ locations: z.record(ProductStockLocationSchema)
285
+ });
286
+ var ProductStockVariantSchema = z.object({
287
+ inventory_items: z.record(ProductStockInventoryItemSchema)
288
+ });
289
+ var ProductStockSchema = z.object({
290
+ variants: z.record(ProductStockVariantSchema)
291
+ });
292
+
293
+ // src/pages/products/[id]/stock/product-stock-form/product-stock-form.tsx
294
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
295
+ var ProductStockForm = ({
296
+ variants,
297
+ locations,
298
+ onLoaded
299
+ }) => {
300
+ const { t } = useTranslation2();
301
+ const { handleSuccess, setCloseOnEscape } = useRouteModal();
302
+ const prompt = usePrompt();
303
+ useEffect(() => {
304
+ onLoaded();
305
+ }, [onLoaded]);
306
+ const [isPromptOpen, setIsPromptOpen] = useState(false);
307
+ const form = useForm({
308
+ defaultValues: getDefaultValue(variants, locations),
309
+ resolver: zodResolver(ProductStockSchema)
310
+ });
311
+ const initialValues = useRef(getDefaultValue(variants, locations));
312
+ const disabled = useMemo2(() => getDisabledInventoryRows(variants), [variants]);
313
+ const columns = useProductStockColumns(locations, disabled);
314
+ const { mutateAsync, isPending } = useBatchInventoryItemsLocationLevels();
315
+ const onSubmit = form.handleSubmit(async (data) => {
316
+ const payload = {
317
+ create: [],
318
+ update: [],
319
+ delete: [],
320
+ force: true
321
+ };
322
+ for (const [variantId, variant] of Object.entries(data.variants)) {
323
+ for (const [inventory_item_id, item] of Object.entries(
324
+ variant.inventory_items
325
+ )) {
326
+ for (const [location_id, level] of Object.entries(item.locations)) {
327
+ if (level.id) {
328
+ const wasChecked = initialValues.current?.variants?.[variantId]?.inventory_items?.[inventory_item_id]?.locations?.[location_id]?.checked;
329
+ if (wasChecked && !level.checked) {
330
+ payload.delete.push(level.id);
331
+ } else {
332
+ const newQuantity = level.quantity !== "" ? castNumber(level.quantity) : 0;
333
+ const originalQuantity = initialValues.current?.variants?.[variantId]?.inventory_items?.[inventory_item_id]?.locations?.[location_id]?.quantity;
334
+ if (newQuantity !== originalQuantity) {
335
+ payload.update.push({
336
+ inventory_item_id,
337
+ location_id,
338
+ stocked_quantity: newQuantity
339
+ });
340
+ }
341
+ }
342
+ }
343
+ if (!level.id && level.quantity !== "") {
344
+ payload.create.push({
345
+ inventory_item_id,
346
+ location_id,
347
+ stocked_quantity: castNumber(level.quantity)
348
+ });
349
+ }
350
+ }
351
+ }
352
+ }
353
+ if (payload.delete.length > 0) {
354
+ setIsPromptOpen(true);
355
+ const confirm = await prompt({
356
+ title: t("general.areYouSure"),
357
+ description: t("inventory.stock.disablePrompt", {
358
+ count: payload.delete.length
359
+ }),
360
+ confirmText: t("actions.continue"),
361
+ cancelText: t("actions.cancel"),
362
+ variant: "confirmation"
363
+ });
364
+ setIsPromptOpen(false);
365
+ if (!confirm) {
366
+ return;
367
+ }
368
+ }
369
+ await mutateAsync(payload, {
370
+ onSuccess: () => {
371
+ toast.success(t("inventory.stock.successToast"));
372
+ handleSuccess();
373
+ },
374
+ onError: (error) => {
375
+ toast.error(error.message);
376
+ }
377
+ });
378
+ });
379
+ return /* @__PURE__ */ jsx3(RouteFocusModal.Form, { form, children: /* @__PURE__ */ jsxs2(KeyboundForm, { onSubmit, className: "flex h-full flex-col", children: [
380
+ /* @__PURE__ */ jsx3(RouteFocusModal.Header, {}),
381
+ /* @__PURE__ */ jsx3(RouteFocusModal.Body, { className: "flex-1", children: /* @__PURE__ */ jsx3(
382
+ DataGrid,
383
+ {
384
+ state: form,
385
+ columns,
386
+ data: variants,
387
+ getSubRows,
388
+ onEditingChange: (editing) => setCloseOnEscape(!editing),
389
+ disableInteractions: isPending || isPromptOpen,
390
+ multiColumnSelection: true
391
+ }
392
+ ) }),
393
+ /* @__PURE__ */ jsx3(RouteFocusModal.Footer, { children: /* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-end gap-2", children: [
394
+ /* @__PURE__ */ jsx3(RouteFocusModal.Close, { asChild: true, children: /* @__PURE__ */ jsx3(Button, { variant: "secondary", size: "small", type: "button", children: t("actions.cancel") }) }),
395
+ /* @__PURE__ */ jsx3(Button, { type: "submit", size: "small", isLoading: isPending, children: t("actions.save") })
396
+ ] }) })
397
+ ] }) });
398
+ };
399
+ function getSubRows(row) {
400
+ if (isProductVariantWithInventoryPivot(row)) {
401
+ return row.inventory_items;
402
+ }
403
+ }
404
+ function getDefaultValue(variants, locations) {
405
+ return {
406
+ variants: variants?.reduce(
407
+ (variantAcc, variant) => {
408
+ const inventoryItems = variant.inventory_items?.reduce(
409
+ (itemAcc, item) => {
410
+ const locationsMap = locations.reduce((locationAcc, location) => {
411
+ const level = item.inventory?.location_levels?.find(
412
+ (level2) => level2.location_id === location.id
413
+ );
414
+ locationAcc[location.id] = {
415
+ id: level?.id,
416
+ quantity: level?.stocked_quantity !== void 0 ? level?.stocked_quantity : "",
417
+ checked: !!level,
418
+ disabledToggle: (level?.incoming_quantity || 0) > 0 || (level?.reserved_quantity || 0) > 0
419
+ };
420
+ return locationAcc;
421
+ }, {});
422
+ itemAcc[item.inventory_item_id] = { locations: locationsMap };
423
+ return itemAcc;
424
+ },
425
+ {}
426
+ );
427
+ variantAcc[variant.id] = { inventory_items: inventoryItems || {} };
428
+ return variantAcc;
429
+ },
430
+ {}
431
+ )
432
+ };
433
+ }
434
+
435
+ // src/pages/products/[id]/stock/index.tsx
436
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
437
+ var Component = () => {
438
+ const { t } = useTranslation3();
439
+ const { id } = useParams();
440
+ const { product, isLoading: isProductLoading } = useProduct(id);
441
+ const { stock_locations, isLoading: isStockLoading } = useStockLocations();
442
+ const allVariants = product?.variants?.map((variant) => ({
443
+ ...variant,
444
+ inventory_items: variant.inventory_items?.map((item) => ({
445
+ ...item,
446
+ inventory: item.inventory
447
+ }))
448
+ }));
449
+ const [isLoading, setIsLoading] = useState2(false);
450
+ const timeoutRef = useRef2();
451
+ useEffect2(() => {
452
+ timeoutRef.current = setTimeout(() => {
453
+ setIsLoading(true);
454
+ }, 200);
455
+ return () => {
456
+ if (timeoutRef.current) {
457
+ clearTimeout(timeoutRef.current);
458
+ }
459
+ };
460
+ }, []);
461
+ const onLoaded = () => {
462
+ if (timeoutRef.current) {
463
+ clearTimeout(timeoutRef.current);
464
+ }
465
+ setIsLoading(false);
466
+ };
467
+ return /* @__PURE__ */ jsxs3("div", { children: [
468
+ /* @__PURE__ */ jsx4("div", { className: "fixed inset-x-0 top-0 z-50 h-1", children: /* @__PURE__ */ jsx4(AnimatePresence, { children: isLoading || isProductLoading || isStockLoading ? /* @__PURE__ */ jsx4(ProgressBar, { duration: 5 }) : null }) }),
469
+ /* @__PURE__ */ jsxs3(RouteFocusModal, { children: [
470
+ /* @__PURE__ */ jsx4(RouteFocusModal.Title, { asChild: true, children: /* @__PURE__ */ jsx4("span", { className: "sr-only", children: t("products.stock.heading") }) }),
471
+ /* @__PURE__ */ jsx4(RouteFocusModal.Description, { asChild: true, children: /* @__PURE__ */ jsx4("span", { className: "sr-only", children: t("products.stock.description") }) }),
472
+ /* @__PURE__ */ jsx4(Suspense, { fallback: /* @__PURE__ */ jsx4(ProductStockFallback, {}), children: /* @__PURE__ */ jsx4(Await, { resolve: { allVariants, locations: stock_locations }, children: () => {
473
+ return /* @__PURE__ */ jsx4(
474
+ ProductStockForm,
475
+ {
476
+ variants: allVariants || [],
477
+ locations: stock_locations || [],
478
+ onLoaded
479
+ }
480
+ );
481
+ } }) })
482
+ ] })
483
+ ] });
484
+ };
485
+ var ProductStockFallback = () => {
486
+ return /* @__PURE__ */ jsx4("div", { className: "relative flex size-full flex-col items-center justify-center divide-y", children: /* @__PURE__ */ jsxs3("div", { className: "flex size-full flex-col divide-y", children: [
487
+ /* @__PURE__ */ jsx4("div", { className: "px-4 py-2", children: /* @__PURE__ */ jsx4(Skeleton, { className: "h-7 w-7" }) }),
488
+ /* @__PURE__ */ jsx4("div", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ jsx4(
489
+ DataGridSkeleton,
490
+ {
491
+ columns: Array.from({ length: 10 })
492
+ }
493
+ ) }),
494
+ /* @__PURE__ */ jsxs3("div", { className: "bg-ui-bg-base flex items-center justify-end gap-x-2 p-4", children: [
495
+ /* @__PURE__ */ jsx4(Skeleton, { className: "h-7 w-[59px]" }),
496
+ /* @__PURE__ */ jsx4(Skeleton, { className: "h-7 w-[46px]" })
497
+ ] })
498
+ ] }) });
499
+ };
500
+ export {
501
+ Component
502
+ };