@fayz-ai/storefront 0.87.0 → 0.88.1
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.
- package/dist/CheckoutPage-NZP33IXA.js +12 -0
- package/dist/{CheckoutPage-4MFKLBEI.js.map → CheckoutPage-NZP33IXA.js.map} +1 -1
- package/dist/MyPurchasesPage-UNY743B3.js +11 -0
- package/dist/{MyPurchasesPage-F25MIFXT.js.map → MyPurchasesPage-UNY743B3.js.map} +1 -1
- package/dist/OrderConfirmationPage-76MLK2XU.js +10 -0
- package/dist/{OrderConfirmationPage-SOQDD767.js.map → OrderConfirmationPage-76MLK2XU.js.map} +1 -1
- package/dist/{chunk-EFHQ5MAJ.js → chunk-27C7DVHW.js} +3 -3
- package/dist/{chunk-EFHQ5MAJ.js.map → chunk-27C7DVHW.js.map} +1 -1
- package/dist/{chunk-NS6UPIJ3.js → chunk-3JAOGX7M.js} +3 -3
- package/dist/{chunk-NS6UPIJ3.js.map → chunk-3JAOGX7M.js.map} +1 -1
- package/dist/{chunk-YCAWAON6.js → chunk-4TSHGV4W.js} +15 -8
- package/dist/chunk-4TSHGV4W.js.map +1 -0
- package/dist/{chunk-RJUEUMR6.js → chunk-6MA7YLPR.js} +4 -4
- package/dist/{chunk-RJUEUMR6.js.map → chunk-6MA7YLPR.js.map} +1 -1
- package/dist/{chunk-IUP5SDTX.js → chunk-EJUFMPSI.js} +5 -5
- package/dist/{chunk-IUP5SDTX.js.map → chunk-EJUFMPSI.js.map} +1 -1
- package/dist/{chunk-YDZU2SZL.js → chunk-EVQYGOB2.js} +4 -4
- package/dist/{chunk-YDZU2SZL.js.map → chunk-EVQYGOB2.js.map} +1 -1
- package/dist/{chunk-Z5JT7T4I.js → chunk-F3JV7A2A.js} +8 -8
- package/dist/{chunk-Z5JT7T4I.js.map → chunk-F3JV7A2A.js.map} +1 -1
- package/dist/{chunk-SLJ4BRXD.js → chunk-GLLGH7FO.js} +3 -3
- package/dist/{chunk-SLJ4BRXD.js.map → chunk-GLLGH7FO.js.map} +1 -1
- package/dist/{chunk-OOQRYH3N.js → chunk-IEIDP37T.js} +6 -6
- package/dist/{chunk-OOQRYH3N.js.map → chunk-IEIDP37T.js.map} +1 -1
- package/dist/{chunk-PSDR5TZD.js → chunk-ILFYNKT2.js} +5 -2
- package/dist/chunk-ILFYNKT2.js.map +1 -0
- package/dist/{chunk-Z2NKBC42.js → chunk-KYFGJZSN.js} +4 -4
- package/dist/{chunk-Z2NKBC42.js.map → chunk-KYFGJZSN.js.map} +1 -1
- package/dist/{chunk-G4WCU526.js → chunk-SY7A4FMH.js} +12 -12
- package/dist/{chunk-G4WCU526.js.map → chunk-SY7A4FMH.js.map} +1 -1
- package/dist/{chunk-C4XATNI2.js → chunk-UHYQNPXO.js} +3 -3
- package/dist/{chunk-C4XATNI2.js.map → chunk-UHYQNPXO.js.map} +1 -1
- package/dist/{chunk-2JMPPAXL.js → chunk-ZHR5TQHW.js} +5 -5
- package/dist/{chunk-2JMPPAXL.js.map → chunk-ZHR5TQHW.js.map} +1 -1
- package/dist/host.js +4 -4
- package/dist/index.js +22 -22
- package/dist/locales/messages.d.ts +1 -0
- package/dist/locales/messages.d.ts.map +1 -1
- package/dist/render.js +9 -9
- package/dist/tanstack.js +8 -8
- package/dist/views/CheckoutPage.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/CheckoutPage-4MFKLBEI.js +0 -12
- package/dist/MyPurchasesPage-F25MIFXT.js +0 -11
- package/dist/OrderConfirmationPage-SOQDD767.js +0 -10
- package/dist/chunk-PSDR5TZD.js.map +0 -1
- package/dist/chunk-YCAWAON6.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { accountSectionPath } from './chunk-DVQHKNNX.js';
|
|
2
|
-
import { useSessionStore, TID, signOutCustomer } from './chunk-
|
|
3
|
-
import { useStorefrontConfig, Link } from './chunk-
|
|
2
|
+
import { useSessionStore, TID, signOutCustomer } from './chunk-27C7DVHW.js';
|
|
3
|
+
import { useStorefrontConfig, Link } from './chunk-ILFYNKT2.js';
|
|
4
4
|
import { User, Package, MapPin, CreditCard, ShieldCheck, LogOut, Check, XCircle, RotateCcw, Clock, PackageCheck, Truck, ChefHat, Store, Bike } from 'lucide-react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -263,5 +263,5 @@ function OrderTrackingTimeline({ order, compact = false }) {
|
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
export { CustomerAccountShell, OrderTrackingTimeline, financialStatusBadge, isPaid };
|
|
266
|
-
//# sourceMappingURL=chunk-
|
|
267
|
-
//# sourceMappingURL=chunk-
|
|
266
|
+
//# sourceMappingURL=chunk-6MA7YLPR.js.map
|
|
267
|
+
//# sourceMappingURL=chunk-6MA7YLPR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/account/CustomerAccountShell.tsx","../src/data/order-status.ts","../src/components/order/OrderTrackingTimeline.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;;AAwBA,IAAM,SAAA,GAAY;AAAA,EAChB,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,MAAM,IAAA,EAAK;AAAA,EAC7C,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,EACrD,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,cAAA,EAAa,MAAM,MAAA,EAAO;AAAA,EACpD,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,MAAM,UAAA;AAC/C,CAAA;AAEO,SAAS,qBAAqB,EAAE,KAAA,EAAO,UAAU,MAAA,EAAQ,QAAA,EAAU,UAAS,EAA8B;AAC/G,EAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,EAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,EAAA,MAAM,WAAA,GAAc,QAAQ,IAAA,IAAQ,OAAA,CAAQ,OAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,SAAA;AACpE,EAAA,MAAM,YAAA,GAAe,QAAQ,KAAA,IAAS,0BAAA;AAEtC,EAAA,4BACG,MAAA,EAAA,EAAK,aAAA,EAAa,GAAA,CAAI,oBAAA,EAAsB,WAAU,qCAAA,EACrD,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,MAAA,CAAO,IAAA,EAAK,CAAA;AAAA,wBACtE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8CAAA,EAAgD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACnE,QAAA,oBAAY,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,QAAA,EAAS;AAAA,OAAA,EAC3E,CAAA;AAAA,0BACC,IAAA,EAAA,EAAK,EAAA,EAAI,OAAO,WAAA,EAAa,SAAA,EAAU,oEAAmE,QAAA,EAAA,kBAAA,EAE3G;AAAA,KAAA,EACF,CAAA;AAAA,oBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,OAAA,EAAA,EAAM,WAAU,qCAAA,EACf,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8FAAA,EACZ,QAAA,EAAA,WAAA,CAAY,MAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY,EACvC,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,4BACnD,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,YAAA,EAAa;AAAA,WAAA,EACtE;AAAA,SAAA,EACF,CAAA;AAAA,wBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAa,GAAA,CAAI,mBAAA,EAAqB,SAAA,EAAU,gBAAA,EAAiB,YAAA,EAAW,oBAAA,EAC9E,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AACvB,UAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,UAAA,MAAM,QAAA,GAAW,KAAK,EAAA,KAAO,MAAA;AAC7B,UAAA,uBACE,IAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cAEC,EAAA,EAAI,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AAAA,cAC9B,gBAAc,IAAA,CAAK,EAAA;AAAA,cACnB,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,cAGlC,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,gBAAA,IAAI,CAAC,QAAA,EAAU;AACf,gBAAA,KAAA,CAAM,cAAA,EAAe;AACrB,gBAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA,cAClB,CAAA;AAAA,cACA,SAAA,EAAW,CAAA,iGAAA,EACT,QAAA,GAAW,4BAAA,GAA+B,4DAC5C,CAAA,CAAA;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,SAAA,EAAU,CAAA;AAAA,gBACzB,IAAA,CAAK;AAAA;AAAA,aAAA;AAAA,YAhBD,IAAA,CAAK;AAAA,WAiBZ;AAAA,QAEJ,CAAC,CAAA,EACH,CAAA;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,WAAA,EAAA,EAAY,WAAU,sBAAA,EAAuB,CAAA;AAAA,YAAE;AAAA,WAAA,EAElD,CAAA;AAAA,0BACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,MAAA,EAAO,QAAA,EAAA,gFAAA,EAAwE;AAAA,SAAA,EAC9F,CAAA;AAAA,wBAEA,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,eAAa,GAAA,CAAI,OAAA;AAAA,YACjB,OAAA,EAAS,MAAM,KAAK,eAAA,EAAgB;AAAA,YACpC,SAAA,EAAU,wJAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA;AAEhC,OAAA,EACF,CAAA;AAAA,sBAEA,GAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAW,QAAA,EAAS;AAAA,KAAA,EACzC;AAAA,GAAA,EACF,CAAA;AAEJ;;;AC7GA,IAAM,SAAA,GAAoE;AAAA,EACxE,OAAA,EAAS,EAAE,KAAA,EAAO,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,EAC9C,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAM,UAAA,EAAW;AAAA,EACxC,cAAA,EAAgB,EAAE,KAAA,EAAO,mBAAA,EAAqB,MAAM,SAAA,EAAU;AAAA,EAC9D,kBAAA,EAAoB,EAAE,KAAA,EAAO,0BAAA,EAA4B,MAAM,UAAA,EAAW;AAAA,EAC1E,QAAA,EAAU,EAAE,KAAA,EAAO,aAAA,EAAe,MAAM,UAAA,EAAW;AAAA,EACnD,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAA,EAAa,MAAM,UAAA;AACtC,CAAA;AAKA,IAAM,UAAA,GAAmC;AAAA,EACvC,QAAA,EAAU,0EAAA;AAAA,EACV,OAAA,EAAS,oEAAA;AAAA,EACT,QAAA,EAAU;AACZ,CAAA;AAIO,SAAS,qBAAqB,MAAA,EAA+D;AAClG,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAM,CAAA,IAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAM,SAAA,EAAkB;AAC5E,EAAA,OAAO,EAAE,OAAO,KAAA,CAAM,KAAA,EAAO,WAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,EAAE;AACjE;AAEO,SAAS,OAAO,MAAA,EAAkC;AACvD,EAAA,OAAO,MAAA,KAAW,UAAU,MAAA,KAAW,gBAAA;AACzC;AAEO,SAAS,WAAW,MAAA,EAAkC;AAC3D,EAAA,OAAO,MAAA,KAAW,cAAc,MAAA,KAAW,oBAAA;AAC7C;ACbA,SAAS,cAAc,KAAA,EAA8B;AACnD,EAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,EAAA,MAAM,MAAA,GAAS,MAAM,eAAA,KAAoB,QAAA;AACzC,EAAA,MAAM,QAAA,GAAyB;AAAA,IAC7B,EAAA,EAAI,UAAA;AAAA,IAAY,KAAA,EAAO,iBAAA;AAAA,IAAmB,WAAA,EAAa,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IAAI,KAAA,EAAO,UAAA;AAAA,IAAY,IAAA,EAAM;AAAA,GAC3G;AACA,EAAA,IAAI,KAAA,KAAU,UAAA,IAAc,KAAA,KAAU,WAAA,EAAa;AACjD,IAAA,MAAM,WAAW,UAAA,CAAW,KAAA,CAAM,eAAe,CAAA,IAAK,MAAM,eAAA,KAAoB,QAAA;AAChF,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA;AAAA,QACE,EAAA,EAAI,QAAA;AAAA,QACJ,KAAA,EAAO,KAAA,KAAU,UAAA,GAAa,iBAAA,GAAoB,kBAAA;AAAA,QAClD,WAAA,EAAa,CAAC,KAAA,CAAM,YAAA,EAAc,QAAA,GAAW,iBAAA,GAAoB,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,IAC5F,6BAAA;AAAA,QACL,KAAA,EAAO,WAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR,KACF;AAAA,EACF;AACA,EAAA,MAAM,IAAA,GAAO,EAAE,GAAA,EAAK,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAG,SAAA,EAAW,CAAA,EAAE,CAAE,KAAK,CAAA,IAAK,CAAA;AAClF,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAiC,IAAA,GAAO,OAAO,UAAA,GAAa,IAAA,KAAS,OAAO,SAAA,GAAY,SAAA;AACvG,EAAA,OAAO;AAAA,IACL,EAAE,GAAG,QAAA,EAAU,KAAA,EAAO,IAAA,KAAS,CAAA,GAAI,SAAA,GAAY,UAAA,EAAY,WAAA,EAAa,IAAA,KAAS,CAAA,GAAI,2BAAA,GAA8B,SAAS,WAAA,EAAY;AAAA,IACxI,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,2BAAA,EAA6B,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,OAAA,EAAQ;AAAA,IAChH;AAAA,MACE,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,SAAS,sBAAA,GAAyB,mBAAA;AAAA,MACzC,WAAA,EAAa,SAAS,iBAAA,GAAoB,sBAAA;AAAA,MAC1C,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,MACd,IAAA,EAAM,SAAS,KAAA,GAAQ;AAAA,KACzB;AAAA,IACA,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,SAAS,UAAA,GAAa,UAAA,EAAY,WAAA,EAAa,cAAA,EAAgB,OAAO,IAAA,KAAS,CAAA,GAAI,UAAA,GAAa,SAAA,EAAW,MAAM,YAAA;AAAa,GAC1J;AACF;AAEA,SAAS,mBAAmB,KAAA,EAA8B;AACxD,EAAA,IAAI,KAAA,CAAM,aAAA,EAAe,OAAO,aAAA,CAAc,KAAK,CAAA;AACnD,EAAA,MAAM,QAAA,GAAyB;AAAA,IAC7B,EAAA,EAAI,UAAA;AAAA,IACJ,KAAA,EAAO,iBAAA;AAAA,IACP,WAAA,EAAa,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IAClC,KAAA,EAAO,UAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAGA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,WAAA,IAAe,KAAA,CAAM,oBAAoB,QAAA,EAAU;AACtE,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,eAAe,CAAA;AACjD,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA;AAAA,QACE,EAAA,EAAI,SAAA;AAAA,QACJ,KAAA,EAAO,kBAAA;AAAA,QACP,WAAA,EAAa,CAAC,KAAA,CAAM,YAAA,EAAc,QAAA,GAAW,iBAAA,GAAoB,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,IAC5F,2BAAA;AAAA,QACL,KAAA,EAAO,WAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR,KACF;AAAA,EACF;AACA,EAAA,IAAI,UAAA,CAAW,KAAA,CAAM,eAAe,CAAA,EAAG;AACrC,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,oBAAA,EAAsB,aAAa,mBAAA,EAAqB,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,KAAA,EAAM;AAAA,MAC/G;AAAA,QACE,EAAA,EAAI,QAAA;AAAA,QACJ,KAAA,EAAO,KAAA,CAAM,eAAA,KAAoB,UAAA,GAAa,aAAA,GAAgB,mBAAA;AAAA,QAC9D,WAAA,EAAa,4BAAA;AAAA,QACb,KAAA,EAAO,WAAA;AAAA,QACP,IAAA,EAAM;AAAA;AACR,KACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA;AACzC,EAAA,MAAM,kBAAA,GAAqB,MAAM,iBAAA,KAAsB,qBAAA;AACvD,EAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,KAAsB,WAAA;AAE9C,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,OAAO,oBAAA,GAAuB,sBAAA;AAAA;AAAA,MAErC,WAAA,EAAa,OAAO,mBAAA,GAAsB,wBAAA;AAAA,MAC1C,KAAA,EAAO,OAAO,UAAA,GAAa,SAAA;AAAA,MAC3B,IAAA,EAAM,OAAO,KAAA,GAAQ;AAAA,KACvB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,WAAA;AAAA,MACJ,KAAA,EAAO,kBAAA;AAAA,MACP,WAAA,EAAa,OAAO,oBAAA,GAAuB,+BAAA;AAAA,MAC3C,KAAA,EAAO,SAAA,IAAa,kBAAA,GAAqB,UAAA,GAAa,OAAO,SAAA,GAAY,SAAA;AAAA,MACzE,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO,SAAA,GAAY,gBAAA,GAAmB,kBAAA,GAAqB,eAAA,GAAkB,SAAA;AAAA,MAC7E,WAAA,EAAa,SAAA,GAAY,sBAAA,GAAyB,kBAAA,GAAqB,sBAAA,GAAyB,kBAAA;AAAA,MAChG,KAAA,EAAO,SAAA,GAAY,UAAA,GAAa,kBAAA,GAAqB,SAAA,GAAY,SAAA;AAAA,MACjE,IAAA,EAAM,SAAA,IAAa,kBAAA,GAAqB,KAAA,GAAQ;AAAA;AAClD,GACF;AACF;AAEA,IAAM,SAAA,GAAoC;AAAA,EACxC,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAIO,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAO,OAAA,GAAU,OAAM,EAAwC;AACrG,EAAA,MAAM,KAAA,GAAQ,mBAAmB,KAAK,CAAA;AAEtC,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,eAAa,GAAA,CAAI,aAAA;AAAA,MACjB,SAAA,EAAW,CAAA,KAAA,EAAQ,OAAA,GAAU,OAAA,GAAU,OAAO,IAAI,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA,IAAK,gBAAgB,CAAA,CAAA;AAAA,MAC7F,YAAA,EAAW,0BAAA;AAAA,MAEV,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,QAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,QAAA,MAAM,SAAA,GAAY,KAAK,KAAA,KAAU,WAAA;AACjC,QAAA,MAAM,IAAA,GAAO,KAAK,KAAA,KAAU,UAAA;AAK5B,QAAA,MAAM,OAAA,GAAU,KAAK,KAAA,KAAU,SAAA;AAC/B,QAAA,MAAM,SAAS,IAAA,IAAQ,OAAA;AACvB,QAAA,uBACEA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,aAAA,EAAa,GAAA,CAAI,iBAAA,CAAkB,IAAA,CAAK,EAAE,CAAA;AAAA,YAC1C,cAAY,IAAA,CAAK,KAAA;AAAA,YACjB,SAAA,EAAW;AAAA,cACT,wCAAA;AAAA,cACA,SAAA,GAGI,yCAAA,GACA,MAAA,GACE,gCAAA,GACA,mCAAA;AAAA,cACN,UAAU,SAAA,GAAY;AAAA,aACxB,CAAE,KAAK,GAAG,CAAA;AAAA,YAEV,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW;AAAA,oBACT,8DAAA;AAAA,oBACA,SAAA,GACI,+DAAA,GACA,IAAA,GACE,mDAAA,GACA,UACE,2CAAA,GACA;AAAA,mBACV,CAAE,KAAK,GAAG,CAAA;AAAA,kBACV,aAAA,EAAW,IAAA;AAAA,kBAEX,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,eAChC;AAAA,8BACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAId,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kDAAA,EAAoD,eAAK,KAAA,EAAM,CAAA;AAAA,gCAC/EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAmD,eAAK,WAAA,EAAY;AAAA,eAAA,EACtF;AAAA,aAAA,EACF;AAAA,WAAA;AAAA,UAtCK,IAAA,CAAK;AAAA,SAuCZ;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ","file":"chunk-RJUEUMR6.js","sourcesContent":["import React from 'react'\nimport { CreditCard, LogOut, MapPin, Package, ShieldCheck, User } from 'lucide-react'\nimport { signOutCustomer } from '../../data/auth'\nimport { useStorefrontConfig } from '../../document/config'\nimport { Link } from '../../app/router'\nimport { useSessionStore } from '../../stores/session.store'\nimport { TID } from '../../lib/testids'\nimport { accountSectionPath, type AccountSection } from './section'\n\nexport type { AccountSection }\n\ninterface CustomerAccountShellProps {\n title: string\n subtitle?: string\n active: AccountSection\n /**\n * Switch the active section in-place instead of navigating. Optional, and\n * omitting it is the normal case: the menu is made of real links to\n * `/account?section=…`, so it works on any page that mounts this shell.\n */\n onSelect?: (section: AccountSection) => void\n children: React.ReactNode\n}\n\nconst menuItems = [\n { id: 'profile', label: 'Perfil', icon: User },\n { id: 'orders', label: 'Meus pedidos', icon: Package },\n { id: 'addresses', label: 'Endereços', icon: MapPin },\n { id: 'payments', label: 'Pagamentos', icon: CreditCard },\n] as const\n\nexport function CustomerAccountShell({ title, subtitle, active, onSelect, children }: CustomerAccountShellProps) {\n const config = useStorefrontConfig()\n const session = useSessionStore()\n const displayName = session.name || session.email?.split('@')[0] || 'Cliente'\n const displayEmail = session.email || 'Conta criada no checkout'\n\n return (\n <main data-testid={TID.customerAccountShell} className=\"mx-auto max-w-6xl px-4 py-8 sm:px-6\">\n <div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n <div>\n <p className=\"text-sm font-medium text-muted-foreground\">{config.name}</p>\n <h1 className=\"sf-heading text-3xl font-bold tracking-tight\">{title}</h1>\n {subtitle && <p className=\"mt-1 text-sm text-muted-foreground\">{subtitle}</p>}\n </div>\n <Link to={config.catalogPath} className=\"rounded-lg border px-4 py-2 text-sm font-semibold hover:bg-muted\">\n Voltar à loja\n </Link>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-[260px_minmax(0,1fr)]\">\n <aside className=\"h-fit rounded-xl border bg-card p-4\">\n <div className=\"flex items-center gap-3 border-b pb-4\">\n <div className=\"flex h-11 w-11 items-center justify-center rounded-full bg-primary/10 font-bold text-primary\">\n {displayName.slice(0, 1).toUpperCase()}\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate font-semibold\">{displayName}</p>\n <p className=\"truncate text-xs text-muted-foreground\">{displayEmail}</p>\n </div>\n </div>\n\n <nav data-testid={TID.customerAccountMenu} className=\"mt-4 space-y-1\" aria-label=\"Área do cliente\">\n {menuItems.map((item) => {\n const Icon = item.icon\n const selected = item.id === active\n return (\n <Link\n key={item.id}\n to={accountSectionPath(item.id)}\n data-section={item.id}\n aria-current={selected ? 'page' : undefined}\n // A real href always, so the menu still works when the page\n // that mounted the shell has no in-place handler to offer.\n onClick={(event) => {\n if (!onSelect) return\n event.preventDefault()\n onSelect(item.id)\n }}\n className={`flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left text-sm font-semibold transition ${\n selected ? 'bg-primary/10 text-primary' : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n {item.label}\n </Link>\n )\n })}\n </nav>\n\n <div className=\"mt-4 rounded-lg bg-muted/40 p-3 text-xs text-muted-foreground\">\n <div className=\"flex items-center gap-2 font-semibold text-foreground\">\n <ShieldCheck className=\"h-4 w-4 text-primary\" />\n Conta protegida\n </div>\n <p className=\"mt-1\">Pedidos, pagamentos e endereços ficam organizados para próximas compras.</p>\n </div>\n\n <button\n type=\"button\"\n data-testid={TID.signout}\n onClick={() => void signOutCustomer()}\n className=\"mt-4 flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-semibold text-muted-foreground transition hover:bg-muted hover:text-foreground\"\n >\n <LogOut className=\"h-4 w-4\" />\n Sair\n </button>\n </aside>\n\n <section className=\"min-w-0\">{children}</section>\n </div>\n </main>\n )\n}\n","import type { FinancialStatus } from '@fayz-ai/shop/types'\n\ntype Tone = 'positive' | 'pending' | 'negative'\n\nconst FINANCIAL: Record<FinancialStatus, { label: string; tone: Tone }> = {\n pending: { label: 'Pendente', tone: 'pending' },\n paid: { label: 'Pago', tone: 'positive' },\n partially_paid: { label: 'Parcialmente pago', tone: 'pending' },\n partially_refunded: { label: 'Parcialmente reembolsado', tone: 'negative' },\n refunded: { label: 'Reembolsado', tone: 'negative' },\n voided: { label: 'Cancelado', tone: 'negative' },\n}\n\n// Tinted, not pastel: a -100 pill with -800 text read as a sticker on a dark\n// store. A low-alpha fill takes the card's own surface, and the -500/-600 text\n// holds up on light and dark alike.\nconst TONE_CLASS: Record<Tone, string> = {\n positive: 'bg-emerald-500/15 text-emerald-600 ring-1 ring-inset ring-emerald-500/30',\n pending: 'bg-amber-500/15 text-amber-600 ring-1 ring-inset ring-amber-500/30',\n negative: 'bg-destructive/15 text-destructive ring-1 ring-inset ring-destructive/30',\n}\n\n/** One source of truth for a financial-status pill — label + color by status,\n * so a pending or refunded order never renders inside a green \"success\" pill. */\nexport function financialStatusBadge(status: FinancialStatus): { label: string; className: string } {\n const entry = FINANCIAL[status] ?? { label: status, tone: 'pending' as Tone }\n return { label: entry.label, className: TONE_CLASS[entry.tone] }\n}\n\nexport function isPaid(status: FinancialStatus): boolean {\n return status === 'paid' || status === 'partially_paid'\n}\n\nexport function isRefunded(status: FinancialStatus): boolean {\n return status === 'refunded' || status === 'partially_refunded'\n}\n","import React from 'react'\nimport { Bike, Check, ChefHat, Clock, PackageCheck, RotateCcw, Store, Truck, XCircle } from 'lucide-react'\nimport type { Order } from '@fayz-ai/shop/types'\nimport { isPaid, isRefunded } from '../../data/order-status'\nimport { TID } from '../../lib/testids'\n\ntype TrackingState = 'complete' | 'current' | 'pending' | 'cancelled'\n\ninterface TrackingStep {\n id: string\n label: string\n description: string\n state: TrackingState\n icon: React.ComponentType<{ className?: string }>\n}\n\n/**\n * A delivery order (shop 0125) is followed by the step the STORE moves it\n * through, not by payment and shipment: «aceito», «saiu para entrega» and\n * «entregue» are what the kitchen says and what the WhatsApp/e-mail already\n * told the buyer. Same four boxes, so the page reads the same either way.\n */\nfunction deliverySteps(order: Order): TrackingStep[] {\n const stage = order.deliveryStage!\n const pickup = order.fulfillmentType === 'pickup'\n const received: TrackingStep = {\n id: 'received', label: 'Pedido recebido', description: `#${order.orderNumber}`, state: 'complete', icon: Check,\n }\n if (stage === 'rejected' || stage === 'cancelled') {\n const refunded = isRefunded(order.financialStatus) || order.financialStatus === 'voided'\n return [\n received,\n {\n id: 'closed',\n label: stage === 'rejected' ? 'Pedido recusado' : 'Pedido cancelado',\n description: [order.rejectReason, refunded ? 'Valor estornado' : null].filter(Boolean).join(' · ')\n || 'A loja cancelou este pedido',\n state: 'cancelled',\n icon: XCircle,\n },\n ]\n }\n const rank = { new: 0, accepted: 1, out_for_delivery: 2, delivered: 3 }[stage] ?? 0\n const state = (step: number): TrackingState => (rank > step ? 'complete' : rank === step ? 'current' : 'pending')\n return [\n { ...received, state: rank === 0 ? 'current' : 'complete', description: rank === 0 ? 'Aguardando a loja aceitar' : received.description },\n { id: 'accepted', label: 'Em preparo', description: 'A loja aceitou seu pedido', state: state(1), icon: ChefHat },\n {\n id: 'out',\n label: pickup ? 'Pronto para retirada' : 'Saiu para entrega',\n description: pickup ? 'Pode vir buscar' : 'A caminho de você',\n state: state(2),\n icon: pickup ? Store : Bike,\n },\n { id: 'delivered', label: pickup ? 'Retirado' : 'Entregue', description: 'Bom apetite!', state: rank === 3 ? 'complete' : 'pending', icon: PackageCheck },\n ]\n}\n\nfunction orderTrackingSteps(order: Order): TrackingStep[] {\n if (order.deliveryStage) return deliverySteps(order)\n const received: TrackingStep = {\n id: 'received',\n label: 'Pedido recebido',\n description: `#${order.orderNumber}`,\n state: 'complete',\n icon: Check,\n }\n\n // Terminal states short-circuit the happy path.\n if (order.status === 'cancelled' || order.financialStatus === 'voided') {\n const refunded = isRefunded(order.financialStatus)\n return [\n received,\n {\n id: 'payment',\n label: 'Pedido cancelado',\n description: [order.rejectReason, refunded ? 'Valor estornado' : null].filter(Boolean).join(' · ')\n || 'Este pedido foi cancelado',\n state: 'cancelled',\n icon: XCircle,\n },\n ]\n }\n if (isRefunded(order.financialStatus)) {\n return [\n received,\n { id: 'payment', label: 'Pagamento aprovado', description: 'Compra confirmada', state: 'complete', icon: Check },\n {\n id: 'refund',\n label: order.financialStatus === 'refunded' ? 'Reembolsado' : 'Reembolso parcial',\n description: 'Valor devolvido ao cliente',\n state: 'cancelled',\n icon: RotateCcw,\n },\n ]\n }\n\n const paid = isPaid(order.financialStatus)\n const partiallyFulfilled = order.fulfillmentStatus === 'partially_fulfilled'\n const fulfilled = order.fulfillmentStatus === 'fulfilled'\n\n return [\n received,\n {\n id: 'payment',\n label: paid ? 'Pagamento aprovado' : 'Aguardando pagamento',\n // \"Processando\" descrevia um pagamento que ninguém iniciou.\n description: paid ? 'Compra confirmada' : 'Ainda não recebemos',\n state: paid ? 'complete' : 'current',\n icon: paid ? Check : Clock,\n },\n {\n id: 'preparing',\n label: 'Preparando envio',\n description: paid ? 'Separando produtos' : 'Começa após o pagamento',\n state: fulfilled || partiallyFulfilled ? 'complete' : paid ? 'current' : 'pending',\n icon: PackageCheck,\n },\n {\n id: 'delivery',\n label: fulfilled ? 'Pedido enviado' : partiallyFulfilled ? 'Envio parcial' : 'Entrega',\n description: fulfilled ? 'A caminho do cliente' : partiallyFulfilled ? 'Parte do pedido saiu' : 'Próxima etapa',\n state: fulfilled ? 'complete' : partiallyFulfilled ? 'current' : 'pending',\n icon: fulfilled || partiallyFulfilled ? Truck : Clock,\n },\n ]\n}\n\nconst GRID_COLS: Record<number, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-3',\n 4: 'sm:grid-cols-4',\n}\n\nexport { orderTrackingSteps }\n\nexport function OrderTrackingTimeline({ order, compact = false }: { order: Order; compact?: boolean }) {\n const steps = orderTrackingSteps(order)\n\n return (\n <ol\n data-testid={TID.orderTracking}\n className={`grid ${compact ? 'gap-2' : 'gap-3'} ${GRID_COLS[steps.length] ?? 'sm:grid-cols-4'}`}\n aria-label=\"Acompanhamento do pedido\"\n >\n {steps.map((step) => {\n const Icon = step.icon\n const cancelled = step.state === 'cancelled'\n const done = step.state === 'complete'\n // `current` is IN PROGRESS, not finished. Both used to render as the\n // same solid badge with a checkmark, so an unpaid order showed\n // \"Aguardando pagamento ✓\" — the tick said done about the one thing\n // that had not happened.\n const current = step.state === 'current'\n const active = done || current\n return (\n <li\n key={step.id}\n data-testid={TID.orderTrackingStep(step.id)}\n data-state={step.state}\n className={[\n 'relative min-w-0 rounded-xl border p-3',\n cancelled\n // Theme tokens, not rose-50: a light pink box on a dark store\n // put the step's own title out of sight.\n ? 'border-destructive/40 bg-destructive/10'\n : active\n ? 'border-primary/35 bg-primary/5'\n : 'bg-muted/20 text-muted-foreground',\n compact ? 'text-xs' : 'text-sm',\n ].join(' ')}\n >\n <div className=\"flex items-start gap-2\">\n <span\n className={[\n 'grid h-7 w-7 shrink-0 place-items-center rounded-full border',\n cancelled\n ? 'border-destructive bg-destructive text-destructive-foreground'\n : done\n ? 'border-primary bg-primary text-primary-foreground'\n : current\n ? 'border-primary bg-background text-primary'\n : 'border-muted-foreground/30 bg-background',\n ].join(' ')}\n aria-hidden\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </span>\n <span className=\"min-w-0\">\n {/* Wrap instead of truncate: \"Aguardando pagamento\" became\n \"Aguardando pag…\", which is the one label a buyer must read\n in full. */}\n <span className=\"block font-semibold leading-snug text-foreground\">{step.label}</span>\n <span className=\"mt-0.5 block leading-snug text-muted-foreground\">{step.description}</span>\n </span>\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/account/CustomerAccountShell.tsx","../src/data/order-status.ts","../src/components/order/OrderTrackingTimeline.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-6MA7YLPR.js","sourcesContent":["import React from 'react'\nimport { CreditCard, LogOut, MapPin, Package, ShieldCheck, User } from 'lucide-react'\nimport { signOutCustomer } from '../../data/auth'\nimport { useStorefrontConfig } from '../../document/config'\nimport { Link } from '../../app/router'\nimport { useSessionStore } from '../../stores/session.store'\nimport { TID } from '../../lib/testids'\nimport { accountSectionPath, type AccountSection } from './section'\n\nexport type { AccountSection }\n\ninterface CustomerAccountShellProps {\n title: string\n subtitle?: string\n active: AccountSection\n /**\n * Switch the active section in-place instead of navigating. Optional, and\n * omitting it is the normal case: the menu is made of real links to\n * `/account?section=…`, so it works on any page that mounts this shell.\n */\n onSelect?: (section: AccountSection) => void\n children: React.ReactNode\n}\n\nconst menuItems = [\n { id: 'profile', label: 'Perfil', icon: User },\n { id: 'orders', label: 'Meus pedidos', icon: Package },\n { id: 'addresses', label: 'Endereços', icon: MapPin },\n { id: 'payments', label: 'Pagamentos', icon: CreditCard },\n] as const\n\nexport function CustomerAccountShell({ title, subtitle, active, onSelect, children }: CustomerAccountShellProps) {\n const config = useStorefrontConfig()\n const session = useSessionStore()\n const displayName = session.name || session.email?.split('@')[0] || 'Cliente'\n const displayEmail = session.email || 'Conta criada no checkout'\n\n return (\n <main data-testid={TID.customerAccountShell} className=\"mx-auto max-w-6xl px-4 py-8 sm:px-6\">\n <div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n <div>\n <p className=\"text-sm font-medium text-muted-foreground\">{config.name}</p>\n <h1 className=\"sf-heading text-3xl font-bold tracking-tight\">{title}</h1>\n {subtitle && <p className=\"mt-1 text-sm text-muted-foreground\">{subtitle}</p>}\n </div>\n <Link to={config.catalogPath} className=\"rounded-lg border px-4 py-2 text-sm font-semibold hover:bg-muted\">\n Voltar à loja\n </Link>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-[260px_minmax(0,1fr)]\">\n <aside className=\"h-fit rounded-xl border bg-card p-4\">\n <div className=\"flex items-center gap-3 border-b pb-4\">\n <div className=\"flex h-11 w-11 items-center justify-center rounded-full bg-primary/10 font-bold text-primary\">\n {displayName.slice(0, 1).toUpperCase()}\n </div>\n <div className=\"min-w-0\">\n <p className=\"truncate font-semibold\">{displayName}</p>\n <p className=\"truncate text-xs text-muted-foreground\">{displayEmail}</p>\n </div>\n </div>\n\n <nav data-testid={TID.customerAccountMenu} className=\"mt-4 space-y-1\" aria-label=\"Área do cliente\">\n {menuItems.map((item) => {\n const Icon = item.icon\n const selected = item.id === active\n return (\n <Link\n key={item.id}\n to={accountSectionPath(item.id)}\n data-section={item.id}\n aria-current={selected ? 'page' : undefined}\n // A real href always, so the menu still works when the page\n // that mounted the shell has no in-place handler to offer.\n onClick={(event) => {\n if (!onSelect) return\n event.preventDefault()\n onSelect(item.id)\n }}\n className={`flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left text-sm font-semibold transition ${\n selected ? 'bg-primary/10 text-primary' : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n {item.label}\n </Link>\n )\n })}\n </nav>\n\n <div className=\"mt-4 rounded-lg bg-muted/40 p-3 text-xs text-muted-foreground\">\n <div className=\"flex items-center gap-2 font-semibold text-foreground\">\n <ShieldCheck className=\"h-4 w-4 text-primary\" />\n Conta protegida\n </div>\n <p className=\"mt-1\">Pedidos, pagamentos e endereços ficam organizados para próximas compras.</p>\n </div>\n\n <button\n type=\"button\"\n data-testid={TID.signout}\n onClick={() => void signOutCustomer()}\n className=\"mt-4 flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-semibold text-muted-foreground transition hover:bg-muted hover:text-foreground\"\n >\n <LogOut className=\"h-4 w-4\" />\n Sair\n </button>\n </aside>\n\n <section className=\"min-w-0\">{children}</section>\n </div>\n </main>\n )\n}\n","import type { FinancialStatus } from '@fayz-ai/shop/types'\n\ntype Tone = 'positive' | 'pending' | 'negative'\n\nconst FINANCIAL: Record<FinancialStatus, { label: string; tone: Tone }> = {\n pending: { label: 'Pendente', tone: 'pending' },\n paid: { label: 'Pago', tone: 'positive' },\n partially_paid: { label: 'Parcialmente pago', tone: 'pending' },\n partially_refunded: { label: 'Parcialmente reembolsado', tone: 'negative' },\n refunded: { label: 'Reembolsado', tone: 'negative' },\n voided: { label: 'Cancelado', tone: 'negative' },\n}\n\n// Tinted, not pastel: a -100 pill with -800 text read as a sticker on a dark\n// store. A low-alpha fill takes the card's own surface, and the -500/-600 text\n// holds up on light and dark alike.\nconst TONE_CLASS: Record<Tone, string> = {\n positive: 'bg-emerald-500/15 text-emerald-600 ring-1 ring-inset ring-emerald-500/30',\n pending: 'bg-amber-500/15 text-amber-600 ring-1 ring-inset ring-amber-500/30',\n negative: 'bg-destructive/15 text-destructive ring-1 ring-inset ring-destructive/30',\n}\n\n/** One source of truth for a financial-status pill — label + color by status,\n * so a pending or refunded order never renders inside a green \"success\" pill. */\nexport function financialStatusBadge(status: FinancialStatus): { label: string; className: string } {\n const entry = FINANCIAL[status] ?? { label: status, tone: 'pending' as Tone }\n return { label: entry.label, className: TONE_CLASS[entry.tone] }\n}\n\nexport function isPaid(status: FinancialStatus): boolean {\n return status === 'paid' || status === 'partially_paid'\n}\n\nexport function isRefunded(status: FinancialStatus): boolean {\n return status === 'refunded' || status === 'partially_refunded'\n}\n","import React from 'react'\nimport { Bike, Check, ChefHat, Clock, PackageCheck, RotateCcw, Store, Truck, XCircle } from 'lucide-react'\nimport type { Order } from '@fayz-ai/shop/types'\nimport { isPaid, isRefunded } from '../../data/order-status'\nimport { TID } from '../../lib/testids'\n\ntype TrackingState = 'complete' | 'current' | 'pending' | 'cancelled'\n\ninterface TrackingStep {\n id: string\n label: string\n description: string\n state: TrackingState\n icon: React.ComponentType<{ className?: string }>\n}\n\n/**\n * A delivery order (shop 0125) is followed by the step the STORE moves it\n * through, not by payment and shipment: «aceito», «saiu para entrega» and\n * «entregue» are what the kitchen says and what the WhatsApp/e-mail already\n * told the buyer. Same four boxes, so the page reads the same either way.\n */\nfunction deliverySteps(order: Order): TrackingStep[] {\n const stage = order.deliveryStage!\n const pickup = order.fulfillmentType === 'pickup'\n const received: TrackingStep = {\n id: 'received', label: 'Pedido recebido', description: `#${order.orderNumber}`, state: 'complete', icon: Check,\n }\n if (stage === 'rejected' || stage === 'cancelled') {\n const refunded = isRefunded(order.financialStatus) || order.financialStatus === 'voided'\n return [\n received,\n {\n id: 'closed',\n label: stage === 'rejected' ? 'Pedido recusado' : 'Pedido cancelado',\n description: [order.rejectReason, refunded ? 'Valor estornado' : null].filter(Boolean).join(' · ')\n || 'A loja cancelou este pedido',\n state: 'cancelled',\n icon: XCircle,\n },\n ]\n }\n const rank = { new: 0, accepted: 1, out_for_delivery: 2, delivered: 3 }[stage] ?? 0\n const state = (step: number): TrackingState => (rank > step ? 'complete' : rank === step ? 'current' : 'pending')\n return [\n { ...received, state: rank === 0 ? 'current' : 'complete', description: rank === 0 ? 'Aguardando a loja aceitar' : received.description },\n { id: 'accepted', label: 'Em preparo', description: 'A loja aceitou seu pedido', state: state(1), icon: ChefHat },\n {\n id: 'out',\n label: pickup ? 'Pronto para retirada' : 'Saiu para entrega',\n description: pickup ? 'Pode vir buscar' : 'A caminho de você',\n state: state(2),\n icon: pickup ? Store : Bike,\n },\n { id: 'delivered', label: pickup ? 'Retirado' : 'Entregue', description: 'Bom apetite!', state: rank === 3 ? 'complete' : 'pending', icon: PackageCheck },\n ]\n}\n\nfunction orderTrackingSteps(order: Order): TrackingStep[] {\n if (order.deliveryStage) return deliverySteps(order)\n const received: TrackingStep = {\n id: 'received',\n label: 'Pedido recebido',\n description: `#${order.orderNumber}`,\n state: 'complete',\n icon: Check,\n }\n\n // Terminal states short-circuit the happy path.\n if (order.status === 'cancelled' || order.financialStatus === 'voided') {\n const refunded = isRefunded(order.financialStatus)\n return [\n received,\n {\n id: 'payment',\n label: 'Pedido cancelado',\n description: [order.rejectReason, refunded ? 'Valor estornado' : null].filter(Boolean).join(' · ')\n || 'Este pedido foi cancelado',\n state: 'cancelled',\n icon: XCircle,\n },\n ]\n }\n if (isRefunded(order.financialStatus)) {\n return [\n received,\n { id: 'payment', label: 'Pagamento aprovado', description: 'Compra confirmada', state: 'complete', icon: Check },\n {\n id: 'refund',\n label: order.financialStatus === 'refunded' ? 'Reembolsado' : 'Reembolso parcial',\n description: 'Valor devolvido ao cliente',\n state: 'cancelled',\n icon: RotateCcw,\n },\n ]\n }\n\n const paid = isPaid(order.financialStatus)\n const partiallyFulfilled = order.fulfillmentStatus === 'partially_fulfilled'\n const fulfilled = order.fulfillmentStatus === 'fulfilled'\n\n return [\n received,\n {\n id: 'payment',\n label: paid ? 'Pagamento aprovado' : 'Aguardando pagamento',\n // \"Processando\" descrevia um pagamento que ninguém iniciou.\n description: paid ? 'Compra confirmada' : 'Ainda não recebemos',\n state: paid ? 'complete' : 'current',\n icon: paid ? Check : Clock,\n },\n {\n id: 'preparing',\n label: 'Preparando envio',\n description: paid ? 'Separando produtos' : 'Começa após o pagamento',\n state: fulfilled || partiallyFulfilled ? 'complete' : paid ? 'current' : 'pending',\n icon: PackageCheck,\n },\n {\n id: 'delivery',\n label: fulfilled ? 'Pedido enviado' : partiallyFulfilled ? 'Envio parcial' : 'Entrega',\n description: fulfilled ? 'A caminho do cliente' : partiallyFulfilled ? 'Parte do pedido saiu' : 'Próxima etapa',\n state: fulfilled ? 'complete' : partiallyFulfilled ? 'current' : 'pending',\n icon: fulfilled || partiallyFulfilled ? Truck : Clock,\n },\n ]\n}\n\nconst GRID_COLS: Record<number, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-3',\n 4: 'sm:grid-cols-4',\n}\n\nexport { orderTrackingSteps }\n\nexport function OrderTrackingTimeline({ order, compact = false }: { order: Order; compact?: boolean }) {\n const steps = orderTrackingSteps(order)\n\n return (\n <ol\n data-testid={TID.orderTracking}\n className={`grid ${compact ? 'gap-2' : 'gap-3'} ${GRID_COLS[steps.length] ?? 'sm:grid-cols-4'}`}\n aria-label=\"Acompanhamento do pedido\"\n >\n {steps.map((step) => {\n const Icon = step.icon\n const cancelled = step.state === 'cancelled'\n const done = step.state === 'complete'\n // `current` is IN PROGRESS, not finished. Both used to render as the\n // same solid badge with a checkmark, so an unpaid order showed\n // \"Aguardando pagamento ✓\" — the tick said done about the one thing\n // that had not happened.\n const current = step.state === 'current'\n const active = done || current\n return (\n <li\n key={step.id}\n data-testid={TID.orderTrackingStep(step.id)}\n data-state={step.state}\n className={[\n 'relative min-w-0 rounded-xl border p-3',\n cancelled\n // Theme tokens, not rose-50: a light pink box on a dark store\n // put the step's own title out of sight.\n ? 'border-destructive/40 bg-destructive/10'\n : active\n ? 'border-primary/35 bg-primary/5'\n : 'bg-muted/20 text-muted-foreground',\n compact ? 'text-xs' : 'text-sm',\n ].join(' ')}\n >\n <div className=\"flex items-start gap-2\">\n <span\n className={[\n 'grid h-7 w-7 shrink-0 place-items-center rounded-full border',\n cancelled\n ? 'border-destructive bg-destructive text-destructive-foreground'\n : done\n ? 'border-primary bg-primary text-primary-foreground'\n : current\n ? 'border-primary bg-background text-primary'\n : 'border-muted-foreground/30 bg-background',\n ].join(' ')}\n aria-hidden\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </span>\n <span className=\"min-w-0\">\n {/* Wrap instead of truncate: \"Aguardando pagamento\" became\n \"Aguardando pag…\", which is the one label a buyer must read\n in full. */}\n <span className=\"block font-semibold leading-snug text-foreground\">{step.label}</span>\n <span className=\"mt-0.5 block leading-snug text-muted-foreground\">{step.description}</span>\n </span>\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { SuccessMark } from './chunk-WDQFNHYO.js';
|
|
2
|
-
import { CustomerAccountShell, isPaid, financialStatusBadge, OrderTrackingTimeline } from './chunk-
|
|
2
|
+
import { CustomerAccountShell, isPaid, financialStatusBadge, OrderTrackingTimeline } from './chunk-6MA7YLPR.js';
|
|
3
3
|
import { SkeletonGroup, Skeleton } from './chunk-FCPOPWG3.js';
|
|
4
|
-
import { useStorefrontHead, TID, SmoothImage, formatMoney } from './chunk-
|
|
5
|
-
import { useStorefrontConfig, Link, navigateTo } from './chunk-
|
|
4
|
+
import { useStorefrontHead, TID, SmoothImage, formatMoney } from './chunk-27C7DVHW.js';
|
|
5
|
+
import { useStorefrontConfig, Link, navigateTo } from './chunk-ILFYNKT2.js';
|
|
6
6
|
import React, { useState, useEffect } from 'react';
|
|
7
7
|
import { getShopProvider } from '@fayz-ai/shop/runtime';
|
|
8
8
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -212,5 +212,5 @@ function OrderConfirmationPage({ orderId }) {
|
|
|
212
212
|
}
|
|
213
213
|
|
|
214
214
|
export { OrderConfirmationPage };
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-EJUFMPSI.js.map
|
|
216
|
+
//# sourceMappingURL=chunk-EJUFMPSI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/views/OrderConfirmationPage.tsx"],"names":[],"mappings":"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","file":"chunk-IUP5SDTX.js","sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { getShopProvider } from '@fayz-ai/shop/runtime'\nimport { prefersReducedMotion } from '../lib/motion'\nimport type { Order } from '@fayz-ai/shop/types'\nimport { useStorefrontConfig } from '../document/config'\nimport { Link, navigateTo } from '../app/router'\nimport { formatMoney } from '../lib/format'\nimport { TID } from '../lib/testids'\nimport { CustomerAccountShell } from '../components/account/CustomerAccountShell'\nimport { OrderTrackingTimeline } from '../components/order/OrderTrackingTimeline'\nimport { financialStatusBadge, isPaid } from '../data/order-status'\nimport { useStorefrontHead } from '../hooks/use-storefront-head'\nimport { SmoothImage } from '../components/SmoothImage'\nimport { SuccessMark } from '../components/order/SuccessMark'\nimport { Skeleton, SkeletonGroup } from '../components/Skeleton'\n\n/** O contrário do SuccessMark: um pedido que existe e ainda não é uma compra. */\nfunction PendingMark() {\n return (\n <div className=\"relative mx-auto h-24 w-24\">\n <span className=\"absolute inset-0 rounded-full bg-amber-100\" />\n <svg viewBox=\"0 0 48 48\" className=\"absolute inset-0 h-full w-full p-6\" aria-hidden>\n <circle cx=\"24\" cy=\"24\" r=\"17\" fill=\"none\" stroke=\"rgb(180 83 9)\" strokeWidth=\"4\" />\n <path d=\"M24 14 L24 25 L31 29\" fill=\"none\" stroke=\"rgb(180 83 9)\" strokeWidth=\"4\"\n strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )\n}\n\nexport function OrderConfirmationPage({ orderId }: { orderId: string }) {\n const config = useStorefrontConfig()\n const [order, setOrder] = useState<Order | null>(null)\n const [loading, setLoading] = useState(true)\n const money = (v: number) => formatMoney(v, config.currency, config.locale)\n useStorefrontHead({ title: order ? `Pedido #${order.orderNumber} — ${config.name}` : config.name })\n\n const reload = React.useCallback(() => {\n let cancelled = false\n getShopProvider()\n .getOrder(orderId)\n .then((o) => {\n if (!cancelled) setOrder(o)\n })\n .finally(() => {\n if (!cancelled) setLoading(false)\n })\n return () => {\n cancelled = true\n }\n }, [orderId])\n\n useEffect(() => reload(), [reload])\n\n if (loading) {\n // Inside the real shell, so the store never blinks out and back for someone\n // who just paid.\n return (\n <CustomerAccountShell title=\"Detalhe do pedido\" active=\"orders\">\n <SkeletonGroup label=\"Carregando seu pedido\" className=\"rounded-xl border bg-card p-6 sm:p-8\">\n <div className=\"grid gap-6 border-b pb-6 sm:grid-cols-[120px_minmax(0,1fr)]\">\n <Skeleton className=\"mx-auto h-24 w-24 rounded-full\" />\n <div>\n <Skeleton className=\"h-8 w-64 max-w-full\" />\n <Skeleton className=\"mt-2 h-3.5 w-full max-w-md\" />\n <Skeleton className=\"mt-4 h-6 w-48\" />\n </div>\n </div>\n\n <div className=\"mt-6 grid gap-4 rounded-xl border bg-muted/20 p-4 sm:grid-cols-3\">\n {[0, 1, 2].map((column) => (\n <div key={column}>\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"mt-2 h-4 w-28\" />\n <Skeleton className=\"mt-1.5 h-3 w-20\" />\n </div>\n ))}\n </div>\n\n <div className=\"mt-6\">\n <Skeleton className=\"h-3 w-32\" />\n <div className=\"mt-3 flex items-center gap-2\">\n {[0, 1, 2, 3].map((node) => (\n <React.Fragment key={node}>\n <Skeleton className=\"h-7 w-7 shrink-0 rounded-full\" />\n {node < 3 && <Skeleton className=\"h-px flex-1\" />}\n </React.Fragment>\n ))}\n </div>\n </div>\n\n <div className=\"mt-8 space-y-3\">\n {[0, 1].map((row) => (\n <div key={row} className=\"flex items-center gap-3\">\n <Skeleton className=\"h-12 w-12 rounded-lg\" />\n <Skeleton className=\"h-3.5 flex-1\" />\n <Skeleton className=\"h-3.5 w-16\" />\n </div>\n ))}\n </div>\n\n <div className=\"mt-4 space-y-2 border-t pt-4\">\n <Skeleton className=\"h-3.5 w-full max-w-xs\" />\n <Skeleton className=\"h-3.5 w-full max-w-[14rem]\" />\n <Skeleton className=\"h-5 w-40\" />\n </div>\n </SkeletonGroup>\n </CustomerAccountShell>\n )\n }\n if (!order) {\n return (\n <main className=\"mx-auto max-w-2xl px-4 py-20 text-center\">\n <p className=\"text-muted-foreground\">Pedido não encontrado.</p>\n <Link to=\"/\" className=\"mt-4 inline-block text-primary underline\">Voltar à loja</Link>\n </main>\n )\n }\n\n const paid = isPaid(order.financialStatus)\n\n return (\n <CustomerAccountShell\n title=\"Detalhe do pedido\"\n subtitle={paid ? 'Compra confirmada e vinculada à sua conta.' : 'Pedido guardado, aguardando o pagamento.'}\n active=\"orders\"\n // Sem isto os quatro botões do menu da conta eram BOTÕES MORTOS nesta\n // tela: o shell chama `onSelect?.(id)` e ninguém passava um. A conta é\n // outra rota, então aqui a escolha navega em vez de trocar de aba.\n onSelect={(section) => navigateTo(`/account?section=${section}`)}\n >\n {/* O Pix NÃO mora mais aqui.\n Esta tela abria uma cobrança sobre um pedido que já existia — o\n desenho antigo, em que o pedido nascia antes do dinheiro. Quando o\n adquirente não estava conectado, o que o comprador via era \"Não\n conseguimos abrir o Pix agora\" logo abaixo de \"Falta o pagamento\":\n uma tela que cobra e falha ao mesmo tempo, sem saída. O recebimento\n acontece no passo 3 do checkout, antes de existir pedido. */}\n\n <article data-testid={TID.orderDetail} className=\"animate-fade-up rounded-xl border bg-card p-6 sm:p-8\">\n <div className=\"grid gap-6 border-b pb-6 sm:grid-cols-[120px_minmax(0,1fr)]\">\n {/* Confete só quando o dinheiro entrou. A página comemorava\n \"Pedido confirmado!\" para um pedido `pending` — um comprador que\n ainda não pagou saía daqui achando que tinha comprado, e o lojista\n recebia a cobrança de um pedido que ninguém pagou. */}\n {paid ? <SuccessMark /> : <PendingMark />}\n <div className=\"text-center sm:text-left\">\n <h2 className=\"sf-heading text-3xl font-bold tracking-tight\">\n {paid ? 'Pedido confirmado!' : 'Falta o pagamento'}\n </h2>\n <p className=\"mt-1 text-muted-foreground\">\n {paid\n ? `Obrigado pela compra, ${order.customerName ?? 'cliente'}. A loja já está preparando seu pedido.`\n : `Guardamos seu pedido, ${order.customerName ?? 'cliente'}. Ele só é preparado depois que o pagamento entrar.`}\n </p>\n <p className=\"mt-4 text-lg\">\n Pedido <span data-testid={TID.orderNumber} className=\"font-semibold\">#{order.orderNumber}</span>{' '}\n <span\n data-testid={TID.orderStatus}\n className={`ml-2 inline-flex rounded-full px-2.5 py-0.5 text-sm font-medium ${financialStatusBadge(order.financialStatus).className}`}\n >\n {financialStatusBadge(order.financialStatus).label}\n </span>\n </p>\n </div>\n </div>\n\n <div className=\"mt-6 grid gap-4 rounded-xl border bg-muted/20 p-4 text-sm sm:grid-cols-3\">\n <div>\n <p className=\"text-muted-foreground\">Cliente</p>\n <p className=\"mt-1 font-semibold\">{order.customerName ?? 'Cliente'}</p>\n <p className=\"text-muted-foreground\">{order.customerEmail}</p>\n </div>\n <div>\n <p className=\"text-muted-foreground\">Entrega</p>\n {/* \"Preparando envio\" era dito para um pedido que ninguém pagou —\n a loja não separa nada antes do dinheiro entrar. */}\n <p className=\"mt-1 font-semibold\">\n {order.fulfillmentStatus === 'fulfilled'\n ? 'Enviado'\n : paid ? 'Preparando envio' : 'Aguardando pagamento'}\n </p>\n <p className=\"text-muted-foreground\">{order.notes ?? 'Endereço salvo no pedido'}</p>\n </div>\n <div>\n <p className=\"text-muted-foreground\">Pagamento</p>\n <p className=\"mt-1 font-semibold\">{financialStatusBadge(order.financialStatus).label}</p>\n {/* Nada é \"processado no checkout\" enquanto não há cobrança paga. */}\n <p className=\"text-muted-foreground\">\n {paid ? 'Recebido pela loja' : 'Ainda não recebido'}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <h3 className=\"mb-3 text-sm font-semibold uppercase text-muted-foreground\">\n Acompanhamento\n </h3>\n <OrderTrackingTimeline order={order} />\n\n {/* The code itself, under the timeline that says a box exists. Until\n 0052 the buyer could see \"enviado\" and had no way to learn it. */}\n {(order.shipments ?? []).filter((s) => s.trackingCode).map((shipment) => (\n <div\n key={shipment.id}\n data-testid={TID.orderTracking + '-code'}\n className=\"mt-4 flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border bg-muted/30 px-4 py-3 text-sm\"\n >\n <span className=\"text-muted-foreground\">\n {shipment.carrier ? `Enviado por ${shipment.carrier}` : 'Enviado'}\n </span>\n {shipment.trackingUrl ? (\n <a\n href={shipment.trackingUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"font-mono font-medium text-primary hover:underline\"\n >\n {shipment.trackingCode}\n </a>\n ) : (\n <span className=\"font-mono font-medium\">{shipment.trackingCode}</span>\n )}\n </div>\n ))}\n </div>\n\n <ul className=\"mt-8 space-y-3 text-left\">\n {order.items.map((item) => (\n <li key={item.id} className=\"flex items-center gap-3 text-sm\">\n {item.imageUrl && <SmoothImage src={item.imageUrl} alt={item.name} className=\"h-12 w-12 rounded-lg border object-cover\" variant={{ width: 48 }} />}\n <span className=\"flex-1\">\n {item.name} <span className=\"text-muted-foreground\">× {item.quantity}</span>\n </span>\n <span data-price={item.total.toFixed(2)}>{money(item.total)}</span>\n </li>\n ))}\n </ul>\n\n <dl className=\"mt-4 space-y-1.5 border-t pt-4 text-left text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">Subtotal</dt>\n <dd data-price={order.subtotal.toFixed(2)}>{money(order.subtotal)}</dd>\n </div>\n {order.discountTotal > 0 && (\n <div className=\"flex justify-between text-emerald-600\">\n <dt>Desconto {order.discountCode ? `(${order.discountCode})` : ''}</dt>\n <dd data-price={order.discountTotal.toFixed(2)}>−{money(order.discountTotal)}</dd>\n </div>\n )}\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">Frete</dt>\n <dd data-price={order.shippingTotal.toFixed(2)}>\n {order.shippingTotal === 0 ? 'Grátis' : money(order.shippingTotal)}\n </dd>\n </div>\n <div className=\"flex justify-between border-t pt-2 text-base font-semibold\">\n <dt>Total</dt>\n <dd data-testid={TID.orderTotal} data-price={order.total.toFixed(2)}>{money(order.total)}</dd>\n </div>\n </dl>\n\n <div className=\"mt-8 flex flex-wrap gap-3\">\n <Link\n to=\"/account\"\n data-testid={TID.viewPurchases}\n className=\"rounded-xl bg-primary px-5 py-2.5 font-semibold text-primary-foreground hover:opacity-90\"\n >\n Minhas compras\n </Link>\n <Link to={config.catalogPath} className=\"rounded-xl border px-5 py-2.5 font-semibold hover:bg-muted\">\n Continuar comprando\n </Link>\n </div>\n </article>\n </CustomerAccountShell>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/views/OrderConfirmationPage.tsx"],"names":[],"mappings":"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","file":"chunk-EJUFMPSI.js","sourcesContent":["import React, { useEffect, useState } from 'react'\nimport { getShopProvider } from '@fayz-ai/shop/runtime'\nimport { prefersReducedMotion } from '../lib/motion'\nimport type { Order } from '@fayz-ai/shop/types'\nimport { useStorefrontConfig } from '../document/config'\nimport { Link, navigateTo } from '../app/router'\nimport { formatMoney } from '../lib/format'\nimport { TID } from '../lib/testids'\nimport { CustomerAccountShell } from '../components/account/CustomerAccountShell'\nimport { OrderTrackingTimeline } from '../components/order/OrderTrackingTimeline'\nimport { financialStatusBadge, isPaid } from '../data/order-status'\nimport { useStorefrontHead } from '../hooks/use-storefront-head'\nimport { SmoothImage } from '../components/SmoothImage'\nimport { SuccessMark } from '../components/order/SuccessMark'\nimport { Skeleton, SkeletonGroup } from '../components/Skeleton'\n\n/** O contrário do SuccessMark: um pedido que existe e ainda não é uma compra. */\nfunction PendingMark() {\n return (\n <div className=\"relative mx-auto h-24 w-24\">\n <span className=\"absolute inset-0 rounded-full bg-amber-100\" />\n <svg viewBox=\"0 0 48 48\" className=\"absolute inset-0 h-full w-full p-6\" aria-hidden>\n <circle cx=\"24\" cy=\"24\" r=\"17\" fill=\"none\" stroke=\"rgb(180 83 9)\" strokeWidth=\"4\" />\n <path d=\"M24 14 L24 25 L31 29\" fill=\"none\" stroke=\"rgb(180 83 9)\" strokeWidth=\"4\"\n strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )\n}\n\nexport function OrderConfirmationPage({ orderId }: { orderId: string }) {\n const config = useStorefrontConfig()\n const [order, setOrder] = useState<Order | null>(null)\n const [loading, setLoading] = useState(true)\n const money = (v: number) => formatMoney(v, config.currency, config.locale)\n useStorefrontHead({ title: order ? `Pedido #${order.orderNumber} — ${config.name}` : config.name })\n\n const reload = React.useCallback(() => {\n let cancelled = false\n getShopProvider()\n .getOrder(orderId)\n .then((o) => {\n if (!cancelled) setOrder(o)\n })\n .finally(() => {\n if (!cancelled) setLoading(false)\n })\n return () => {\n cancelled = true\n }\n }, [orderId])\n\n useEffect(() => reload(), [reload])\n\n if (loading) {\n // Inside the real shell, so the store never blinks out and back for someone\n // who just paid.\n return (\n <CustomerAccountShell title=\"Detalhe do pedido\" active=\"orders\">\n <SkeletonGroup label=\"Carregando seu pedido\" className=\"rounded-xl border bg-card p-6 sm:p-8\">\n <div className=\"grid gap-6 border-b pb-6 sm:grid-cols-[120px_minmax(0,1fr)]\">\n <Skeleton className=\"mx-auto h-24 w-24 rounded-full\" />\n <div>\n <Skeleton className=\"h-8 w-64 max-w-full\" />\n <Skeleton className=\"mt-2 h-3.5 w-full max-w-md\" />\n <Skeleton className=\"mt-4 h-6 w-48\" />\n </div>\n </div>\n\n <div className=\"mt-6 grid gap-4 rounded-xl border bg-muted/20 p-4 sm:grid-cols-3\">\n {[0, 1, 2].map((column) => (\n <div key={column}>\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"mt-2 h-4 w-28\" />\n <Skeleton className=\"mt-1.5 h-3 w-20\" />\n </div>\n ))}\n </div>\n\n <div className=\"mt-6\">\n <Skeleton className=\"h-3 w-32\" />\n <div className=\"mt-3 flex items-center gap-2\">\n {[0, 1, 2, 3].map((node) => (\n <React.Fragment key={node}>\n <Skeleton className=\"h-7 w-7 shrink-0 rounded-full\" />\n {node < 3 && <Skeleton className=\"h-px flex-1\" />}\n </React.Fragment>\n ))}\n </div>\n </div>\n\n <div className=\"mt-8 space-y-3\">\n {[0, 1].map((row) => (\n <div key={row} className=\"flex items-center gap-3\">\n <Skeleton className=\"h-12 w-12 rounded-lg\" />\n <Skeleton className=\"h-3.5 flex-1\" />\n <Skeleton className=\"h-3.5 w-16\" />\n </div>\n ))}\n </div>\n\n <div className=\"mt-4 space-y-2 border-t pt-4\">\n <Skeleton className=\"h-3.5 w-full max-w-xs\" />\n <Skeleton className=\"h-3.5 w-full max-w-[14rem]\" />\n <Skeleton className=\"h-5 w-40\" />\n </div>\n </SkeletonGroup>\n </CustomerAccountShell>\n )\n }\n if (!order) {\n return (\n <main className=\"mx-auto max-w-2xl px-4 py-20 text-center\">\n <p className=\"text-muted-foreground\">Pedido não encontrado.</p>\n <Link to=\"/\" className=\"mt-4 inline-block text-primary underline\">Voltar à loja</Link>\n </main>\n )\n }\n\n const paid = isPaid(order.financialStatus)\n\n return (\n <CustomerAccountShell\n title=\"Detalhe do pedido\"\n subtitle={paid ? 'Compra confirmada e vinculada à sua conta.' : 'Pedido guardado, aguardando o pagamento.'}\n active=\"orders\"\n // Sem isto os quatro botões do menu da conta eram BOTÕES MORTOS nesta\n // tela: o shell chama `onSelect?.(id)` e ninguém passava um. A conta é\n // outra rota, então aqui a escolha navega em vez de trocar de aba.\n onSelect={(section) => navigateTo(`/account?section=${section}`)}\n >\n {/* O Pix NÃO mora mais aqui.\n Esta tela abria uma cobrança sobre um pedido que já existia — o\n desenho antigo, em que o pedido nascia antes do dinheiro. Quando o\n adquirente não estava conectado, o que o comprador via era \"Não\n conseguimos abrir o Pix agora\" logo abaixo de \"Falta o pagamento\":\n uma tela que cobra e falha ao mesmo tempo, sem saída. O recebimento\n acontece no passo 3 do checkout, antes de existir pedido. */}\n\n <article data-testid={TID.orderDetail} className=\"animate-fade-up rounded-xl border bg-card p-6 sm:p-8\">\n <div className=\"grid gap-6 border-b pb-6 sm:grid-cols-[120px_minmax(0,1fr)]\">\n {/* Confete só quando o dinheiro entrou. A página comemorava\n \"Pedido confirmado!\" para um pedido `pending` — um comprador que\n ainda não pagou saía daqui achando que tinha comprado, e o lojista\n recebia a cobrança de um pedido que ninguém pagou. */}\n {paid ? <SuccessMark /> : <PendingMark />}\n <div className=\"text-center sm:text-left\">\n <h2 className=\"sf-heading text-3xl font-bold tracking-tight\">\n {paid ? 'Pedido confirmado!' : 'Falta o pagamento'}\n </h2>\n <p className=\"mt-1 text-muted-foreground\">\n {paid\n ? `Obrigado pela compra, ${order.customerName ?? 'cliente'}. A loja já está preparando seu pedido.`\n : `Guardamos seu pedido, ${order.customerName ?? 'cliente'}. Ele só é preparado depois que o pagamento entrar.`}\n </p>\n <p className=\"mt-4 text-lg\">\n Pedido <span data-testid={TID.orderNumber} className=\"font-semibold\">#{order.orderNumber}</span>{' '}\n <span\n data-testid={TID.orderStatus}\n className={`ml-2 inline-flex rounded-full px-2.5 py-0.5 text-sm font-medium ${financialStatusBadge(order.financialStatus).className}`}\n >\n {financialStatusBadge(order.financialStatus).label}\n </span>\n </p>\n </div>\n </div>\n\n <div className=\"mt-6 grid gap-4 rounded-xl border bg-muted/20 p-4 text-sm sm:grid-cols-3\">\n <div>\n <p className=\"text-muted-foreground\">Cliente</p>\n <p className=\"mt-1 font-semibold\">{order.customerName ?? 'Cliente'}</p>\n <p className=\"text-muted-foreground\">{order.customerEmail}</p>\n </div>\n <div>\n <p className=\"text-muted-foreground\">Entrega</p>\n {/* \"Preparando envio\" era dito para um pedido que ninguém pagou —\n a loja não separa nada antes do dinheiro entrar. */}\n <p className=\"mt-1 font-semibold\">\n {order.fulfillmentStatus === 'fulfilled'\n ? 'Enviado'\n : paid ? 'Preparando envio' : 'Aguardando pagamento'}\n </p>\n <p className=\"text-muted-foreground\">{order.notes ?? 'Endereço salvo no pedido'}</p>\n </div>\n <div>\n <p className=\"text-muted-foreground\">Pagamento</p>\n <p className=\"mt-1 font-semibold\">{financialStatusBadge(order.financialStatus).label}</p>\n {/* Nada é \"processado no checkout\" enquanto não há cobrança paga. */}\n <p className=\"text-muted-foreground\">\n {paid ? 'Recebido pela loja' : 'Ainda não recebido'}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6\">\n <h3 className=\"mb-3 text-sm font-semibold uppercase text-muted-foreground\">\n Acompanhamento\n </h3>\n <OrderTrackingTimeline order={order} />\n\n {/* The code itself, under the timeline that says a box exists. Until\n 0052 the buyer could see \"enviado\" and had no way to learn it. */}\n {(order.shipments ?? []).filter((s) => s.trackingCode).map((shipment) => (\n <div\n key={shipment.id}\n data-testid={TID.orderTracking + '-code'}\n className=\"mt-4 flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border bg-muted/30 px-4 py-3 text-sm\"\n >\n <span className=\"text-muted-foreground\">\n {shipment.carrier ? `Enviado por ${shipment.carrier}` : 'Enviado'}\n </span>\n {shipment.trackingUrl ? (\n <a\n href={shipment.trackingUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"font-mono font-medium text-primary hover:underline\"\n >\n {shipment.trackingCode}\n </a>\n ) : (\n <span className=\"font-mono font-medium\">{shipment.trackingCode}</span>\n )}\n </div>\n ))}\n </div>\n\n <ul className=\"mt-8 space-y-3 text-left\">\n {order.items.map((item) => (\n <li key={item.id} className=\"flex items-center gap-3 text-sm\">\n {item.imageUrl && <SmoothImage src={item.imageUrl} alt={item.name} className=\"h-12 w-12 rounded-lg border object-cover\" variant={{ width: 48 }} />}\n <span className=\"flex-1\">\n {item.name} <span className=\"text-muted-foreground\">× {item.quantity}</span>\n </span>\n <span data-price={item.total.toFixed(2)}>{money(item.total)}</span>\n </li>\n ))}\n </ul>\n\n <dl className=\"mt-4 space-y-1.5 border-t pt-4 text-left text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">Subtotal</dt>\n <dd data-price={order.subtotal.toFixed(2)}>{money(order.subtotal)}</dd>\n </div>\n {order.discountTotal > 0 && (\n <div className=\"flex justify-between text-emerald-600\">\n <dt>Desconto {order.discountCode ? `(${order.discountCode})` : ''}</dt>\n <dd data-price={order.discountTotal.toFixed(2)}>−{money(order.discountTotal)}</dd>\n </div>\n )}\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">Frete</dt>\n <dd data-price={order.shippingTotal.toFixed(2)}>\n {order.shippingTotal === 0 ? 'Grátis' : money(order.shippingTotal)}\n </dd>\n </div>\n <div className=\"flex justify-between border-t pt-2 text-base font-semibold\">\n <dt>Total</dt>\n <dd data-testid={TID.orderTotal} data-price={order.total.toFixed(2)}>{money(order.total)}</dd>\n </div>\n </dl>\n\n <div className=\"mt-8 flex flex-wrap gap-3\">\n <Link\n to=\"/account\"\n data-testid={TID.viewPurchases}\n className=\"rounded-xl bg-primary px-5 py-2.5 font-semibold text-primary-foreground hover:opacity-90\"\n >\n Minhas compras\n </Link>\n <Link to={config.catalogPath} className=\"rounded-xl border px-5 py-2.5 font-semibold hover:bg-muted\">\n Continuar comprando\n </Link>\n </div>\n </article>\n </CustomerAccountShell>\n )\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useDeliveryStore, selectSubtotal, useCartStore } from './chunk-
|
|
2
|
-
import { useSessionStore, TID } from './chunk-
|
|
1
|
+
import { useDeliveryStore, selectSubtotal, useCartStore } from './chunk-UHYQNPXO.js';
|
|
2
|
+
import { useSessionStore, TID } from './chunk-27C7DVHW.js';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { ChevronLeft, X, MapPin, Check, Pencil, Trash2, Plus } from 'lucide-react';
|
|
5
5
|
import { normalizePostalCode, formatPostalCode } from '@fayz-ai/core';
|
|
@@ -432,5 +432,5 @@ function AddressForm({ onDone, initial, replaces }) {
|
|
|
432
432
|
}
|
|
433
433
|
|
|
434
434
|
export { AddressSheet, useAccountAddresses };
|
|
435
|
-
//# sourceMappingURL=chunk-
|
|
436
|
-
//# sourceMappingURL=chunk-
|
|
435
|
+
//# sourceMappingURL=chunk-EVQYGOB2.js.map
|
|
436
|
+
//# sourceMappingURL=chunk-EVQYGOB2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/delivery/AddressSheet.tsx"],"names":[],"mappings":"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","file":"chunk-YDZU2SZL.js","sourcesContent":["import React from 'react'\nimport { Check, ChevronLeft, MapPin, Pencil, Plus, Trash2, X } from 'lucide-react'\nimport { formatPostalCode, normalizePostalCode } from '@fayz-ai/core'\nimport { useDeliveryStore, type SavedDeliveryAddress } from '../../stores/delivery.store'\nimport { useCartStore, selectSubtotal } from '../../stores/cart.store'\nimport { TID } from '../../lib/testids'\nimport { useSessionStore } from '../../stores/session.store'\nimport { getShopProvider } from '@fayz-ai/shop/runtime'\nimport type { CustomerAddress } from '@fayz-ai/shop/types'\n\n/** Os apelidos que quase todo mundo usa. \"Outro\" abre o campo livre. */\nconst LABELS = ['Casa', 'Trabalho'] as const\n\n/**\n * \"Onde você quer receber?\" — o caderno de endereços do navegador.\n *\n * Copiado do fluxo que os apps de delivery usam, e a razão de ele ser assim é\n * a ordem das perguntas: o CEP resolve rua, bairro e cidade de graça, então a\n * primeira tela pede só o CEP; a segunda pede exatamente o que nenhuma consulta\n * de CEP sabe — número, complemento e ponto de referência — e o número é o\n * único obrigatório.\n *\n * O que faz isso valer a pena é a terceira visita: quem já salvou não digita\n * nada, escolhe da lista. Um checkout que pede o endereço inteiro toda vez é o\n * atrito que faz a pessoa voltar para o app que já sabe onde ela mora.\n *\n * Fica no NAVEGADOR, e é uma escolha, não uma limitação aceita em silêncio: no\n * delivery o endereço vem antes do login. O caderno da conta (`CustomerAddress`)\n * continua existindo e continua ganhando no checkout quando existe.\n */\nexport function AddressSheet({ onClose, onSignIn }: {\n onClose: () => void\n /** Opens the sign-in modal; absent, the signed-out prompt is not drawn. */\n onSignIn?: () => void\n}) {\n const saved = useDeliveryStore((s) => s.savedAddresses)\n const selectedId = useDeliveryStore((s) => s.selectedAddressId)\n const selectAddress = useDeliveryStore((s) => s.selectAddress)\n const removeAddress = useDeliveryStore((s) => s.removeAddress)\n const saveAddress = useDeliveryStore((s) => s.saveAddress)\n const current = useDeliveryStore((s) => s.address)\n const subtotal = selectSubtotal(useCartStore())\n const customerId = useSessionStore((s) => s.customerId)\n const accountBook = useAccountAddresses(customerId)\n\n // The address on screen that is NOT in the book — typed at checkout, or a\n // CEP looked up without a number. It is what the strip shows, so it is what\n // the sheet must show first; opening straight on «Novo endereço» hid it.\n const unsavedCurrent = current && !saved.some((a) => a.id === selectedId) ? current : null\n // Account addresses not already copied into this browser's book.\n const fromAccount = accountBook.filter((a) => !saved.some((b) =>\n normalizePostalCode(b.postalCode) === normalizePostalCode(a.postalCode)\n && b.number.trim().toLowerCase() === (a.number ?? '').trim().toLowerCase()))\n\n const nothingToList = saved.length === 0 && !unsavedCurrent && fromAccount.length === 0 && !customerId\n // Nothing at all to choose from: the form IS the screen.\n const [editing, setEditing] = React.useState<null | { initial?: Partial<SavedDeliveryAddress>; replaces?: string }>(\n nothingToList && !onSignIn ? {} : null,\n )\n\n function pickAccountAddress(a: CustomerAddress) {\n const id = saveAddress({\n label: a.label ?? null,\n postalCode: a.postalCode,\n street: a.street,\n number: a.number ?? '',\n complement: a.complement ?? null,\n reference: null,\n district: a.district ?? '',\n city: a.city,\n state: a.state,\n country: a.country,\n })\n void selectAddress(id, subtotal)\n onClose()\n }\n\n // Esc and a tap outside close it, as the account drawer does; inside the\n // form, Esc steps back to the list first.\n const closeRef = React.useRef<() => void>(() => {})\n closeRef.current = () => { if (editing && !nothingToList) setEditing(null); else onClose() }\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') closeRef.current() }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [])\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Endereço de entrega\"\n data-testid={TID.addressSheet}\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n className=\"fixed inset-0 z-50 flex flex-col justify-end bg-black/50 sm:items-center sm:justify-center sm:p-6\"\n >\n <div className=\"flex max-h-[85vh] w-full flex-col overflow-hidden rounded-t-2xl bg-background sm:max-w-md sm:rounded-2xl\">\n <div className=\"flex items-center gap-2 border-b border-border p-4\">\n {editing && !nothingToList && (\n <button\n type=\"button\"\n onClick={() => setEditing(null)}\n aria-label=\"Voltar\"\n className=\"-ml-2 grid h-9 w-9 place-items-center rounded-full\"\n >\n <ChevronLeft className=\"h-5 w-5\" />\n </button>\n )}\n <h2 className=\"flex-1 text-lg font-semibold\">\n {editing ? (editing.replaces ? 'Editar endereço' : 'Novo endereço') : 'Onde você quer receber?'}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n className=\"-mr-2 grid h-9 w-9 place-items-center rounded-full\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n {editing ? (\n <AddressForm\n initial={editing.initial}\n replaces={editing.replaces}\n onDone={() => {\n setEditing(null)\n onClose()\n }}\n />\n ) : (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n {unsavedCurrent && (\n <section className=\"mb-4\" data-testid=\"address-current\">\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Endereço atual</h3>\n <div className=\"flex items-start gap-3 rounded-lg border border-primary p-3\">\n <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">{unsavedCurrent.street}</span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {[unsavedCurrent.district, unsavedCurrent.city].filter(Boolean).join(' · ')}\n </span>\n </span>\n <button\n type=\"button\"\n data-testid=\"address-complete-current\"\n onClick={() => setEditing({ initial: { postalCode: unsavedCurrent.postalCode } })}\n className=\"shrink-0 text-sm font-semibold text-primary\"\n >\n Completar\n </button>\n </div>\n </section>\n )}\n\n {saved.length > 0 && (\n <section className=\"mb-4\">\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Seus endereços</h3>\n <ul className=\"space-y-2\">\n {saved.map((address) => (\n <li key={address.id} className=\"flex items-start gap-1\">\n <button\n type=\"button\"\n data-testid={TID.savedAddress(address.id)}\n aria-pressed={selectedId === address.id}\n onClick={() => {\n void selectAddress(address.id, subtotal)\n onClose()\n }}\n className={`flex min-w-0 flex-1 items-start gap-3 rounded-lg border p-3 text-left ${\n selectedId === address.id ? 'border-primary' : 'border-border'\n }`}\n >\n {selectedId === address.id\n ? <Check className=\"mt-0.5 h-5 w-5 shrink-0 text-primary\" />\n : <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-muted-foreground\" />}\n <AddressLines address={address} />\n </button>\n <button\n type=\"button\"\n data-testid={`edit-address-${address.id}`}\n onClick={() => setEditing({ initial: address, replaces: address.id })}\n aria-label={`Editar ${address.street}, ${address.number}`}\n className=\"mt-1 grid h-10 w-10 shrink-0 place-items-center rounded-full text-muted-foreground\"\n >\n <Pencil className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeAddress(address.id)}\n aria-label={`Remover ${address.street}, ${address.number}`}\n className=\"mt-1 grid h-10 w-10 shrink-0 place-items-center rounded-full text-muted-foreground\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {fromAccount.length > 0 && (\n <section className=\"mb-4\" data-testid=\"address-account-book\">\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Da sua conta</h3>\n <ul className=\"space-y-2\">\n {fromAccount.map((address) => (\n <li key={address.id}>\n <button\n type=\"button\"\n onClick={() => pickAccountAddress(address)}\n className=\"flex w-full min-w-0 items-start gap-3 rounded-lg border border-border p-3 text-left\"\n >\n <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-muted-foreground\" />\n <AddressLines address={{\n label: address.label ?? null,\n street: address.street,\n number: address.number ?? '',\n complement: address.complement ?? null,\n district: address.district ?? '',\n city: address.city,\n reference: null,\n }} />\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {!customerId && onSignIn && (\n <div data-testid=\"address-sign-in\" className=\"mb-4 rounded-lg bg-muted/40 p-3 text-sm\">\n <p>Entre na sua conta para usar os endereços salvos nela.</p>\n <button\n type=\"button\"\n onClick={onSignIn}\n className=\"mt-2 font-semibold text-primary\"\n >\n Entrar ou criar conta\n </button>\n </div>\n )}\n\n <button\n type=\"button\"\n data-testid={TID.addressAddNew}\n onClick={() => setEditing({})}\n className=\"flex w-full items-center justify-center gap-2 rounded-full border border-border px-4 py-3 text-sm font-semibold\"\n >\n <Plus className=\"h-4 w-4\" />\n Adicionar novo endereço\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nfunction AddressLines({ address }: {\n address: Pick<SavedDeliveryAddress, 'label' | 'street' | 'number' | 'complement' | 'district' | 'city' | 'reference'>\n}) {\n return (\n <span className=\"min-w-0 flex-1\">\n {address.label && <span className=\"block text-sm font-semibold\">{address.label}</span>}\n <span className=\"block truncate text-sm\">\n {address.street}{address.number ? `, ${address.number}` : ''}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {[address.complement, address.district, address.city].filter(Boolean).join(' · ')}\n </span>\n {address.reference && (\n <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">{address.reference}</span>\n )}\n </span>\n )\n}\n\n/**\n * The signed-in customer's own address book (public.addresses, RLS-scoped to\n * them). Empty for a guest, and on any failure: the browser's book still works.\n */\nexport function useAccountAddresses(customerId: string | null): CustomerAddress[] {\n const [rows, setRows] = React.useState<CustomerAddress[]>([])\n React.useEffect(() => {\n if (!customerId) { setRows([]); return }\n const shop = getShopProvider()\n if (typeof shop.listCustomerAddresses !== 'function') return\n let cancelled = false\n shop.listCustomerAddresses(customerId)\n .then((list) => { if (!cancelled) setRows(list) })\n .catch(() => { if (!cancelled) setRows([]) })\n return () => { cancelled = true }\n }, [customerId])\n return rows\n}\n\n/**\n * CEP primeiro, resto depois.\n *\n * Uma tela só com sete campos, sendo quatro deles preenchíveis por consulta, é\n * a forma mais rápida de fazer alguém desistir. Os campos da consulta ficam\n * VISÍVEIS mas em leitura: a pessoa precisa conferir que o CEP achou a rua\n * certa — e conferir é diferente de digitar.\n */\nfunction AddressForm({ onDone, initial, replaces }: {\n onDone: () => void\n /** Prefill: a saved address being edited, or the current one being completed. */\n initial?: Partial<SavedDeliveryAddress>\n /** The saved address this form rewrites; removed when the new one is saved. */\n replaces?: string\n}) {\n const resolve = useDeliveryStore((s) => s.resolve)\n const saveAddress = useDeliveryStore((s) => s.saveAddress)\n const removeAddress = useDeliveryStore((s) => s.removeAddress)\n const looked = useDeliveryStore((s) => s.address)\n const status = useDeliveryStore((s) => s.status)\n const storeError = useDeliveryStore((s) => s.error)\n const refusedZone = useDeliveryStore((s) => s.refusedZone)\n const subtotal = selectSubtotal(useCartStore())\n\n const [cep, setCep] = React.useState(initial?.postalCode ? formatPostalCode(initial.postalCode) : '')\n const [number, setNumber] = React.useState(initial?.number ?? '')\n const [complement, setComplement] = React.useState(initial?.complement ?? '')\n const [reference, setReference] = React.useState(initial?.reference ?? '')\n const [label, setLabel] = React.useState<string>(initial?.label ?? '')\n const [touched, setTouched] = React.useState(false)\n const numberRef = React.useRef<HTMLInputElement>(null)\n\n const digits = normalizePostalCode(cep)\n const found = Boolean(looked) && normalizePostalCode(looked!.postalCode) === digits\n\n // O foco cai no número assim que a rua chega. É o único campo que sobrou\n // para digitar, e fazer a pessoa procurá-lo desfaz o que a consulta ganhou.\n React.useEffect(() => {\n if (found) numberRef.current?.focus()\n }, [found])\n\n async function lookUp() {\n if (digits.length !== 8) return\n await resolve(digits, subtotal)\n }\n\n // A prefilled CEP is looked up at once: editing an address or completing the\n // current one must land on the number, not on a «Buscar» button.\n const prefilled = React.useRef(false)\n React.useEffect(() => {\n if (prefilled.current || !initial?.postalCode) return\n prefilled.current = true\n if (!found) void lookUp()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function submit(event: React.FormEvent) {\n event.preventDefault()\n setTouched(true)\n if (!found || !number.trim()) return\n if (replaces) removeAddress(replaces)\n saveAddress({\n label: label.trim() || null,\n postalCode: looked!.postalCode,\n street: looked!.street,\n number: number.trim(),\n complement: complement.trim() || null,\n reference: reference.trim() || null,\n district: looked!.district,\n city: looked!.city,\n state: looked!.state,\n })\n onDone()\n }\n\n const numberMissing = touched && !number.trim()\n\n return (\n <form onSubmit={submit} className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <label htmlFor=\"address-cep\" className=\"text-sm font-medium\">\n CEP\n </label>\n <div className=\"mt-1 flex gap-2\">\n <input\n id=\"address-cep\"\n data-testid={TID.addressCep}\n value={cep}\n onChange={(e) => setCep(formatPostalCode(e.target.value))}\n onBlur={() => void lookUp()}\n // inputMode numérico: um teclado alfabético para oito dígitos é o\n // erro de formulário mobile mais fácil de cometer e de corrigir.\n inputMode=\"numeric\"\n autoComplete=\"postal-code\"\n placeholder=\"00000-000\"\n className=\"h-12 flex-1 rounded-lg border border-border bg-transparent px-3 text-base\"\n />\n <button\n type=\"button\"\n onClick={() => void lookUp()}\n disabled={digits.length !== 8 || status === 'loading'}\n className=\"h-12 rounded-lg bg-primary px-4 text-sm font-semibold text-primary-foreground disabled:opacity-40\"\n >\n {status === 'loading' ? 'Buscando…' : 'Buscar'}\n </button>\n </div>\n {storeError && <p className=\"mt-2 text-sm text-destructive\">{storeError}</p>}\n {/* A recusa da loja (0048) aparece aqui e não só no checkout: descobrir\n que não entregam no seu CEP depois de montar o carrinho é a pior hora\n possível para descobrir. */}\n {refusedZone && (\n <p className=\"mt-2 text-sm text-destructive\">\n Ainda não entregamos nessa região ({refusedZone}).\n </p>\n )}\n\n {found && (\n <>\n <p className=\"mt-4 rounded-lg bg-muted/40 p-3 text-sm\">\n <span className=\"block font-medium\">{looked!.street}</span>\n <span className=\"block text-muted-foreground\">\n {looked!.district} · {looked!.city} — {looked!.state}\n </span>\n </p>\n\n <div className=\"mt-4 grid grid-cols-2 gap-3\">\n <div>\n <label htmlFor=\"address-number\" className=\"text-sm font-medium\">\n Número\n </label>\n <input\n id=\"address-number\"\n ref={numberRef}\n data-testid={TID.addressNumber}\n value={number}\n onChange={(e) => setNumber(e.target.value)}\n inputMode=\"numeric\"\n autoComplete=\"address-line2\"\n aria-invalid={numberMissing || undefined}\n aria-describedby={numberMissing ? 'address-number-error' : undefined}\n className={`mt-1 h-12 w-full rounded-lg border bg-transparent px-3 text-base ${\n numberMissing ? 'border-destructive' : 'border-border'\n }`}\n />\n {numberMissing && (\n // Junto do campo e não num resumo no topo: o erro é sobre ESTE\n // campo, e a pessoa está olhando para ele.\n <p id=\"address-number-error\" className=\"mt-1 text-xs text-destructive\">\n Informe o número.\n </p>\n )}\n </div>\n <div>\n <label htmlFor=\"address-complement\" className=\"text-sm font-medium\">\n Complemento\n </label>\n <input\n id=\"address-complement\"\n data-testid={TID.addressComplement}\n value={complement}\n onChange={(e) => setComplement(e.target.value)}\n placeholder=\"Apto, bloco…\"\n className=\"mt-1 h-12 w-full rounded-lg border border-border bg-transparent px-3 text-base\"\n />\n </div>\n </div>\n\n <div className=\"mt-4\">\n <label htmlFor=\"address-reference\" className=\"text-sm font-medium\">\n Ponto de referência\n </label>\n <input\n id=\"address-reference\"\n data-testid={TID.addressReference}\n value={reference}\n onChange={(e) => setReference(e.target.value)}\n placeholder=\"Portão azul, ao lado da padaria\"\n className=\"mt-1 h-12 w-full rounded-lg border border-border bg-transparent px-3 text-base\"\n />\n </div>\n\n <fieldset className=\"mt-4\">\n <legend className=\"text-sm font-medium\">Salvar como</legend>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {LABELS.map((name) => (\n <button\n key={name}\n type=\"button\"\n aria-pressed={label === name}\n onClick={() => setLabel(label === name ? '' : name)}\n className={`rounded-full px-4 py-2 text-sm font-medium ${\n label === name\n ? 'bg-foreground text-background'\n : 'border border-border text-muted-foreground'\n }`}\n >\n {name}\n </button>\n ))}\n <input\n value={LABELS.includes(label as (typeof LABELS)[number]) ? '' : label}\n onChange={(e) => setLabel(e.target.value)}\n placeholder=\"Outro\"\n aria-label=\"Outro apelido\"\n className=\"h-10 min-w-24 flex-1 rounded-full border border-border bg-transparent px-4 text-sm\"\n />\n </div>\n </fieldset>\n\n <button\n type=\"submit\"\n data-testid={TID.addressSave}\n className=\"mt-6 h-12 w-full rounded-full bg-primary font-semibold text-primary-foreground\"\n >\n Salvar endereço\n </button>\n </>\n )}\n </form>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/delivery/AddressSheet.tsx"],"names":[],"mappings":"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","file":"chunk-EVQYGOB2.js","sourcesContent":["import React from 'react'\nimport { Check, ChevronLeft, MapPin, Pencil, Plus, Trash2, X } from 'lucide-react'\nimport { formatPostalCode, normalizePostalCode } from '@fayz-ai/core'\nimport { useDeliveryStore, type SavedDeliveryAddress } from '../../stores/delivery.store'\nimport { useCartStore, selectSubtotal } from '../../stores/cart.store'\nimport { TID } from '../../lib/testids'\nimport { useSessionStore } from '../../stores/session.store'\nimport { getShopProvider } from '@fayz-ai/shop/runtime'\nimport type { CustomerAddress } from '@fayz-ai/shop/types'\n\n/** Os apelidos que quase todo mundo usa. \"Outro\" abre o campo livre. */\nconst LABELS = ['Casa', 'Trabalho'] as const\n\n/**\n * \"Onde você quer receber?\" — o caderno de endereços do navegador.\n *\n * Copiado do fluxo que os apps de delivery usam, e a razão de ele ser assim é\n * a ordem das perguntas: o CEP resolve rua, bairro e cidade de graça, então a\n * primeira tela pede só o CEP; a segunda pede exatamente o que nenhuma consulta\n * de CEP sabe — número, complemento e ponto de referência — e o número é o\n * único obrigatório.\n *\n * O que faz isso valer a pena é a terceira visita: quem já salvou não digita\n * nada, escolhe da lista. Um checkout que pede o endereço inteiro toda vez é o\n * atrito que faz a pessoa voltar para o app que já sabe onde ela mora.\n *\n * Fica no NAVEGADOR, e é uma escolha, não uma limitação aceita em silêncio: no\n * delivery o endereço vem antes do login. O caderno da conta (`CustomerAddress`)\n * continua existindo e continua ganhando no checkout quando existe.\n */\nexport function AddressSheet({ onClose, onSignIn }: {\n onClose: () => void\n /** Opens the sign-in modal; absent, the signed-out prompt is not drawn. */\n onSignIn?: () => void\n}) {\n const saved = useDeliveryStore((s) => s.savedAddresses)\n const selectedId = useDeliveryStore((s) => s.selectedAddressId)\n const selectAddress = useDeliveryStore((s) => s.selectAddress)\n const removeAddress = useDeliveryStore((s) => s.removeAddress)\n const saveAddress = useDeliveryStore((s) => s.saveAddress)\n const current = useDeliveryStore((s) => s.address)\n const subtotal = selectSubtotal(useCartStore())\n const customerId = useSessionStore((s) => s.customerId)\n const accountBook = useAccountAddresses(customerId)\n\n // The address on screen that is NOT in the book — typed at checkout, or a\n // CEP looked up without a number. It is what the strip shows, so it is what\n // the sheet must show first; opening straight on «Novo endereço» hid it.\n const unsavedCurrent = current && !saved.some((a) => a.id === selectedId) ? current : null\n // Account addresses not already copied into this browser's book.\n const fromAccount = accountBook.filter((a) => !saved.some((b) =>\n normalizePostalCode(b.postalCode) === normalizePostalCode(a.postalCode)\n && b.number.trim().toLowerCase() === (a.number ?? '').trim().toLowerCase()))\n\n const nothingToList = saved.length === 0 && !unsavedCurrent && fromAccount.length === 0 && !customerId\n // Nothing at all to choose from: the form IS the screen.\n const [editing, setEditing] = React.useState<null | { initial?: Partial<SavedDeliveryAddress>; replaces?: string }>(\n nothingToList && !onSignIn ? {} : null,\n )\n\n function pickAccountAddress(a: CustomerAddress) {\n const id = saveAddress({\n label: a.label ?? null,\n postalCode: a.postalCode,\n street: a.street,\n number: a.number ?? '',\n complement: a.complement ?? null,\n reference: null,\n district: a.district ?? '',\n city: a.city,\n state: a.state,\n country: a.country,\n })\n void selectAddress(id, subtotal)\n onClose()\n }\n\n // Esc and a tap outside close it, as the account drawer does; inside the\n // form, Esc steps back to the list first.\n const closeRef = React.useRef<() => void>(() => {})\n closeRef.current = () => { if (editing && !nothingToList) setEditing(null); else onClose() }\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') closeRef.current() }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [])\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Endereço de entrega\"\n data-testid={TID.addressSheet}\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n className=\"fixed inset-0 z-50 flex flex-col justify-end bg-black/50 sm:items-center sm:justify-center sm:p-6\"\n >\n <div className=\"flex max-h-[85vh] w-full flex-col overflow-hidden rounded-t-2xl bg-background sm:max-w-md sm:rounded-2xl\">\n <div className=\"flex items-center gap-2 border-b border-border p-4\">\n {editing && !nothingToList && (\n <button\n type=\"button\"\n onClick={() => setEditing(null)}\n aria-label=\"Voltar\"\n className=\"-ml-2 grid h-9 w-9 place-items-center rounded-full\"\n >\n <ChevronLeft className=\"h-5 w-5\" />\n </button>\n )}\n <h2 className=\"flex-1 text-lg font-semibold\">\n {editing ? (editing.replaces ? 'Editar endereço' : 'Novo endereço') : 'Onde você quer receber?'}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Fechar\"\n className=\"-mr-2 grid h-9 w-9 place-items-center rounded-full\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n\n {editing ? (\n <AddressForm\n initial={editing.initial}\n replaces={editing.replaces}\n onDone={() => {\n setEditing(null)\n onClose()\n }}\n />\n ) : (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n {unsavedCurrent && (\n <section className=\"mb-4\" data-testid=\"address-current\">\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Endereço atual</h3>\n <div className=\"flex items-start gap-3 rounded-lg border border-primary p-3\">\n <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">{unsavedCurrent.street}</span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {[unsavedCurrent.district, unsavedCurrent.city].filter(Boolean).join(' · ')}\n </span>\n </span>\n <button\n type=\"button\"\n data-testid=\"address-complete-current\"\n onClick={() => setEditing({ initial: { postalCode: unsavedCurrent.postalCode } })}\n className=\"shrink-0 text-sm font-semibold text-primary\"\n >\n Completar\n </button>\n </div>\n </section>\n )}\n\n {saved.length > 0 && (\n <section className=\"mb-4\">\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Seus endereços</h3>\n <ul className=\"space-y-2\">\n {saved.map((address) => (\n <li key={address.id} className=\"flex items-start gap-1\">\n <button\n type=\"button\"\n data-testid={TID.savedAddress(address.id)}\n aria-pressed={selectedId === address.id}\n onClick={() => {\n void selectAddress(address.id, subtotal)\n onClose()\n }}\n className={`flex min-w-0 flex-1 items-start gap-3 rounded-lg border p-3 text-left ${\n selectedId === address.id ? 'border-primary' : 'border-border'\n }`}\n >\n {selectedId === address.id\n ? <Check className=\"mt-0.5 h-5 w-5 shrink-0 text-primary\" />\n : <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-muted-foreground\" />}\n <AddressLines address={address} />\n </button>\n <button\n type=\"button\"\n data-testid={`edit-address-${address.id}`}\n onClick={() => setEditing({ initial: address, replaces: address.id })}\n aria-label={`Editar ${address.street}, ${address.number}`}\n className=\"mt-1 grid h-10 w-10 shrink-0 place-items-center rounded-full text-muted-foreground\"\n >\n <Pencil className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => removeAddress(address.id)}\n aria-label={`Remover ${address.street}, ${address.number}`}\n className=\"mt-1 grid h-10 w-10 shrink-0 place-items-center rounded-full text-muted-foreground\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {fromAccount.length > 0 && (\n <section className=\"mb-4\" data-testid=\"address-account-book\">\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Da sua conta</h3>\n <ul className=\"space-y-2\">\n {fromAccount.map((address) => (\n <li key={address.id}>\n <button\n type=\"button\"\n onClick={() => pickAccountAddress(address)}\n className=\"flex w-full min-w-0 items-start gap-3 rounded-lg border border-border p-3 text-left\"\n >\n <MapPin className=\"mt-0.5 h-5 w-5 shrink-0 text-muted-foreground\" />\n <AddressLines address={{\n label: address.label ?? null,\n street: address.street,\n number: address.number ?? '',\n complement: address.complement ?? null,\n district: address.district ?? '',\n city: address.city,\n reference: null,\n }} />\n </button>\n </li>\n ))}\n </ul>\n </section>\n )}\n\n {!customerId && onSignIn && (\n <div data-testid=\"address-sign-in\" className=\"mb-4 rounded-lg bg-muted/40 p-3 text-sm\">\n <p>Entre na sua conta para usar os endereços salvos nela.</p>\n <button\n type=\"button\"\n onClick={onSignIn}\n className=\"mt-2 font-semibold text-primary\"\n >\n Entrar ou criar conta\n </button>\n </div>\n )}\n\n <button\n type=\"button\"\n data-testid={TID.addressAddNew}\n onClick={() => setEditing({})}\n className=\"flex w-full items-center justify-center gap-2 rounded-full border border-border px-4 py-3 text-sm font-semibold\"\n >\n <Plus className=\"h-4 w-4\" />\n Adicionar novo endereço\n </button>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nfunction AddressLines({ address }: {\n address: Pick<SavedDeliveryAddress, 'label' | 'street' | 'number' | 'complement' | 'district' | 'city' | 'reference'>\n}) {\n return (\n <span className=\"min-w-0 flex-1\">\n {address.label && <span className=\"block text-sm font-semibold\">{address.label}</span>}\n <span className=\"block truncate text-sm\">\n {address.street}{address.number ? `, ${address.number}` : ''}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {[address.complement, address.district, address.city].filter(Boolean).join(' · ')}\n </span>\n {address.reference && (\n <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">{address.reference}</span>\n )}\n </span>\n )\n}\n\n/**\n * The signed-in customer's own address book (public.addresses, RLS-scoped to\n * them). Empty for a guest, and on any failure: the browser's book still works.\n */\nexport function useAccountAddresses(customerId: string | null): CustomerAddress[] {\n const [rows, setRows] = React.useState<CustomerAddress[]>([])\n React.useEffect(() => {\n if (!customerId) { setRows([]); return }\n const shop = getShopProvider()\n if (typeof shop.listCustomerAddresses !== 'function') return\n let cancelled = false\n shop.listCustomerAddresses(customerId)\n .then((list) => { if (!cancelled) setRows(list) })\n .catch(() => { if (!cancelled) setRows([]) })\n return () => { cancelled = true }\n }, [customerId])\n return rows\n}\n\n/**\n * CEP primeiro, resto depois.\n *\n * Uma tela só com sete campos, sendo quatro deles preenchíveis por consulta, é\n * a forma mais rápida de fazer alguém desistir. Os campos da consulta ficam\n * VISÍVEIS mas em leitura: a pessoa precisa conferir que o CEP achou a rua\n * certa — e conferir é diferente de digitar.\n */\nfunction AddressForm({ onDone, initial, replaces }: {\n onDone: () => void\n /** Prefill: a saved address being edited, or the current one being completed. */\n initial?: Partial<SavedDeliveryAddress>\n /** The saved address this form rewrites; removed when the new one is saved. */\n replaces?: string\n}) {\n const resolve = useDeliveryStore((s) => s.resolve)\n const saveAddress = useDeliveryStore((s) => s.saveAddress)\n const removeAddress = useDeliveryStore((s) => s.removeAddress)\n const looked = useDeliveryStore((s) => s.address)\n const status = useDeliveryStore((s) => s.status)\n const storeError = useDeliveryStore((s) => s.error)\n const refusedZone = useDeliveryStore((s) => s.refusedZone)\n const subtotal = selectSubtotal(useCartStore())\n\n const [cep, setCep] = React.useState(initial?.postalCode ? formatPostalCode(initial.postalCode) : '')\n const [number, setNumber] = React.useState(initial?.number ?? '')\n const [complement, setComplement] = React.useState(initial?.complement ?? '')\n const [reference, setReference] = React.useState(initial?.reference ?? '')\n const [label, setLabel] = React.useState<string>(initial?.label ?? '')\n const [touched, setTouched] = React.useState(false)\n const numberRef = React.useRef<HTMLInputElement>(null)\n\n const digits = normalizePostalCode(cep)\n const found = Boolean(looked) && normalizePostalCode(looked!.postalCode) === digits\n\n // O foco cai no número assim que a rua chega. É o único campo que sobrou\n // para digitar, e fazer a pessoa procurá-lo desfaz o que a consulta ganhou.\n React.useEffect(() => {\n if (found) numberRef.current?.focus()\n }, [found])\n\n async function lookUp() {\n if (digits.length !== 8) return\n await resolve(digits, subtotal)\n }\n\n // A prefilled CEP is looked up at once: editing an address or completing the\n // current one must land on the number, not on a «Buscar» button.\n const prefilled = React.useRef(false)\n React.useEffect(() => {\n if (prefilled.current || !initial?.postalCode) return\n prefilled.current = true\n if (!found) void lookUp()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n function submit(event: React.FormEvent) {\n event.preventDefault()\n setTouched(true)\n if (!found || !number.trim()) return\n if (replaces) removeAddress(replaces)\n saveAddress({\n label: label.trim() || null,\n postalCode: looked!.postalCode,\n street: looked!.street,\n number: number.trim(),\n complement: complement.trim() || null,\n reference: reference.trim() || null,\n district: looked!.district,\n city: looked!.city,\n state: looked!.state,\n })\n onDone()\n }\n\n const numberMissing = touched && !number.trim()\n\n return (\n <form onSubmit={submit} className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <label htmlFor=\"address-cep\" className=\"text-sm font-medium\">\n CEP\n </label>\n <div className=\"mt-1 flex gap-2\">\n <input\n id=\"address-cep\"\n data-testid={TID.addressCep}\n value={cep}\n onChange={(e) => setCep(formatPostalCode(e.target.value))}\n onBlur={() => void lookUp()}\n // inputMode numérico: um teclado alfabético para oito dígitos é o\n // erro de formulário mobile mais fácil de cometer e de corrigir.\n inputMode=\"numeric\"\n autoComplete=\"postal-code\"\n placeholder=\"00000-000\"\n className=\"h-12 flex-1 rounded-lg border border-border bg-transparent px-3 text-base\"\n />\n <button\n type=\"button\"\n onClick={() => void lookUp()}\n disabled={digits.length !== 8 || status === 'loading'}\n className=\"h-12 rounded-lg bg-primary px-4 text-sm font-semibold text-primary-foreground disabled:opacity-40\"\n >\n {status === 'loading' ? 'Buscando…' : 'Buscar'}\n </button>\n </div>\n {storeError && <p className=\"mt-2 text-sm text-destructive\">{storeError}</p>}\n {/* A recusa da loja (0048) aparece aqui e não só no checkout: descobrir\n que não entregam no seu CEP depois de montar o carrinho é a pior hora\n possível para descobrir. */}\n {refusedZone && (\n <p className=\"mt-2 text-sm text-destructive\">\n Ainda não entregamos nessa região ({refusedZone}).\n </p>\n )}\n\n {found && (\n <>\n <p className=\"mt-4 rounded-lg bg-muted/40 p-3 text-sm\">\n <span className=\"block font-medium\">{looked!.street}</span>\n <span className=\"block text-muted-foreground\">\n {looked!.district} · {looked!.city} — {looked!.state}\n </span>\n </p>\n\n <div className=\"mt-4 grid grid-cols-2 gap-3\">\n <div>\n <label htmlFor=\"address-number\" className=\"text-sm font-medium\">\n Número\n </label>\n <input\n id=\"address-number\"\n ref={numberRef}\n data-testid={TID.addressNumber}\n value={number}\n onChange={(e) => setNumber(e.target.value)}\n inputMode=\"numeric\"\n autoComplete=\"address-line2\"\n aria-invalid={numberMissing || undefined}\n aria-describedby={numberMissing ? 'address-number-error' : undefined}\n className={`mt-1 h-12 w-full rounded-lg border bg-transparent px-3 text-base ${\n numberMissing ? 'border-destructive' : 'border-border'\n }`}\n />\n {numberMissing && (\n // Junto do campo e não num resumo no topo: o erro é sobre ESTE\n // campo, e a pessoa está olhando para ele.\n <p id=\"address-number-error\" className=\"mt-1 text-xs text-destructive\">\n Informe o número.\n </p>\n )}\n </div>\n <div>\n <label htmlFor=\"address-complement\" className=\"text-sm font-medium\">\n Complemento\n </label>\n <input\n id=\"address-complement\"\n data-testid={TID.addressComplement}\n value={complement}\n onChange={(e) => setComplement(e.target.value)}\n placeholder=\"Apto, bloco…\"\n className=\"mt-1 h-12 w-full rounded-lg border border-border bg-transparent px-3 text-base\"\n />\n </div>\n </div>\n\n <div className=\"mt-4\">\n <label htmlFor=\"address-reference\" className=\"text-sm font-medium\">\n Ponto de referência\n </label>\n <input\n id=\"address-reference\"\n data-testid={TID.addressReference}\n value={reference}\n onChange={(e) => setReference(e.target.value)}\n placeholder=\"Portão azul, ao lado da padaria\"\n className=\"mt-1 h-12 w-full rounded-lg border border-border bg-transparent px-3 text-base\"\n />\n </div>\n\n <fieldset className=\"mt-4\">\n <legend className=\"text-sm font-medium\">Salvar como</legend>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {LABELS.map((name) => (\n <button\n key={name}\n type=\"button\"\n aria-pressed={label === name}\n onClick={() => setLabel(label === name ? '' : name)}\n className={`rounded-full px-4 py-2 text-sm font-medium ${\n label === name\n ? 'bg-foreground text-background'\n : 'border border-border text-muted-foreground'\n }`}\n >\n {name}\n </button>\n ))}\n <input\n value={LABELS.includes(label as (typeof LABELS)[number]) ? '' : label}\n onChange={(e) => setLabel(e.target.value)}\n placeholder=\"Outro\"\n aria-label=\"Outro apelido\"\n className=\"h-10 min-w-24 flex-1 rounded-full border border-border bg-transparent px-4 text-sm\"\n />\n </div>\n </fieldset>\n\n <button\n type=\"submit\"\n data-testid={TID.addressSave}\n className=\"mt-6 h-12 w-full rounded-full bg-primary font-semibold text-primary-foreground\"\n >\n Salvar endereço\n </button>\n </>\n )}\n </form>\n )\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { useMyOrders } from './chunk-
|
|
2
|
-
import { CustomerAccountShell, financialStatusBadge, OrderTrackingTimeline } from './chunk-
|
|
1
|
+
import { useMyOrders } from './chunk-3JAOGX7M.js';
|
|
2
|
+
import { CustomerAccountShell, financialStatusBadge, OrderTrackingTimeline } from './chunk-6MA7YLPR.js';
|
|
3
3
|
import { SkeletonGroup, Skeleton } from './chunk-FCPOPWG3.js';
|
|
4
|
-
import { useAccountAddresses } from './chunk-
|
|
5
|
-
import { useDeliveryStore } from './chunk-
|
|
4
|
+
import { useAccountAddresses } from './chunk-EVQYGOB2.js';
|
|
5
|
+
import { useDeliveryStore } from './chunk-UHYQNPXO.js';
|
|
6
6
|
import { parseAccountSection } from './chunk-DVQHKNNX.js';
|
|
7
|
-
import { useSessionStore, useStorefrontHead, TID, SmoothImage, signUpCustomer, establishCustomerSession, EmailConfirmationRequiredError, formatMoney } from './chunk-
|
|
8
|
-
import { useStorefrontConfig, useRoutePath, Link } from './chunk-
|
|
7
|
+
import { useSessionStore, useStorefrontHead, TID, SmoothImage, signUpCustomer, establishCustomerSession, EmailConfirmationRequiredError, formatMoney } from './chunk-27C7DVHW.js';
|
|
8
|
+
import { useStorefrontConfig, useRoutePath, Link } from './chunk-ILFYNKT2.js';
|
|
9
9
|
import React, { useState } from 'react';
|
|
10
10
|
import { Package, MapPin, CreditCard, QrCode } from 'lucide-react';
|
|
11
11
|
import { getShopProvider } from '@fayz-ai/shop/runtime';
|
|
@@ -450,5 +450,5 @@ function MyPurchasesPage() {
|
|
|
450
450
|
}
|
|
451
451
|
|
|
452
452
|
export { MyPurchasesPage };
|
|
453
|
-
//# sourceMappingURL=chunk-
|
|
454
|
-
//# sourceMappingURL=chunk-
|
|
453
|
+
//# sourceMappingURL=chunk-F3JV7A2A.js.map
|
|
454
|
+
//# sourceMappingURL=chunk-F3JV7A2A.js.map
|