@fluid-app/portal-sdk 0.1.511 → 0.1.513
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/{FluidProvider-BiCeYuLV.mjs → FluidProvider-B0sYplaz.mjs} +46 -36
- package/dist/{FluidProvider-BiCeYuLV.mjs.map → FluidProvider-B0sYplaz.mjs.map} +1 -1
- package/dist/{FluidProvider--nibp8IV.cjs → FluidProvider-BwEU7ZnV.cjs} +46 -36
- package/dist/{FluidProvider--nibp8IV.cjs.map → FluidProvider-BwEU7ZnV.cjs.map} +1 -1
- package/dist/{MessagingScreen-BORvUGna.cjs → MessagingScreen-BfRjSfXY.cjs} +2 -2
- package/dist/{MessagingScreen-DQRVATl3.mjs → MessagingScreen-Bi6N2zQR.mjs} +2 -2
- package/dist/{MessagingScreen-DQRVATl3.mjs.map → MessagingScreen-Bi6N2zQR.mjs.map} +1 -1
- package/dist/{MessagingScreen-SUZcjJhr.cjs → MessagingScreen-R1vrbpKZ.cjs} +2 -2
- package/dist/{MessagingScreen-SUZcjJhr.cjs.map → MessagingScreen-R1vrbpKZ.cjs.map} +1 -1
- package/dist/{MessagingScreen-BqkBe42a.mjs → MessagingScreen-qtAmsYRW.mjs} +2 -2
- package/dist/{OrdersScreen-KuFZ1yvM.mjs → OrdersScreen-BRppYUSH.mjs} +2 -2
- package/dist/{OrdersScreen-CyGANI31.cjs → OrdersScreen-CneMyPsJ.cjs} +2 -2
- package/dist/{OrdersScreen-CaZvXkul.cjs → OrdersScreen-DdnaH268.cjs} +27 -18
- package/dist/OrdersScreen-DdnaH268.cjs.map +1 -0
- package/dist/{OrdersScreen-z5tc-nBP.mjs → OrdersScreen-SBn5z3R-.mjs} +27 -18
- package/dist/OrdersScreen-SBn5z3R-.mjs.map +1 -0
- package/dist/{ProfileScreen-BOjKptWG.cjs → ProfileScreen-3kUCKOuO.cjs} +2 -2
- package/dist/{ProfileScreen-BOjKptWG.cjs.map → ProfileScreen-3kUCKOuO.cjs.map} +1 -1
- package/dist/{ProfileScreen-wqtz71Jn.mjs → ProfileScreen-B4I18Rxq.mjs} +2 -2
- package/dist/{ProfileScreen-wqtz71Jn.mjs.map → ProfileScreen-B4I18Rxq.mjs.map} +1 -1
- package/dist/{ProfileScreen-BT3Mt1y1.cjs → ProfileScreen-BQRKe1mr.cjs} +3 -3
- package/dist/{ProfileScreen-CQAMGoLW.mjs → ProfileScreen-BT1-JjHU.mjs} +3 -3
- package/dist/{SubscriptionsScreen-DfoCjsPl.mjs → SubscriptionsScreen-CzTfE1Kf.mjs} +3 -3
- package/dist/{SubscriptionsScreen-DfoCjsPl.mjs.map → SubscriptionsScreen-CzTfE1Kf.mjs.map} +1 -1
- package/dist/{SubscriptionsScreen-DNPANUMS.cjs → SubscriptionsScreen-DOj34EFd.cjs} +3 -3
- package/dist/{SubscriptionsScreen-Bq6eMkoN.mjs → SubscriptionsScreen-YmhDE9at.mjs} +3 -3
- package/dist/{SubscriptionsScreen-DiF_pJWA.cjs → SubscriptionsScreen-ozxuQd4n.cjs} +3 -3
- package/dist/{SubscriptionsScreen-DiF_pJWA.cjs.map → SubscriptionsScreen-ozxuQd4n.cjs.map} +1 -1
- package/dist/{ar-a5XheqF4.cjs → ar-BRTqPIQm.cjs} +2 -1
- package/dist/ar-BRTqPIQm.cjs.map +1 -0
- package/dist/{ar-DzFfeuH6.mjs → ar-Bdmxegli.mjs} +2 -1
- package/dist/ar-Bdmxegli.mjs.map +1 -0
- package/dist/{bg-E4rjQ5VN.cjs → bg-QPLVQePh.cjs} +2 -1
- package/dist/bg-QPLVQePh.cjs.map +1 -0
- package/dist/{bg-CcHDDtuc.mjs → bg-Qa4MSxXf.mjs} +2 -1
- package/dist/bg-Qa4MSxXf.mjs.map +1 -0
- package/dist/{bn-BzPHQVQQ.cjs → bn-DHoCNlnT.cjs} +2 -1
- package/dist/bn-DHoCNlnT.cjs.map +1 -0
- package/dist/{bn-BaTYefLg.mjs → bn-u0Y6Pv02.mjs} +2 -1
- package/dist/bn-u0Y6Pv02.mjs.map +1 -0
- package/dist/{cs-BDNOATcV.cjs → cs-DPyeI1gt.cjs} +2 -1
- package/dist/cs-DPyeI1gt.cjs.map +1 -0
- package/dist/{cs-CKzroIj9.mjs → cs-Dp9PPgM6.mjs} +2 -1
- package/dist/cs-Dp9PPgM6.mjs.map +1 -0
- package/dist/{da-Cg-epQHP.cjs → da-BKrHgpc1.cjs} +2 -1
- package/dist/da-BKrHgpc1.cjs.map +1 -0
- package/dist/{da-D6jqtE6K.mjs → da-VuA-GrRb.mjs} +2 -1
- package/dist/da-VuA-GrRb.mjs.map +1 -0
- package/dist/{de-LTtnZcP6.mjs → de-9vk6k0nJ.mjs} +2 -1
- package/dist/de-9vk6k0nJ.mjs.map +1 -0
- package/dist/{de-DExsPlF0.cjs → de-BOG93PI8.cjs} +2 -1
- package/dist/de-BOG93PI8.cjs.map +1 -0
- package/dist/{el-PhsTmMc4.cjs → el-CYZv1P0r.cjs} +2 -1
- package/dist/el-CYZv1P0r.cjs.map +1 -0
- package/dist/{el-CLOA4Iht.mjs → el-DXPx1g2c.mjs} +2 -1
- package/dist/el-DXPx1g2c.mjs.map +1 -0
- package/dist/{es-CuD_WTjc.mjs → es-BB85bwJ_.mjs} +2 -1
- package/dist/es-BB85bwJ_.mjs.map +1 -0
- package/dist/{es-BO79JXnd.cjs → es-G6bSRkdk.cjs} +2 -1
- package/dist/es-G6bSRkdk.cjs.map +1 -0
- package/dist/{fi-B4gfHXKw.cjs → fi-BUV6jW3T.cjs} +2 -1
- package/dist/fi-BUV6jW3T.cjs.map +1 -0
- package/dist/{fi-D10qDpB_.mjs → fi-D-TtktPt.mjs} +2 -1
- package/dist/fi-D-TtktPt.mjs.map +1 -0
- package/dist/{fr-BLII0ePc.mjs → fr--BgxXkpf.mjs} +2 -1
- package/dist/fr--BgxXkpf.mjs.map +1 -0
- package/dist/{fr-CMBprdKc.cjs → fr-dhVoJgWK.cjs} +2 -1
- package/dist/fr-dhVoJgWK.cjs.map +1 -0
- package/dist/{he-CMDK884V.mjs → he-CDTvXkZd.mjs} +2 -1
- package/dist/he-CDTvXkZd.mjs.map +1 -0
- package/dist/{he-Cm3TmloM.cjs → he-Do9yqDxB.cjs} +2 -1
- package/dist/he-Do9yqDxB.cjs.map +1 -0
- package/dist/{hi-Cm_DH4G0.cjs → hi-AiRJhk6a.cjs} +2 -1
- package/dist/hi-AiRJhk6a.cjs.map +1 -0
- package/dist/{hi-CUx-Aq1K.mjs → hi-CjRrL1Q7.mjs} +2 -1
- package/dist/hi-CjRrL1Q7.mjs.map +1 -0
- package/dist/{hr-DBY2Lt8Y.mjs → hr-B0nd9e9C.mjs} +2 -1
- package/dist/hr-B0nd9e9C.mjs.map +1 -0
- package/dist/{hr-Bfcyy_rR.cjs → hr-DqJVAx7M.cjs} +2 -1
- package/dist/hr-DqJVAx7M.cjs.map +1 -0
- package/dist/{hu-BTYlpv8x.cjs → hu-DVgZpQ2J.cjs} +2 -1
- package/dist/hu-DVgZpQ2J.cjs.map +1 -0
- package/dist/{hu-CFdlLxix.mjs → hu-yj7Fc4o9.mjs} +2 -1
- package/dist/hu-yj7Fc4o9.mjs.map +1 -0
- package/dist/{id-DpB12DnB.cjs → id-DM2xUNOq.cjs} +2 -1
- package/dist/id-DM2xUNOq.cjs.map +1 -0
- package/dist/{id-CLnXnsUI.mjs → id-DOqWgn6h.mjs} +2 -1
- package/dist/id-DOqWgn6h.mjs.map +1 -0
- package/dist/index.cjs +14 -14
- package/dist/index.mjs +14 -14
- package/dist/{it-Nmq4disb.cjs → it-BAS4gSTn.cjs} +2 -1
- package/dist/it-BAS4gSTn.cjs.map +1 -0
- package/dist/{it-Dnm3Ubcb.mjs → it-C98SovBr.mjs} +2 -1
- package/dist/it-C98SovBr.mjs.map +1 -0
- package/dist/{ja-D__pQNSM.cjs → ja-BWYAe0zp.cjs} +2 -1
- package/dist/ja-BWYAe0zp.cjs.map +1 -0
- package/dist/{ja-ZDGpYIT9.mjs → ja-C716ev_g.mjs} +2 -1
- package/dist/ja-C716ev_g.mjs.map +1 -0
- package/dist/{ko-BAKmWypV.mjs → ko-C4vWj-M9.mjs} +2 -1
- package/dist/ko-C4vWj-M9.mjs.map +1 -0
- package/dist/{ko-BGQ9Vnh-.cjs → ko-CgTaued5.cjs} +2 -1
- package/dist/ko-CgTaued5.cjs.map +1 -0
- package/dist/{ms-6IGsCaks.mjs → ms-BY0Pxptn.mjs} +2 -1
- package/dist/ms-BY0Pxptn.mjs.map +1 -0
- package/dist/{ms-Bq2pHRM-.cjs → ms-JIbuoytI.cjs} +2 -1
- package/dist/ms-JIbuoytI.cjs.map +1 -0
- package/dist/{nl-l-MVSomn.mjs → nl-C9HE9V_v.mjs} +2 -1
- package/dist/nl-C9HE9V_v.mjs.map +1 -0
- package/dist/{nl-DHrQ875w.cjs → nl-haNh87L1.cjs} +2 -1
- package/dist/nl-haNh87L1.cjs.map +1 -0
- package/dist/{no-KpFMm1AJ.mjs → no-Blcb2-Cz.mjs} +2 -1
- package/dist/no-Blcb2-Cz.mjs.map +1 -0
- package/dist/{no-R3-EB5Co.cjs → no-CzSXTPnT.cjs} +2 -1
- package/dist/no-CzSXTPnT.cjs.map +1 -0
- package/dist/{pl-Bca2Pq5-.mjs → pl-CCpUmitV.mjs} +2 -1
- package/dist/pl-CCpUmitV.mjs.map +1 -0
- package/dist/{pl-Cd_YrfPg.cjs → pl-CUPFZTSC.cjs} +2 -1
- package/dist/pl-CUPFZTSC.cjs.map +1 -0
- package/dist/{pt-CIkRdYeG.mjs → pt-CIxZRWyv.mjs} +2 -1
- package/dist/pt-CIxZRWyv.mjs.map +1 -0
- package/dist/{pt-DIiHu6Mp.cjs → pt-D3RNC97N.cjs} +2 -1
- package/dist/pt-D3RNC97N.cjs.map +1 -0
- package/dist/{ro-CiE-AxDf.mjs → ro-8P4MgS9f.mjs} +2 -1
- package/dist/ro-8P4MgS9f.mjs.map +1 -0
- package/dist/{ro-odHdLgL4.cjs → ro-D8z0fvE2.cjs} +2 -1
- package/dist/ro-D8z0fvE2.cjs.map +1 -0
- package/dist/{ru-D2OwVHj5.cjs → ru-CtmifJv4.cjs} +2 -1
- package/dist/ru-CtmifJv4.cjs.map +1 -0
- package/dist/{ru-BYdpmEiK.mjs → ru-lM0vNqkN.mjs} +2 -1
- package/dist/ru-lM0vNqkN.mjs.map +1 -0
- package/dist/{sk-DQiXACwE.mjs → sk-CgEjIW_S.mjs} +2 -1
- package/dist/sk-CgEjIW_S.mjs.map +1 -0
- package/dist/{sk-BaDSrJ8u.cjs → sk-DZxahVB3.cjs} +2 -1
- package/dist/sk-DZxahVB3.cjs.map +1 -0
- package/dist/{sv-Btkf1rNQ.mjs → sv-BWt6_WTg.mjs} +2 -1
- package/dist/sv-BWt6_WTg.mjs.map +1 -0
- package/dist/{sv-B6EUMOBb.cjs → sv-GC8OT1vt.cjs} +2 -1
- package/dist/sv-GC8OT1vt.cjs.map +1 -0
- package/dist/{th-Dhyq5YKF.mjs → th-CmUZlvpQ.mjs} +2 -1
- package/dist/th-CmUZlvpQ.mjs.map +1 -0
- package/dist/{th-D8g2gDha.cjs → th-DblYfjWT.cjs} +2 -1
- package/dist/th-DblYfjWT.cjs.map +1 -0
- package/dist/{tl-sxgiHAif.mjs → tl-C_hEnuMY.mjs} +2 -1
- package/dist/tl-C_hEnuMY.mjs.map +1 -0
- package/dist/{tl-tEocbrz2.cjs → tl-DLw-m_KB.cjs} +2 -1
- package/dist/tl-DLw-m_KB.cjs.map +1 -0
- package/dist/{tr-BtM6b91I.mjs → tr-Dfc8ydzD.mjs} +2 -1
- package/dist/tr-Dfc8ydzD.mjs.map +1 -0
- package/dist/{tr-BAyeQkex.cjs → tr-gaXTEiH1.cjs} +2 -1
- package/dist/tr-gaXTEiH1.cjs.map +1 -0
- package/dist/{uk-kvcTBcGh.cjs → uk-BA-lGtnm.cjs} +2 -1
- package/dist/uk-BA-lGtnm.cjs.map +1 -0
- package/dist/{uk-Cv_fKgTe.mjs → uk-wvHSaNjV.mjs} +2 -1
- package/dist/uk-wvHSaNjV.mjs.map +1 -0
- package/dist/{use-portal-card-add-3ds-flow-7umBe1LL.mjs → use-portal-card-add-3ds-flow-Cjbu9Jjj.mjs} +2 -2
- package/dist/{use-portal-card-add-3ds-flow-7umBe1LL.mjs.map → use-portal-card-add-3ds-flow-Cjbu9Jjj.mjs.map} +1 -1
- package/dist/{use-portal-card-add-3ds-flow-DXDPr80N.cjs → use-portal-card-add-3ds-flow-Dnrut9_J.cjs} +2 -2
- package/dist/{use-portal-card-add-3ds-flow-DXDPr80N.cjs.map → use-portal-card-add-3ds-flow-Dnrut9_J.cjs.map} +1 -1
- package/dist/{vi-D1M0pUmI.cjs → vi-5pYkRRAI.cjs} +2 -1
- package/dist/vi-5pYkRRAI.cjs.map +1 -0
- package/dist/{vi-B877Wvfs.mjs → vi-CI1vgr9K.mjs} +2 -1
- package/dist/vi-CI1vgr9K.mjs.map +1 -0
- package/dist/{zh_CN-BbzxVpys.cjs → zh_CN-CRA7Eajb.cjs} +2 -1
- package/dist/zh_CN-CRA7Eajb.cjs.map +1 -0
- package/dist/{zh_CN-DSesb0bt.mjs → zh_CN-DHfCPhjH.mjs} +2 -1
- package/dist/zh_CN-DHfCPhjH.mjs.map +1 -0
- package/dist/{zh_TW-BDxZdNH7.cjs → zh_TW-CAJScAfB.cjs} +2 -1
- package/dist/zh_TW-CAJScAfB.cjs.map +1 -0
- package/dist/{zh_TW-Bxz64eoL.mjs → zh_TW-eo1sgYEl.mjs} +2 -1
- package/dist/zh_TW-eo1sgYEl.mjs.map +1 -0
- package/package.json +12 -12
- package/dist/OrdersScreen-CaZvXkul.cjs.map +0 -1
- package/dist/OrdersScreen-z5tc-nBP.mjs.map +0 -1
- package/dist/ar-DzFfeuH6.mjs.map +0 -1
- package/dist/ar-a5XheqF4.cjs.map +0 -1
- package/dist/bg-CcHDDtuc.mjs.map +0 -1
- package/dist/bg-E4rjQ5VN.cjs.map +0 -1
- package/dist/bn-BaTYefLg.mjs.map +0 -1
- package/dist/bn-BzPHQVQQ.cjs.map +0 -1
- package/dist/cs-BDNOATcV.cjs.map +0 -1
- package/dist/cs-CKzroIj9.mjs.map +0 -1
- package/dist/da-Cg-epQHP.cjs.map +0 -1
- package/dist/da-D6jqtE6K.mjs.map +0 -1
- package/dist/de-DExsPlF0.cjs.map +0 -1
- package/dist/de-LTtnZcP6.mjs.map +0 -1
- package/dist/el-CLOA4Iht.mjs.map +0 -1
- package/dist/el-PhsTmMc4.cjs.map +0 -1
- package/dist/es-BO79JXnd.cjs.map +0 -1
- package/dist/es-CuD_WTjc.mjs.map +0 -1
- package/dist/fi-B4gfHXKw.cjs.map +0 -1
- package/dist/fi-D10qDpB_.mjs.map +0 -1
- package/dist/fr-BLII0ePc.mjs.map +0 -1
- package/dist/fr-CMBprdKc.cjs.map +0 -1
- package/dist/he-CMDK884V.mjs.map +0 -1
- package/dist/he-Cm3TmloM.cjs.map +0 -1
- package/dist/hi-CUx-Aq1K.mjs.map +0 -1
- package/dist/hi-Cm_DH4G0.cjs.map +0 -1
- package/dist/hr-Bfcyy_rR.cjs.map +0 -1
- package/dist/hr-DBY2Lt8Y.mjs.map +0 -1
- package/dist/hu-BTYlpv8x.cjs.map +0 -1
- package/dist/hu-CFdlLxix.mjs.map +0 -1
- package/dist/id-CLnXnsUI.mjs.map +0 -1
- package/dist/id-DpB12DnB.cjs.map +0 -1
- package/dist/it-Dnm3Ubcb.mjs.map +0 -1
- package/dist/it-Nmq4disb.cjs.map +0 -1
- package/dist/ja-D__pQNSM.cjs.map +0 -1
- package/dist/ja-ZDGpYIT9.mjs.map +0 -1
- package/dist/ko-BAKmWypV.mjs.map +0 -1
- package/dist/ko-BGQ9Vnh-.cjs.map +0 -1
- package/dist/ms-6IGsCaks.mjs.map +0 -1
- package/dist/ms-Bq2pHRM-.cjs.map +0 -1
- package/dist/nl-DHrQ875w.cjs.map +0 -1
- package/dist/nl-l-MVSomn.mjs.map +0 -1
- package/dist/no-KpFMm1AJ.mjs.map +0 -1
- package/dist/no-R3-EB5Co.cjs.map +0 -1
- package/dist/pl-Bca2Pq5-.mjs.map +0 -1
- package/dist/pl-Cd_YrfPg.cjs.map +0 -1
- package/dist/pt-CIkRdYeG.mjs.map +0 -1
- package/dist/pt-DIiHu6Mp.cjs.map +0 -1
- package/dist/ro-CiE-AxDf.mjs.map +0 -1
- package/dist/ro-odHdLgL4.cjs.map +0 -1
- package/dist/ru-BYdpmEiK.mjs.map +0 -1
- package/dist/ru-D2OwVHj5.cjs.map +0 -1
- package/dist/sk-BaDSrJ8u.cjs.map +0 -1
- package/dist/sk-DQiXACwE.mjs.map +0 -1
- package/dist/sv-B6EUMOBb.cjs.map +0 -1
- package/dist/sv-Btkf1rNQ.mjs.map +0 -1
- package/dist/th-D8g2gDha.cjs.map +0 -1
- package/dist/th-Dhyq5YKF.mjs.map +0 -1
- package/dist/tl-sxgiHAif.mjs.map +0 -1
- package/dist/tl-tEocbrz2.cjs.map +0 -1
- package/dist/tr-BAyeQkex.cjs.map +0 -1
- package/dist/tr-BtM6b91I.mjs.map +0 -1
- package/dist/uk-Cv_fKgTe.mjs.map +0 -1
- package/dist/uk-kvcTBcGh.cjs.map +0 -1
- package/dist/vi-B877Wvfs.mjs.map +0 -1
- package/dist/vi-D1M0pUmI.cjs.map +0 -1
- package/dist/zh_CN-BbzxVpys.cjs.map +0 -1
- package/dist/zh_CN-DSesb0bt.mjs.map +0 -1
- package/dist/zh_TW-BDxZdNH7.cjs.map +0 -1
- package/dist/zh_TW-Bxz64eoL.mjs.map +0 -1
|
@@ -97,6 +97,7 @@ var vi_default = {
|
|
|
97
97
|
mysite_link_empty: "Liên kết không được để trống",
|
|
98
98
|
mysite_link_updated: "Liên kết MySite đã được cập nhật",
|
|
99
99
|
name: "Tên",
|
|
100
|
+
name_change_disabled_hint: "Quản trị viên của bạn quản lý tên trên tài khoản này.",
|
|
100
101
|
name_is_required: "Tên là bắt buộc",
|
|
101
102
|
new_email_must_be_different: "Email mới phải khác với email hiện tại của bạn",
|
|
102
103
|
new_email_verified: "Email mới của bạn đã được xác minh.",
|
|
@@ -178,4 +179,4 @@ Object.defineProperty(exports, "default", {
|
|
|
178
179
|
}
|
|
179
180
|
});
|
|
180
181
|
|
|
181
|
-
//# sourceMappingURL=vi-
|
|
182
|
+
//# sourceMappingURL=vi-5pYkRRAI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vi-5pYkRRAI.cjs","names":[],"sources":["../../../profile/core/src/locale/vi.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -96,6 +96,7 @@ var vi_default = {
|
|
|
96
96
|
mysite_link_empty: "Liên kết không được để trống",
|
|
97
97
|
mysite_link_updated: "Liên kết MySite đã được cập nhật",
|
|
98
98
|
name: "Tên",
|
|
99
|
+
name_change_disabled_hint: "Quản trị viên của bạn quản lý tên trên tài khoản này.",
|
|
99
100
|
name_is_required: "Tên là bắt buộc",
|
|
100
101
|
new_email_must_be_different: "Email mới phải khác với email hiện tại của bạn",
|
|
101
102
|
new_email_verified: "Email mới của bạn đã được xác minh.",
|
|
@@ -172,4 +173,4 @@ var vi_default = {
|
|
|
172
173
|
//#endregion
|
|
173
174
|
export { vi_default as default };
|
|
174
175
|
|
|
175
|
-
//# sourceMappingURL=vi-
|
|
176
|
+
//# sourceMappingURL=vi-CI1vgr9K.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vi-CI1vgr9K.mjs","names":[],"sources":["../../../profile/core/src/locale/vi.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -97,6 +97,7 @@ var zh_CN_default = {
|
|
|
97
97
|
mysite_link_empty: "链接不能为空",
|
|
98
98
|
mysite_link_updated: "MySite链接已更新",
|
|
99
99
|
name: "名称",
|
|
100
|
+
name_change_disabled_hint: "您的管理员管理此账户的名称。",
|
|
100
101
|
name_is_required: "名称为必填项",
|
|
101
102
|
new_email_must_be_different: "新邮箱必须与您当前的邮箱不同",
|
|
102
103
|
new_email_verified: "您的新邮箱已验证。",
|
|
@@ -178,4 +179,4 @@ Object.defineProperty(exports, "default", {
|
|
|
178
179
|
}
|
|
179
180
|
});
|
|
180
181
|
|
|
181
|
-
//# sourceMappingURL=zh_CN-
|
|
182
|
+
//# sourceMappingURL=zh_CN-CRA7Eajb.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh_CN-CRA7Eajb.cjs","names":[],"sources":["../../../profile/core/src/locale/zh_CN.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -96,6 +96,7 @@ var zh_CN_default = {
|
|
|
96
96
|
mysite_link_empty: "链接不能为空",
|
|
97
97
|
mysite_link_updated: "MySite链接已更新",
|
|
98
98
|
name: "名称",
|
|
99
|
+
name_change_disabled_hint: "您的管理员管理此账户的名称。",
|
|
99
100
|
name_is_required: "名称为必填项",
|
|
100
101
|
new_email_must_be_different: "新邮箱必须与您当前的邮箱不同",
|
|
101
102
|
new_email_verified: "您的新邮箱已验证。",
|
|
@@ -172,4 +173,4 @@ var zh_CN_default = {
|
|
|
172
173
|
//#endregion
|
|
173
174
|
export { zh_CN_default as default };
|
|
174
175
|
|
|
175
|
-
//# sourceMappingURL=zh_CN-
|
|
176
|
+
//# sourceMappingURL=zh_CN-DHfCPhjH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh_CN-DHfCPhjH.mjs","names":[],"sources":["../../../profile/core/src/locale/zh_CN.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -97,6 +97,7 @@ var zh_TW_default = {
|
|
|
97
97
|
mysite_link_empty: "連結不可為空",
|
|
98
98
|
mysite_link_updated: "MySite連結已更新",
|
|
99
99
|
name: "名字",
|
|
100
|
+
name_change_disabled_hint: "您的管理員管理此帳戶上的名稱。",
|
|
100
101
|
name_is_required: "名稱為必填項",
|
|
101
102
|
new_email_must_be_different: "新電子郵件必須與目前電子郵件不同",
|
|
102
103
|
new_email_verified: "您的新電子郵件已驗證。",
|
|
@@ -178,4 +179,4 @@ Object.defineProperty(exports, "default", {
|
|
|
178
179
|
}
|
|
179
180
|
});
|
|
180
181
|
|
|
181
|
-
//# sourceMappingURL=zh_TW-
|
|
182
|
+
//# sourceMappingURL=zh_TW-CAJScAfB.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh_TW-CAJScAfB.cjs","names":[],"sources":["../../../profile/core/src/locale/zh_TW.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -96,6 +96,7 @@ var zh_TW_default = {
|
|
|
96
96
|
mysite_link_empty: "連結不可為空",
|
|
97
97
|
mysite_link_updated: "MySite連結已更新",
|
|
98
98
|
name: "名字",
|
|
99
|
+
name_change_disabled_hint: "您的管理員管理此帳戶上的名稱。",
|
|
99
100
|
name_is_required: "名稱為必填項",
|
|
100
101
|
new_email_must_be_different: "新電子郵件必須與目前電子郵件不同",
|
|
101
102
|
new_email_verified: "您的新電子郵件已驗證。",
|
|
@@ -172,4 +173,4 @@ var zh_TW_default = {
|
|
|
172
173
|
//#endregion
|
|
173
174
|
export { zh_TW_default as default };
|
|
174
175
|
|
|
175
|
-
//# sourceMappingURL=zh_TW-
|
|
176
|
+
//# sourceMappingURL=zh_TW-eo1sgYEl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh_TW-eo1sgYEl.mjs","names":[],"sources":["../../../profile/core/src/locale/zh_TW.json"],"sourcesContent":[""],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluid-app/portal-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.513",
|
|
4
4
|
"description": "SDK for building custom Fluid portals",
|
|
5
5
|
"files": [
|
|
6
6
|
"authoring",
|
|
@@ -86,41 +86,41 @@
|
|
|
86
86
|
"tsdown": "^0.21.0",
|
|
87
87
|
"typescript": "^5",
|
|
88
88
|
"zod": "4.3.5",
|
|
89
|
-
"@fluid-app/address-fields": "0.1.0",
|
|
90
89
|
"@fluid-app/address-autocomplete": "0.1.0",
|
|
90
|
+
"@fluid-app/address-fields": "0.1.0",
|
|
91
91
|
"@fluid-app/auth": "0.1.0",
|
|
92
92
|
"@fluid-app/api-client-core": "0.1.0",
|
|
93
93
|
"@fluid-app/cart-ui": "0.1.31",
|
|
94
|
-
"@fluid-app/company-switcher-ui": "0.1.0",
|
|
95
|
-
"@fluid-app/contacts-core": "0.1.0",
|
|
96
94
|
"@fluid-app/contacts-ui": "0.1.0",
|
|
97
|
-
"@fluid-app/
|
|
95
|
+
"@fluid-app/contacts-core": "0.1.0",
|
|
96
|
+
"@fluid-app/company-switcher-ui": "0.1.0",
|
|
98
97
|
"@fluid-app/file-picker-core": "0.1.0",
|
|
98
|
+
"@fluid-app/file-picker-api-client": "0.1.0",
|
|
99
99
|
"@fluid-app/fluid-pay-core": "0.1.0",
|
|
100
100
|
"@fluid-app/fluid-pay-ui": "0.1.0",
|
|
101
|
-
"@fluid-app/i18n": "0.1.0",
|
|
102
|
-
"@fluid-app/messaging-api-client": "0.1.0",
|
|
103
101
|
"@fluid-app/messaging-core": "0.1.0",
|
|
104
|
-
"@fluid-app/messaging-
|
|
102
|
+
"@fluid-app/messaging-api-client": "0.1.0",
|
|
103
|
+
"@fluid-app/i18n": "0.1.0",
|
|
105
104
|
"@fluid-app/mysite-core": "0.1.0",
|
|
105
|
+
"@fluid-app/messaging-ui": "0.1.0",
|
|
106
106
|
"@fluid-app/mysite-ui": "0.1.0",
|
|
107
107
|
"@fluid-app/orders-core": "0.1.0",
|
|
108
108
|
"@fluid-app/orders-ui": "0.1.0",
|
|
109
109
|
"@fluid-app/payments-display": "0.1.0",
|
|
110
|
-
"@fluid-app/portal-core": "0.1.23",
|
|
111
110
|
"@fluid-app/portal-app-download-ui": "0.1.0",
|
|
112
|
-
"@fluid-app/portal-
|
|
111
|
+
"@fluid-app/portal-core": "0.1.23",
|
|
113
112
|
"@fluid-app/portal-react": "0.1.0",
|
|
113
|
+
"@fluid-app/portal-tenant-api-client": "0.1.0",
|
|
114
114
|
"@fluid-app/portal-tenant-contacts-api-client": "0.1.0",
|
|
115
115
|
"@fluid-app/portal-tenant-content-api-client": "0.1.0",
|
|
116
116
|
"@fluid-app/portal-tenant-mysite-api-client": "0.1.0",
|
|
117
117
|
"@fluid-app/portal-tenant-pay-api-client": "0.1.0",
|
|
118
|
-
"@fluid-app/portal-widgets": "0.1.22",
|
|
119
118
|
"@fluid-app/portal-tenant-store-api-client": "0.1.0",
|
|
119
|
+
"@fluid-app/portal-widgets": "0.1.22",
|
|
120
120
|
"@fluid-app/products-api-client": "0.1.0",
|
|
121
121
|
"@fluid-app/products-core": "0.1.0",
|
|
122
|
-
"@fluid-app/profile-core": "0.1.0",
|
|
123
122
|
"@fluid-app/profile-ui": "0.1.0",
|
|
123
|
+
"@fluid-app/profile-core": "0.1.0",
|
|
124
124
|
"@fluid-app/query-persister": "0.1.0",
|
|
125
125
|
"@fluid-app/shareables-core": "0.1.0",
|
|
126
126
|
"@fluid-app/shareables-ui": "0.1.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OrdersScreen-CaZvXkul.cjs","names":["createTranslationContext","useActiveLocale","useDomainDict","ordersDomain","createOrdersTranslationAdapter","cn","buildStaticMapUrl","useInfiniteCustomerOrders","ScreenHeaderBreadcrumbs","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbPage","Search","Input","formatOrderTotal","ImageOff","Repeat","AlertCircle","useAppNavigation","maskedCardLabelSegments","normalizePaymentDescriptor","normalizeCardBrand","isCardPaymentDescriptor","paymentDescriptorLabel","resolvePaymentMethodDisplay","Skeleton","usePointsLabel","usePortalTenantOrder","usePortalTenantOrder","ScreenHeaderBreadcrumbs","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbSeparator","BreadcrumbPage","useAppNavigation","useFluidContext","PortalOrderDetailScreenContent","useAppNavigation"],"sources":["../../../orders/core/src/translation-api-context.ts","../src/providers/OrdersTranslationBridge.tsx","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/lib/translate-status.ts","../../../orders/ui/src/lib/effective-order-date.ts","../../../orders/ui/src/lib/fulfillment-status.ts","../../../orders/ui/src/components/fulfillment-status-badge.tsx","../../../orders/ui/src/components/static-map.tsx","../src/screens/orders/portal-orders-list-helpers.ts","../src/screens/orders/PortalOrdersList.tsx","../src/screens/OrdersListScreen.tsx","../../../payments/display/src/components/MaskedPaymentLabel.tsx","../../../orders/ui/src/components/portal-order-detail.tsx","../../../orders/ui/src/screens/PortalOrderDetailScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/OrdersScreen.tsx"],"sourcesContent":["import type { Provider } from \"react\";\nimport { createTranslationContext } from \"@fluid-app/i18n/translation-api-context-factory\";\nimport type { TranslationApi } from \"@fluid-app/i18n/translation-api\";\nimport type { OrdersDict } from \"./translation-dictionary\";\n\nconst { Provider: OrdersProvider, useTranslation } =\n createTranslationContext<OrdersDict>(\"Orders\");\n\nexport const OrdersTranslationProvider: Provider<TranslationApi<OrdersDict> | null> =\n OrdersProvider;\nexport const useOrdersTranslation = useTranslation;\n","import { useMemo, type ReactNode } from \"react\";\nimport { useActiveLocale } from \"@fluid-app/i18n/locale-context\";\nimport { useDomainDict } from \"@fluid-app/i18n/use-domain-dict\";\nimport {\n ordersDomain,\n createOrdersTranslationAdapter,\n} from \"@fluid-app/orders-core/translation-adapter\";\nimport { OrdersTranslationProvider } from \"@fluid-app/orders-core/translation-api-context\";\n\nexport function OrdersTranslationBridge({\n children,\n}: {\n children: ReactNode;\n}): React.JSX.Element {\n const { locale } = useActiveLocale();\n const dict = useDomainDict(ordersDomain, locale);\n const api = useMemo(\n () => createOrdersTranslationAdapter(locale, dict),\n [locale, dict],\n );\n return (\n <OrdersTranslationProvider value={api}>\n {children}\n </OrdersTranslationProvider>\n );\n}\n","import type React from \"react\";\nimport { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor =\n | \"green\"\n | \"yellow\"\n | \"red\"\n | \"blue\"\n | \"orange\"\n | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500/15 text-foreground\",\n yellow: \"bg-yellow-500/15 text-foreground\",\n red: \"bg-red-500/15 text-foreground\",\n blue: \"bg-blue-500/15 text-foreground\",\n orange: \"bg-orange-500/15 text-foreground\",\n gray: \"bg-foreground/10 text-foreground\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n orange: \"bg-orange-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps): React.JSX.Element {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\n/** Capitalize the first letter for display in headings / sentence-leading copy. */\nexport function capitalize(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import type { OrdersDict } from \"@fluid-app/orders-core/translation-dictionary\";\nimport { startCase } from \"./format\";\n\n/** Status values that have a `status_*` translation key in the orders dictionary. */\nconst translatableStatuses = new Set<string>([\n \"cancelled\",\n \"completed\",\n \"fulfilled\",\n \"pending\",\n \"preparing\",\n \"processing\",\n \"returned\",\n \"shipped\",\n]);\n\n/**\n * Translate an order status using the orders `t()` function.\n * Falls back to `startCase` for statuses without a dedicated translation key.\n */\nexport function translateStatus(\n t: (key: keyof OrdersDict) => string,\n status: string,\n): string {\n if (translatableStatuses.has(status)) {\n return t(`status_${status}` as keyof OrdersDict);\n }\n return startCase(status);\n}\n","type OrderWithDates = {\n sale_date?: string | null;\n created_at: string;\n};\n\nexport function effectiveOrderDate(order: OrderWithDates): string {\n return order.sale_date ?? order.created_at;\n}\n","import type { BadgeColor } from \"../components/status-badge\";\n\n/**\n * Canonical fulfillment-status → badge color mapping.\n *\n * This is a deliberate mirror of fluid-admin's fulfillment color config\n * (`COLOR_CONFIG.fulfillment` + `getDefaultColorForUnknownStatus` in\n * `apps/fluid-admin/components/Orders/utils/formatters.ts`) so the\n * customer-facing portal renders order status tags with the SAME label\n * and color as the admin — admin is the source of truth (CURRENT-1496).\n *\n * The `Commerce::Order#fulfillment_status` enum values are:\n * `unfulfilled, in_progress, on_hold, partially_fulfilled, scheduled,\n * fulfilled`.\n */\nconst FULFILLMENT_STATUS_COLORS: Record<string, BadgeColor> = {\n fulfilled: \"gray\",\n unfulfilled: \"yellow\",\n in_progress: \"yellow\",\n on_hold: \"orange\",\n partially_fulfilled: \"yellow\",\n scheduled: \"blue\",\n // `processing` is not a fulfillment_status enum value but the BFF /\n // legacy responses can surface it; admin colors it yellow, so we match.\n processing: \"yellow\",\n};\n\n/**\n * Cancelled-family lifecycle values. These come from `order_status` (not\n * `fulfillment_status`), and the portal orders list surfaces them on the\n * same pill. Admin renders these red, so we match.\n */\nconst CANCELLED_FAMILY_COLORS: Record<string, BadgeColor> = {\n cancelled: \"red\",\n returned: \"red\",\n refunded: \"red\",\n};\n\n/**\n * Fallback for statuses not in the explicit maps. Mirrors admin's\n * `getDefaultColorForUnknownStatus` for the fulfillment type so unknown\n * values still read consistently with admin rather than defaulting to a\n * meaningless grey.\n */\nfunction defaultColor(status: string): BadgeColor {\n if (status.includes(\"fulfilled\") || status.includes(\"complete\"))\n return \"gray\";\n if (status.includes(\"hold\")) return \"orange\";\n return \"yellow\";\n}\n\n/**\n * Cancelled-family lifecycle values, derived from the color map so there is\n * a single source of truth. Membership is checked case-insensitively.\n */\nconst CANCELLED_FAMILY = new Set(Object.keys(CANCELLED_FAMILY_COLORS));\n\n/**\n * Resolve which status string should drive an order's pill. Cancelled-family\n * lifecycle values (`cancelled` / `returned` / `refunded`) come from the\n * order's lifecycle status; everything else reads off `fulfillment_status`\n * (the source of truth per `Commerce::Order#fulfillment_status`).\n *\n * Both the orders list and the order detail page use this so a cancelled\n * order renders red \"Cancelled\" instead of a misleading yellow \"Unfulfilled\"\n * — `fulfillment_status` has no cancelled-family value, so a cancelled order\n * typically carries `fulfillment_status: \"unfulfilled\"` (CURRENT-1496).\n *\n * lifecycleStatus - the order's lifecycle status (`order_status` on a list\n * order, `status` on a portal-tenant detail order).\n * fulfillmentStatus - the order's `fulfillment_status`.\n */\nexport function resolveOrderStatus(\n lifecycleStatus: string | undefined,\n fulfillmentStatus: string | undefined,\n): string {\n if (lifecycleStatus && CANCELLED_FAMILY.has(lifecycleStatus.toLowerCase())) {\n return lifecycleStatus;\n }\n return fulfillmentStatus ?? lifecycleStatus ?? \"\";\n}\n\n/**\n * Resolve the badge color for an order status tag, matching admin exactly\n * for every `fulfillment_status` enum value and the cancelled family.\n */\nexport function fulfillmentStatusColor(status: string | undefined): BadgeColor {\n if (!status) return \"gray\";\n const normalized = status.toLowerCase();\n return (\n FULFILLMENT_STATUS_COLORS[normalized] ??\n CANCELLED_FAMILY_COLORS[normalized] ??\n defaultColor(normalized)\n );\n}\n","import type React from \"react\";\nimport { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\nimport { StatusBadge } from \"./status-badge\";\nimport { fulfillmentStatusColor } from \"../lib/fulfillment-status\";\nimport { translateStatus } from \"../lib/translate-status\";\n\nexport interface FulfillmentStatusBadgeProps {\n /**\n * The order's `fulfillment_status` (the source of truth per\n * `Commerce::Order#fulfillment_status`). The orders list also passes\n * cancelled-family `order_status` values here for terminal orders, which\n * are colored red to match admin.\n */\n status: string;\n className?: string;\n}\n\n/**\n * Renders an order status tag whose label and color match the fluid-admin\n * fulfillment pill exactly (CURRENT-1496). Admin is the source of truth:\n * `fulfilled` is grey, `unfulfilled`/`in_progress`/`partially_fulfilled`\n * are yellow, `on_hold` is orange, and `scheduled` is blue. Labels come\n * from `translateStatus`, which yields the same start-cased text admin\n * shows (`getStatusDisplayText`) while preserving the translated\n * `status_fulfilled` copy where available.\n */\nexport function FulfillmentStatusBadge({\n status,\n className,\n}: FulfillmentStatusBadgeProps): React.JSX.Element {\n const { t } = useOrdersTranslation();\n return (\n <StatusBadge\n color={fulfillmentStatusColor(status)}\n dot\n size=\"sm\"\n className={className}\n >\n {translateStatus(t, status)}\n </StatusBadge>\n );\n}\n","import type React from \"react\";\nimport { useState } from \"react\";\nimport type {\n StaticMapAddress,\n StaticMapOptions,\n} from \"@fluid-app/orders-core\";\nimport { buildStaticMapUrl } from \"@fluid-app/orders-core\";\nimport { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\n\nexport interface StaticMapProps {\n apiKey: string;\n address: StaticMapAddress;\n options?: StaticMapOptions;\n alt?: string;\n className?: string;\n}\n\nexport function StaticMap({\n apiKey,\n address,\n options,\n alt,\n className,\n}: StaticMapProps): React.JSX.Element | null {\n const { t } = useOrdersTranslation();\n const [errored, setErrored] = useState(false);\n const url = buildStaticMapUrl(apiKey, address, options);\n\n if (!url || errored) return null;\n\n return (\n <img\n src={url}\n alt={alt ?? t(\"shipping_address_map\")}\n width={options?.width ?? 600}\n height={options?.height ?? 300}\n className={\n className ??\n \"border-border w-full rounded border object-cover shadow-xs\"\n }\n onError={() => setErrored(true)}\n />\n );\n}\n","import { resolveOrderStatus } from \"@fluid-app/orders-ui/lib/fulfillment-status\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport type { OrdersDict } from \"@fluid-app/orders-core/translation-dictionary\";\nimport type { TranslationApi } from \"@fluid-app/i18n/translation-api\";\n\nexport type T = TranslationApi<OrdersDict>[\"t\"];\n\nexport type FilterKey = \"all\" | \"fulfilled\" | \"preparing\" | \"subscription\";\n\nexport type StatusKind =\n | \"fulfilled\"\n | \"preparing\"\n | \"shipped\"\n | \"cancelled\"\n | \"pending\";\n\n// Fulfillment_status enum values (the source of truth per the BFF) fold\n// into the coarse kinds used only for the filter tabs. Order_status\n// cancelled-family values stay as aliases so `statusForOrder` can fall\n// back to order_status when an order is cancelled (fulfillment_status\n// doesn't model that state).\n//\n// NOTE: this lookup no longer drives the rendered pill's label or color.\n// The pill is rendered by `FulfillmentStatusBadge`, which mirrors the\n// fluid-admin fulfillment mapping exactly (CURRENT-1496).\nconst STATUS_KIND_LOOKUP: Record<string, StatusKind> = {\n fulfilled: \"fulfilled\",\n // `completed` is an order_status lifecycle value kept as a defensive\n // alias so an order whose BFF response is missing `fulfillment_status`\n // still classifies as fulfilled instead of unknown/pending.\n completed: \"fulfilled\",\n shipped: \"shipped\",\n partially_fulfilled: \"preparing\",\n in_progress: \"preparing\",\n on_hold: \"preparing\",\n scheduled: \"preparing\",\n preparing: \"preparing\",\n cancelled: \"cancelled\",\n returned: \"cancelled\",\n refunded: \"cancelled\",\n pending: \"pending\",\n unfulfilled: \"pending\",\n processing: \"pending\",\n};\n\n/**\n * Classify a raw status string onto the internal `StatusKind` vocabulary\n * used to drive the filter tabs. This is intentionally coarser than the\n * rendered pill — the pill's label and color come from\n * `FulfillmentStatusBadge`. Unknown statuses fall back to `pending`.\n */\nexport function statusKind(orderStatus: string): StatusKind {\n return STATUS_KIND_LOOKUP[(orderStatus || \"\").toLowerCase()] ?? \"pending\";\n}\n\n/**\n * Pick the right status string to drive the pill / filter for a list order.\n * Cancelled-family lifecycle states come from `order_status`; everything\n * else is read off `fulfillment_status` (the BFF source-of-truth per the\n * `Commerce::Order#fulfillment_status` enum). Delegates to the shared\n * `resolveOrderStatus` so the list and the order detail page stay in lockstep.\n */\nexport function statusForOrder(order: orders.ListOrder): string {\n return resolveOrderStatus(order.order_status, order.fulfillment_status);\n}\n\nexport function filterPredicate(\n filter: FilterKey,\n order: orders.ListOrder,\n): boolean {\n if (filter === \"all\") return true;\n if (filter === \"subscription\") return order.subscription != null;\n const kind = statusKind(statusForOrder(order));\n if (filter === \"fulfilled\") return kind === \"fulfilled\" || kind === \"shipped\";\n if (filter === \"preparing\") return kind === \"preparing\" || kind === \"pending\";\n return true;\n}\n\nexport function countByFilter(\n list: orders.ListOrder[],\n): Record<FilterKey, number> {\n return {\n all: list.length,\n fulfilled: list.filter((o) => filterPredicate(\"fulfilled\", o)).length,\n preparing: list.filter((o) => filterPredicate(\"preparing\", o)).length,\n subscription: list.filter((o) => filterPredicate(\"subscription\", o)).length,\n };\n}\n\nexport interface OrderGroup {\n label: string;\n orders: orders.ListOrder[];\n}\n\n/**\n * The date to show reps in the order history list. Prefers `sale_date`\n * (when the sale actually happened — meaningful for historical orders\n * imported via sync, where `created_at` is just when the row landed in\n * Fluid) and falls back to `created_at` for orders placed natively.\n */\nexport function orderDisplayDate(order: orders.ListOrder): string {\n return order.sale_date ?? order.created_at;\n}\n\n/**\n * Group orders into date buckets (\"This week\", \"This month\", month name, or\n * \"{Month} {year}\" for anything older than the current year). Insertion\n * order is preserved within and between buckets so newest-first ordering\n * from the BFF carries through.\n *\n * `t` resolves the structural bucket labels (\"This week\" / \"This month\").\n * Older buckets use `toLocaleDateString` which is locale-aware on its own.\n * `now` is injectable for tests; defaults to the current wall-clock time.\n *\n * Buckets reps by `orderDisplayDate` — sale_date when set, created_at\n * otherwise — so historical imported orders land in their real-life\n * month instead of the day they were synced into Fluid.\n */\nexport function groupOrdersByDate(\n list: orders.ListOrder[],\n t: T,\n now: Date = new Date(),\n): OrderGroup[] {\n if (list.length === 0) return [];\n const startOfToday = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n );\n const sevenDaysAgo = new Date(startOfToday);\n sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);\n const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n const startOfYear = new Date(now.getFullYear(), 0, 1);\n\n const buckets = new Map<string, orders.ListOrder[]>();\n const order: string[] = [];\n\n for (const o of list) {\n const bucketDate = new Date(orderDisplayDate(o));\n let label: string;\n if (bucketDate >= sevenDaysAgo) {\n label = t(\"group_this_week\");\n } else if (bucketDate >= startOfMonth) {\n label = t(\"group_this_month\");\n } else if (bucketDate >= startOfYear) {\n label = bucketDate.toLocaleDateString(undefined, {\n month: \"long\",\n });\n } else {\n label = bucketDate.toLocaleDateString(undefined, {\n month: \"long\",\n year: \"numeric\",\n });\n }\n let bucket = buckets.get(label);\n if (!bucket) {\n bucket = [];\n buckets.set(label, bucket);\n order.push(label);\n }\n bucket.push(o);\n }\n\n return order.map((label) => ({\n label,\n orders: buckets.get(label) ?? [],\n }));\n}\n\n/**\n * Render a friendly relative-time label for an order's created_at.\n * `t` resolves the relative-time templates; `{{n}}` placeholders are\n * substituted by the i18n system. Absolute dates use\n * `toLocaleDateString` which is locale-aware on its own.\n * `now` is injectable for tests.\n */\nexport function formatFriendlyDate(\n iso: string,\n t: T,\n now: Date = new Date(),\n): string {\n try {\n const d = new Date(iso);\n const startOfToday = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n );\n const startOfDate = new Date(d.getFullYear(), d.getMonth(), d.getDate());\n const diffDays = Math.round(\n (startOfToday.getTime() - startOfDate.getTime()) / (1000 * 60 * 60 * 24),\n );\n\n if (diffDays === 0) return t(\"today\");\n if (diffDays === 1) return t(\"yesterday\");\n if (diffDays < 7) return t(\"n_days_ago\", { n: diffDays });\n if (diffDays < 14) return t(\"last_week\");\n if (diffDays < 30) return t(\"n_weeks_ago\", { n: Math.round(diffDays / 7) });\n if (d.getFullYear() === now.getFullYear()) {\n return d.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n });\n }\n return d.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n } catch {\n return \"\";\n }\n}\n\n/**\n * Compute the per-image transform for the photo-stack fan in `OrderRow`.\n * Index 0 is the front (centered, no rotation); index 1 peeks right;\n * index 2 peeks left.\n */\nexport function fanStyle(\n i: number,\n count: number,\n): { left: string; transform: string; zIndex: number } {\n if (i === 0) {\n return {\n left: \"50%\",\n transform: \"translateX(-50%)\",\n zIndex: 30,\n };\n }\n if (i === 1) {\n return {\n left: \"50%\",\n transform:\n count === 2\n ? \"translateX(-25%) rotate(7deg)\"\n : \"translateX(-20%) rotate(7deg)\",\n zIndex: 20,\n };\n }\n return {\n left: \"50%\",\n transform: \"translateX(-80%) rotate(-7deg)\",\n zIndex: 10,\n };\n}\n","import { type JSX, useMemo, useState } from \"react\";\nimport {\n type orders,\n useInfiniteCustomerOrders,\n formatOrderTotal,\n} from \"@fluid-app/orders-core\";\nimport { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\nimport { Search, ImageOff, Repeat, AlertCircle } from \"lucide-react\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbPage,\n Input,\n} from \"@fluid-app/ui-primitives\";\nimport { ScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { FulfillmentStatusBadge } from \"@fluid-app/orders-ui\";\nimport {\n type FilterKey,\n type T,\n countByFilter,\n fanStyle,\n filterPredicate,\n formatFriendlyDate,\n groupOrdersByDate,\n orderDisplayDate,\n statusForOrder,\n} from \"./portal-orders-list-helpers\";\n\nexport type { FilterKey } from \"./portal-orders-list-helpers\";\n\ninterface PortalOrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n /**\n * Translation function. Falls back to the context-provided `t` when\n * absent. Production callers should always supply `t` or ensure the\n * `OrdersTranslationBridge` is mounted above this component.\n */\n t?: T;\n}\n\nexport function PortalOrdersList({\n customerId,\n onOrderClick,\n t: tProp,\n}: PortalOrdersListProps): JSX.Element {\n const { t: tContext } = useOrdersTranslation();\n const t = tProp ?? tContext;\n\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [filter, setFilter] = useState<FilterKey>(\"all\");\n const {\n data,\n isLoading,\n isError,\n refetch,\n fetchNextPage,\n hasNextPage,\n isFetchingNextPage,\n } = useInfiniteCustomerOrders(\n {\n customerId,\n limit: 10,\n search: searchTerm || undefined,\n sort: \"-created_at\",\n },\n { enabled: !!customerId },\n );\n\n const list = useMemo(\n () => data?.pages.flatMap((p) => p.orders) ?? [],\n [data],\n );\n const counts = useMemo(() => countByFilter(list), [list]);\n const filteredList = useMemo(\n () => list.filter((o) => filterPredicate(filter, o)),\n [list, filter],\n );\n const groups = useMemo(\n () => groupOrdersByDate(filteredList, t),\n [filteredList, t],\n );\n\n return (\n <>\n <ScreenHeaderBreadcrumbs>\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n {t(\"order_history\")}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </ScreenHeaderBreadcrumbs>\n <div className=\"relative\">\n <div className=\"relative mx-auto max-w-4xl px-5 pt-8 pb-20 md:px-8\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-foreground flex-1 truncate text-xl font-bold tracking-tight md:text-2xl\">\n {t(\"order_history\")}\n </h1>\n <div className=\"relative hidden sm:block\">\n <Search\n className=\"text-muted-foreground pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2\"\n strokeWidth={2}\n />\n <Input\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder={t(\"search_orders\")}\n className=\"ring-border h-9 w-64 rounded-md bg-transparent pl-9 text-xs\"\n />\n </div>\n </div>\n\n {list.length > 0 && (\n <FilterPills\n active={filter}\n counts={counts}\n onChange={setFilter}\n t={t}\n />\n )}\n\n {isLoading ? (\n <div className=\"ring-border mt-4 overflow-hidden rounded-2xl bg-transparent ring-1\">\n <OrdersListSkeleton />\n </div>\n ) : isError ? (\n <div className=\"ring-border mt-4 overflow-hidden rounded-2xl bg-transparent ring-1\">\n <ErrorState onRetry={() => refetch()} t={t} />\n </div>\n ) : filteredList.length === 0 ? (\n <div className=\"ring-border mt-4 overflow-hidden rounded-2xl bg-transparent ring-1\">\n <EmptyState searching={!!searchTerm || filter !== \"all\"} t={t} />\n </div>\n ) : (\n <div className=\"mt-4 space-y-6\">\n {groups.map((group) => (\n <div key={group.label}>\n <div className=\"text-muted-foreground mb-2 px-1 text-xs font-semibold\">\n {group.label}\n </div>\n <div className=\"space-y-3\">\n {group.orders.map((order) => (\n <OrderRow\n key={order.id}\n order={order}\n onClick={() => onOrderClick(order)}\n t={t}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {hasNextPage && (\n <div className=\"mt-3 flex justify-center\">\n <button\n type=\"button\"\n onClick={() => fetchNextPage()}\n disabled={isFetchingNextPage}\n className=\"ring-border text-foreground hover:bg-muted inline-flex items-center gap-1 rounded-md bg-transparent px-3 py-1.5 text-xs font-bold ring-1 transition-all disabled:cursor-not-allowed disabled:opacity-40\"\n >\n {isFetchingNextPage ? t(\"loading\") : t(\"load_more\")}\n </button>\n </div>\n )}\n </div>\n </div>\n </>\n );\n}\n\n// ─── Filter pills ─────────────────────────────────────────────────────────\n\nconst FILTER_KEYS: ReadonlyArray<{\n key: FilterKey;\n labelKey:\n | \"filter_all\"\n | \"filter_fulfilled\"\n | \"filter_preparing\"\n | \"filter_subscription\";\n}> = [\n { key: \"all\", labelKey: \"filter_all\" },\n { key: \"fulfilled\", labelKey: \"filter_fulfilled\" },\n { key: \"preparing\", labelKey: \"filter_preparing\" },\n { key: \"subscription\", labelKey: \"filter_subscription\" },\n];\n\nfunction FilterPills({\n active,\n counts,\n onChange,\n t,\n}: {\n active: FilterKey;\n counts: Record<FilterKey, number>;\n onChange: (k: FilterKey) => void;\n t: T;\n}): JSX.Element {\n return (\n <div className=\"-mx-1 mt-5 flex flex-wrap gap-1.5 px-1\">\n {FILTER_KEYS.map((f) => {\n const isActive = f.key === active;\n const count = counts[f.key];\n return (\n <button\n key={f.key}\n type=\"button\"\n onClick={() => onChange(f.key)}\n className={`inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-bold transition-all ${\n isActive\n ? \"bg-primary text-primary-foreground\"\n : \"ring-border text-foreground hover:bg-muted bg-transparent ring-1\"\n }`}\n >\n {t(f.labelKey)}\n <span\n className={`text-xs tabular-nums ${\n isActive\n ? \"text-primary-foreground/70\"\n : \"text-muted-foreground\"\n }`}\n >\n {count}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n\n// ─── Order row ────────────────────────────────────────────────────────────\n\nfunction OrderRow({\n order,\n onClick,\n t,\n}: {\n order: orders.ListOrder;\n onClick: () => void;\n t: T;\n}): JSX.Element {\n const dateLabel = formatFriendlyDate(orderDisplayDate(order), t);\n const total = formatOrderTotal(order);\n const titleText =\n order.first_item?.title || `${t(\"order_number\")}${order.order_number}`;\n const titleSuffix =\n order.items_count > 1 ? t(\"more_items\", { n: order.items_count - 1 }) : \"\";\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"group ring-foreground/5 hover:ring-foreground/10 focus-visible:ring-foreground/30 relative flex w-full cursor-pointer items-center gap-4 rounded-2xl bg-transparent p-4 text-left shadow-sm ring-1 transition-all duration-300 hover:-translate-y-0.5 hover:shadow-lg focus-visible:ring-2 focus-visible:outline-none\"\n >\n <div className=\"min-w-0 flex-1\">\n {order.order_number && order.first_item?.title && (\n <div className=\"text-muted-foreground truncate text-xs\">\n {t(\"order_number\")}\n {order.order_number}\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <div className=\"text-foreground truncate text-sm font-bold\">\n {titleText}\n {titleSuffix && (\n <span className=\"text-muted-foreground font-medium\">\n {titleSuffix}\n </span>\n )}\n </div>\n <FulfillmentStatusBadge status={statusForOrder(order)} />\n </div>\n <div className=\"text-muted-foreground mt-1 truncate text-xs\">\n {dateLabel} · {total}\n </div>\n </div>\n <ThumbnailStack\n fallback={order.first_item}\n urls={order.thumbnail_image_urls}\n isSubscription={order.subscription != null}\n t={t}\n />\n </button>\n );\n}\n\nfunction ThumbnailStack({\n urls,\n fallback,\n isSubscription,\n t,\n}: {\n urls: string[] | undefined;\n fallback: orders.FirstItem | null;\n isSubscription?: boolean;\n t: T;\n}): JSX.Element {\n // Prefer the explicit thumbnail array; fall back to first_item.image_url\n // for older API responses or when only one image exists.\n const effective = (\n urls && urls.length > 0\n ? urls\n : fallback?.image_url\n ? [fallback.image_url]\n : []\n ).slice(0, 3);\n\n if (effective.length === 0) {\n return (\n <div className=\"ring-border bg-muted text-muted-foreground relative flex size-12 shrink-0 items-center justify-center rounded-xl ring-1\">\n <ImageOff className=\"size-5\" strokeWidth={1.75} />\n {isSubscription && <SubscriptionBadge t={t} />}\n </div>\n );\n }\n\n if (effective.length === 1) {\n return (\n <div className=\"relative size-12 shrink-0\">\n <img\n src={effective[0]}\n alt=\"\"\n className=\"ring-background size-12 rounded-xl bg-transparent object-cover ring-[3px]\"\n />\n {isSubscription && <SubscriptionBadge t={t} />}\n </div>\n );\n }\n\n // Symmetric fan: front image centered, with up to 2 back images peeking\n // out behind on the left and right with a slight outward rotation. The\n // container is wider than a single thumb so back images can peek.\n const stackWidth = effective.length === 3 ? \"w-[80px]\" : \"w-[60px]\";\n return (\n <div className={`relative h-12 ${stackWidth} shrink-0`}>\n {effective.map((url, i) => (\n <img\n key={`${url}-${i}`}\n src={url}\n alt=\"\"\n className=\"ring-background absolute top-0 size-12 rounded-xl bg-transparent object-cover ring-[3px]\"\n style={fanStyle(i, effective.length)}\n />\n ))}\n {isSubscription && <SubscriptionBadge t={t} />}\n </div>\n );\n}\n\nfunction SubscriptionBadge({ t }: { t: T }): JSX.Element {\n return (\n <div\n className=\"bg-primary text-primary-foreground ring-background absolute -top-1 -right-1 z-40 flex size-5 items-center justify-center rounded-full ring-2\"\n title={t(\"from_subscription\")}\n >\n <Repeat className=\"size-2.5\" strokeWidth={2.75} />\n </div>\n );\n}\n\nfunction OrdersListSkeleton(): JSX.Element {\n return (\n <>\n {Array(4)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={`flex items-center gap-3 px-4 py-3.5 ${i < 3 ? \"border-border border-b\" : \"\"}`}\n >\n <div className=\"bg-muted size-12 shrink-0 animate-pulse rounded-xl\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"bg-muted h-4 w-1/3 animate-pulse rounded\" />\n <div className=\"bg-muted h-3 w-1/2 animate-pulse rounded\" />\n </div>\n </div>\n ))}\n </>\n );\n}\n\nfunction EmptyState({\n searching,\n t,\n}: {\n searching: boolean;\n t: T;\n}): JSX.Element {\n return (\n <div className=\"flex flex-col items-center gap-2 px-4 py-12 text-center\">\n <div className=\"bg-muted flex size-12 items-center justify-center rounded-full\">\n <Search className=\"text-muted-foreground size-5\" strokeWidth={2} />\n </div>\n <div className=\"text-foreground text-sm font-bold\">\n {searching ? t(\"no_matching_orders\") : t(\"no_orders_yet\")}\n </div>\n <div className=\"text-muted-foreground max-w-sm text-xs\">\n {searching ? t(\"search_hint\") : t(\"empty_hint\")}\n </div>\n </div>\n );\n}\n\nfunction ErrorState({\n onRetry,\n t,\n}: {\n onRetry: () => void;\n t: T;\n}): JSX.Element {\n return (\n <div className=\"flex flex-col items-center gap-2 px-4 py-12 text-center\">\n <div className=\"bg-muted flex size-12 items-center justify-center rounded-full\">\n <AlertCircle className=\"text-muted-foreground size-5\" strokeWidth={2} />\n </div>\n <div className=\"text-foreground text-sm font-bold\">\n {t(\"load_failed_title\")}\n </div>\n <div className=\"text-muted-foreground max-w-sm text-xs\">\n {t(\"load_failed_hint\")}\n </div>\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 mt-2 inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-bold transition-all\"\n >\n {t(\"try_again\")}\n </button>\n </div>\n );\n}\n","import type { orders } from \"@fluid-app/orders-core\";\nimport { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { PortalOrdersList } from \"./orders/PortalOrdersList\";\n\n// The portal-tenant BFF scopes orders to the logged-in user server-side,\n// so customerId is not used by the adapter. We pass a sentinel value to\n// satisfy the enabled guard in useCustomerOrders.\nconst BFF_SCOPED_CUSTOMER_ID = 1;\n\nexport function OrdersListScreen(): React.JSX.Element {\n const { navigate } = useAppNavigation();\n const { t } = useOrdersTranslation();\n\n const handleOrderClick = (order: orders.ListOrder) => {\n navigate(`orders/${order.token}`);\n };\n\n return (\n <PortalOrdersList\n customerId={BFF_SCOPED_CUSTOMER_ID}\n onOrderClick={handleOrderClick}\n t={t}\n />\n );\n}\n","import type { CSSProperties } from \"react\";\nimport { maskedCardLabelSegments } from \"../display\";\n\nexport interface MaskedPaymentLabelProps {\n label: string;\n className?: string;\n}\n\nconst labelStyle: CSSProperties = {\n display: \"inline-flex\",\n minHeight: \"1.5rem\",\n alignItems: \"center\",\n fontSize: \"0.875rem\",\n lineHeight: 1,\n // Let long unbroken fallback labels (e.g. a masked email/handle with no\n // spaces) wrap instead of overflowing a narrow column. Inert for the\n // masked-segments path, whose children are spans rather than text.\n overflowWrap: \"anywhere\",\n};\n\nconst segmentsStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n // Wrap onto a new line in narrow containers (e.g. the checkout\n // order-confirmation grid) instead of overflowing the box.\n flexWrap: \"wrap\",\n rowGap: \"0.25rem\",\n};\n\nconst dotsStyle: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.375rem\",\n // Let a single group's dots wrap too, so one atomic group can never\n // overflow an extremely narrow container.\n flexWrap: \"wrap\",\n};\n\nconst dotStyle: CSSProperties = {\n display: \"block\",\n width: \"0.375rem\",\n height: \"0.375rem\",\n borderRadius: \"9999px\",\n backgroundColor: \"currentColor\",\n};\n\nconst textAfterDotsStyle: CSSProperties = {\n marginLeft: \"0.125rem\",\n};\n\n// Spacing between masked groups. Applied as a trailing margin on the\n// preceding group (not a leading spacer) so a wrapped line never starts\n// with an indent.\nconst GROUP_GAP = \"0.75rem\";\n\nexport function MaskedPaymentLabel({\n label,\n className,\n}: MaskedPaymentLabelProps) {\n const segments = maskedCardLabelSegments(label);\n\n if (!segments) {\n return (\n <p className={className} style={labelStyle}>\n {label}\n </p>\n );\n }\n\n return (\n <p className={className} style={labelStyle} aria-label={label}>\n <span aria-hidden=\"true\" style={segmentsStyle}>\n {segments.map((segment, index) => {\n // Gaps are rendered as a trailing margin on the preceding group.\n if (segment.kind === \"gap\") return null;\n\n const trailingGap: CSSProperties | null =\n segments[index + 1]?.kind === \"gap\"\n ? { marginInlineEnd: GROUP_GAP }\n : null;\n\n if (segment.kind === \"dots\") {\n return (\n <span\n key={`${segment.kind}-${index}`}\n style={{ ...dotsStyle, ...trailingGap }}\n >\n {Array.from({ length: segment.count }, (_, dotIndex) => (\n <span key={dotIndex} style={dotStyle} />\n ))}\n </span>\n );\n }\n\n const textStyle: CSSProperties = {\n ...(segments[index - 1]?.kind === \"dots\"\n ? textAfterDotsStyle\n : null),\n ...trailingGap,\n };\n\n return (\n <span\n key={`${segment.kind}-${index}`}\n style={Object.keys(textStyle).length > 0 ? textStyle : undefined}\n >\n {segment.value}\n </span>\n );\n })}\n </span>\n </p>\n );\n}\n","import type React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport { usePortalTenantOrder } from \"@fluid-app/orders-core\";\nimport { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\nimport { usePointsLabel } from \"@fluid-app/portal-react/hooks/use-points-label\";\nimport { normalizeCardBrand } from \"@fluid-app/payments-display/brands\";\nimport {\n isCardPaymentDescriptor,\n normalizePaymentDescriptor,\n paymentDescriptorLabel,\n resolvePaymentMethodDisplay,\n} from \"@fluid-app/payments-display/display\";\nimport { MaskedPaymentLabel } from \"@fluid-app/payments-display/components/MaskedPaymentLabel\";\nimport { Skeleton } from \"@fluid-app/ui-primitives\";\nimport { FulfillmentStatusBadge } from \"./fulfillment-status-badge\";\nimport { StaticMap } from \"./static-map\";\nimport { capitalize } from \"../lib/format\";\nimport { effectiveOrderDate } from \"../lib/effective-order-date\";\nimport { resolveOrderStatus } from \"../lib/fulfillment-status\";\n\nfunction isCardPaymentMethod(\n paymentMethod: orders.PortalTenantPaymentMethod,\n): boolean {\n return (\n paymentMethod.last4 != null ||\n normalizePaymentDescriptor(paymentMethod.card_network) != null ||\n normalizeCardBrand(paymentMethod.card_network) != null ||\n isCardPaymentDescriptor(paymentMethod.source) ||\n isCardPaymentDescriptor(paymentMethod.payment_type)\n );\n}\n\nfunction fallbackPaymentLabel(\n paymentMethod: orders.PortalTenantPaymentMethod,\n): string {\n return (\n paymentDescriptorLabel(paymentMethod.payment_type, paymentMethod.source) ??\n \"Payment method\"\n );\n}\n\nfunction resolvePortalPaymentMethodDisplay(\n paymentMethod: orders.PortalTenantPaymentMethod,\n) {\n if (isCardPaymentMethod(paymentMethod)) {\n return resolvePaymentMethodDisplay({\n kind: \"card\",\n brand: normalizeCardBrand(paymentMethod.card_network),\n last4: paymentMethod.last4,\n logoUrl: paymentMethod.logo_url,\n });\n }\n\n const fallbackLabel = fallbackPaymentLabel(paymentMethod);\n return resolvePaymentMethodDisplay({\n kind: \"non_card\",\n brand: fallbackLabel,\n fallbackLabel,\n logoUrl: paymentMethod.logo_url,\n });\n}\n\nexport interface PortalOrderDetailProps {\n id: string | number;\n googleMapsApiKey?: string;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n}\n\nfunction DetailSkeleton() {\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <div className=\"bg-muted flex flex-col items-center px-8 lg:col-span-4\">\n <div className=\"w-full max-w-lg py-6\">\n <Skeleton className=\"mb-4 h-6 w-48\" />\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-x-4\">\n <Skeleton className=\"size-24 rounded\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n </div>\n </div>\n <div className=\"mt-6 space-y-2\">\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n </div>\n </div>\n </div>\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n <Skeleton className=\"mb-4 h-10 w-full rounded\" />\n <div className=\"mt-6 space-y-4\">\n <Skeleton className=\"h-5 w-40\" />\n <Skeleton className=\"h-16 w-full rounded\" />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction SummaryRow({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex items-center justify-between text-sm\">\n <p className=\"text-muted-foreground\">{label}</p>\n <p className=\"text-foreground\">{value}</p>\n </div>\n );\n}\n\n/**\n * Display a positive money string as a deduction (prefixed with \"-\").\n * Idempotent: if the value already starts with \"-\" we leave it alone, so\n * a future BFF that returns signed discounts can't produce \"--$10.00\".\n */\nfunction asNegative(value: string): string {\n return value.startsWith(\"-\") ? value : `-${value}`;\n}\n\n/**\n * Pick the formatted currency string when present, falling back to the raw\n * decimal so the row still renders something for orders where the BFF left\n * the field nil (e.g. a checkout where shipping was never set).\n */\nfunction moneyDisplay(formatted: string | null, fallback: string): string {\n return formatted ?? fallback;\n}\n\nfunction formatAddressLines(address: orders.PortalTenantAddress): string[] {\n const lines: string[] = [];\n if (address.name) lines.push(address.name);\n if (address.address1) lines.push(address.address1);\n if (address.address2) lines.push(address.address2);\n const cityLine = [address.city, address.state, address.postal_code]\n .filter(Boolean)\n .join(\", \");\n if (cityLine) lines.push(cityLine);\n if (address.country_code) lines.push(address.country_code);\n if (address.phone) lines.push(address.phone);\n return lines;\n}\n\nfunction AddressBlock({\n address,\n title,\n}: {\n address: orders.PortalTenantAddress;\n title: string;\n}) {\n const lines = formatAddressLines(address);\n if (lines.length === 0) return null;\n return (\n <div>\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">{title}</h3>\n <div className=\"text-foreground space-y-0.5 text-sm\">\n {lines.map((line, index) => (\n <p key={index}>{line}</p>\n ))}\n </div>\n </div>\n );\n}\n\nfunction ShippingMethodSection({\n shippingMethod,\n}: {\n shippingMethod: orders.PortalTenantShippingMethod;\n}) {\n const { t } = useOrdersTranslation();\n // Mirror the checkout's ShippingMethodDisplay null-guard: hide the row when\n // the BFF returned a method without a usable label rather than rendering an\n // empty heading.\n if (!shippingMethod.title) return null;\n return (\n <div>\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n {t(\"shipping_method\")}\n </h3>\n <p className=\"text-foreground text-sm\">{shippingMethod.title}</p>\n </div>\n );\n}\n\nfunction TrackingShipmentsSection({\n trackings,\n}: {\n trackings: orders.PortalTenantTrackingInformation[];\n}) {\n const { t } = useOrdersTranslation();\n if (trackings.length === 0) return null;\n return (\n <div className=\"border-border bg-muted/40 mb-6 rounded-md border p-4\">\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n {t(\"order_on_its_way\")}\n </h3>\n <ul className=\"flex flex-col gap-3\">\n {trackings.map((tracking) => (\n <li\n // Composite key so a malformed BFF row with id=0 (the\n // adapter's fallback) can't collide with another id=0\n // and trigger React's duplicate-key warning. tracking\n // numbers are unique within an order in practice.\n key={`${tracking.id}-${tracking.tracking_number}`}\n className=\"flex flex-row items-start justify-between gap-3\"\n >\n <div className=\"flex flex-col\">\n <span className=\"text-foreground text-sm\">\n {tracking.shipping_carrier\n ? `${tracking.shipping_carrier} · ${tracking.tracking_number}`\n : tracking.tracking_number}\n </span>\n {!tracking.shipping_carrier && (\n <span className=\"text-muted-foreground text-xs\">\n {t(\"tracking_number\")}\n </span>\n )}\n </div>\n {tracking.tracking_url && (\n <a\n href={tracking.tracking_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n // Disambiguate \"Track package\" for screen readers when\n // an order has multiple shipments — without this every\n // link reads the same.\n aria-label={\n tracking.shipping_carrier\n ? t(\"track_package_aria_with_carrier\", {\n carrier: tracking.shipping_carrier,\n number: tracking.tracking_number,\n })\n : t(\"track_package_aria\", {\n number: tracking.tracking_number,\n })\n }\n className=\"text-primary shrink-0 text-sm font-medium hover:underline\"\n >\n {t(\"track_package\")}\n </a>\n )}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nfunction PaymentMethodSection({\n paymentMethod,\n}: {\n paymentMethod: orders.PortalTenantPaymentMethod;\n}) {\n const { t } = useOrdersTranslation();\n const [logoErrored, setLogoErrored] = useState(false);\n const display = resolvePortalPaymentMethodDisplay(paymentMethod);\n const logoUrl = logoErrored\n ? display.logo.fallbackUrl\n : display.logo.primaryUrl;\n\n useEffect(() => {\n setLogoErrored(false);\n }, [\n paymentMethod.card_network,\n paymentMethod.last4,\n paymentMethod.logo_url,\n paymentMethod.payment_type,\n paymentMethod.source,\n ]);\n\n return (\n <div>\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n {t(\"payment_method\")}\n </h3>\n <div className=\"flex min-h-6 items-center gap-2\">\n <span className=\"inline-flex h-6 max-w-16 shrink-0 items-center justify-center\">\n <img\n src={logoUrl}\n alt={display.accessibilityLabel}\n className=\"block max-h-6 max-w-16 object-contain align-middle\"\n onError={() => setLogoErrored(true)}\n />\n </span>\n <MaskedPaymentLabel label={display.label} className=\"text-foreground\" />\n </div>\n </div>\n );\n}\n\nfunction LineItemImage({ src, alt }: { src: string; alt: string }) {\n const { t } = useOrdersTranslation();\n const [errored, setErrored] = useState(false);\n if (errored) return <span className=\"text-xs\">{t(\"no_image\")}</span>;\n return (\n <img\n src={src}\n alt={alt}\n className=\"h-full w-full object-cover\"\n onError={() => setErrored(true)}\n />\n );\n}\n\nfunction ItemRow({\n item,\n onSubscriptionClick,\n}: {\n item: orders.PortalTenantOrderLineItem;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n}) {\n const { t } = useOrdersTranslation();\n const subscriptionToken = item.source_subscription?.subscription_token;\n return (\n <div className=\"flex items-center gap-x-4 py-4\">\n <div className=\"relative shrink-0\">\n <div className=\"bg-muted text-muted-foreground flex h-24 w-24 items-center justify-center overflow-hidden rounded\">\n {item.image_url ? (\n <LineItemImage src={item.image_url} alt={item.product_name} />\n ) : (\n <span className=\"text-xs\">{t(\"no_image\")}</span>\n )}\n </div>\n {item.quantity > 1 && (\n <span className=\"bg-foreground text-background absolute -top-2 -right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full text-xs font-medium\">\n {item.quantity}\n </span>\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col gap-y-0.5\">\n <p\n className=\"text-foreground truncate text-sm font-medium\"\n title={item.product_name}\n >\n {item.product_name}\n </p>\n {item.variant_name && (\n <p\n className=\"text-muted-foreground truncate text-xs\"\n title={item.variant_name}\n >\n {item.variant_name}\n </p>\n )}\n <p className=\"text-foreground text-sm font-medium\">\n {moneyDisplay(item.total_in_currency, item.total)}\n </p>\n {item.quantity > 1 && (\n <p className=\"text-muted-foreground text-xs\">\n {moneyDisplay(item.price_in_currency, item.price)} x {item.quantity}\n </p>\n )}\n {subscriptionToken && onSubscriptionClick && (\n <button\n type=\"button\"\n title={subscriptionToken}\n className=\"mt-1 max-w-full cursor-pointer truncate text-left text-xs text-blue-600 transition-colors duration-200 hover:text-blue-700 hover:underline\"\n onClick={() => onSubscriptionClick(subscriptionToken)}\n >\n {t(\"subscription_hash\", { token: subscriptionToken })}\n </button>\n )}\n </div>\n </div>\n );\n}\n\nfunction ItemsSection({\n order,\n onSubscriptionClick,\n}: {\n order: orders.PortalTenantOrder;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n}) {\n const { t } = useOrdersTranslation();\n const { singular, plural } = usePointsLabel();\n const pointsApplied =\n order.points_applied != null && order.points_applied > 0;\n // When points were redeemed, the Total reflects the post-redemption amount\n // the customer actually paid; otherwise it stays the gross total. Prefer the\n // formatted currency string, then the raw post-redemption number, and fall\n // back to the gross total if the BFF omitted the post-redemption fields.\n const totalValue = pointsApplied\n ? moneyDisplay(\n order.order_total_after_points_redemption_in_currency ?? null,\n order.order_total_after_points_redemption != null\n ? String(order.order_total_after_points_redemption)\n : moneyDisplay(order.total_in_currency, order.total),\n )\n : moneyDisplay(order.total_in_currency, order.total);\n return (\n <section className=\"bg-muted flex w-full flex-col items-center px-8 lg:col-span-4\">\n <div className=\"flex w-full max-w-lg flex-col\">\n <div className=\"mt-4\">\n <h2 className=\"text-foreground mb-2 text-lg font-medium\">\n {t(\"items_count\", { count: String(order.line_items.length) })}\n </h2>\n <hr className=\"border-border\" />\n </div>\n\n <div className=\"divide-border divide-y\">\n {order.line_items.map((item) => (\n <ItemRow\n key={item.id}\n item={item}\n onSubscriptionClick={onSubscriptionClick}\n />\n ))}\n </div>\n\n <div className=\"border-border mb-4 space-y-1 border-t pt-4\">\n <SummaryRow\n label={t(\"subtotal\")}\n value={moneyDisplay(\n order.totals?.gross_subtotal_in_currency ??\n order.subtotal_in_currency,\n order.totals?.gross_subtotal ?? order.subtotal,\n )}\n />\n {parseFloat(order.discount) > 0 && (\n <SummaryRow\n label={t(\"discount\")}\n value={asNegative(\n moneyDisplay(order.discount_in_currency, order.discount),\n )}\n />\n )}\n <SummaryRow\n label={t(\"shipping\")}\n value={moneyDisplay(order.shipping_in_currency, order.shipping)}\n />\n <SummaryRow\n label={\n // STU2-2580: when the served totals are tax-inclusive, the gross\n // Subtotal above already contains this VAT, so the Tax row is\n // informational (\"VAT included\") — not an amount added on top.\n // Keeping it a plain added row beside a GROSS subtotal would make\n // the rows visually sum above the authoritative Total.\n order.totals?.price_inclusive_of_tax && order.totals.tax_label\n ? `${t(\"tax\")} (${t(\"tax_included\", { name: order.totals.tax_label })})`\n : t(\"tax\")\n }\n value={moneyDisplay(order.tax_in_currency, order.tax)}\n />\n {order.points_applied != null && order.points_applied > 0 && (\n <div className=\"flex items-center justify-between text-sm\">\n <p className=\"text-muted-foreground\">\n {t(\"points_applied\", { label: capitalize(plural) })}\n <span className=\"ml-1 text-xs\">\n ({order.points_applied.toLocaleString()}{\" \"}\n {order.points_applied === 1 ? singular : plural})\n </span>\n </p>\n <p className=\"text-foreground\">\n {asNegative(\n moneyDisplay(\n order.points_applied_amount_in_currency ?? null,\n String(order.points_applied_amount ?? 0),\n ),\n )}\n </p>\n </div>\n )}\n <div className=\"mt-2 flex items-center justify-between text-base font-medium\">\n <p className=\"text-muted-foreground text-sm font-medium\">\n {t(\"total\")}\n </p>\n <p className=\"text-foreground text-base font-bold\">{totalValue}</p>\n </div>\n </div>\n\n {order.total_points_credited != null &&\n order.total_points_credited > 0 && (\n <div className=\"border-border mb-4 border-t pt-4\">\n <div className=\"flex items-baseline justify-between\">\n <div>\n <p className=\"text-foreground text-sm font-semibold\">\n {t(\"points_earned\", { label: capitalize(plural) })}\n </p>\n {order.customer_points_balance != null && (\n <p className=\"text-muted-foreground text-xs\">\n {t(\"points_total\", {\n count: order.customer_points_balance.toLocaleString(),\n label: plural,\n })}\n </p>\n )}\n </div>\n <div className=\"text-right\">\n <p className=\"text-foreground text-sm font-semibold\">\n +{order.total_points_credited.toLocaleString()}\n </p>\n <p className=\"text-muted-foreground text-xs\">\n {t(\"points\", { label: plural })}\n </p>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction DetailsSection({\n order,\n googleMapsApiKey,\n}: {\n order: orders.PortalTenantOrder;\n googleMapsApiKey?: string;\n}) {\n const { t, locale } = useOrdersTranslation();\n return (\n <div className=\"bg-background px-8 pt-4 lg:col-span-4\">\n <div className=\"mx-auto max-w-lg lg:mx-0 lg:mr-auto\">\n {/* Order Status */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">\n {t(\"status_label\")}\n </span>\n <FulfillmentStatusBadge\n status={resolveOrderStatus(\n order.status,\n order.fulfillment_status,\n )}\n />\n </div>\n </div>\n </div>\n\n {googleMapsApiKey && order.shipping_address && (\n <div className=\"mb-6\">\n <StaticMap\n apiKey={googleMapsApiKey}\n address={order.shipping_address}\n />\n </div>\n )}\n\n <TrackingShipmentsSection trackings={order.tracking_informations} />\n\n {/* Order Info */}\n <div className=\"border-border mb-6 border-b pb-6\">\n <h3 className=\"text-foreground mb-3 text-sm/6 font-semibold\">\n {t(\"order_info\")}\n </h3>\n <div className=\"divide-border flex divide-x\">\n <div className=\"flex-1 pr-4\">\n <div className=\"text-muted-foreground text-sm\">{t(\"order\")}</div>\n <div className=\"text-foreground font-medium\">\n #{order.order_number ?? order.id}\n </div>\n </div>\n <div className=\"flex-1 pl-4 text-right\">\n <div className=\"text-muted-foreground text-sm\">{t(\"date\")}</div>\n <div className=\"text-foreground font-medium\">\n {new Date(effectiveOrderDate(order)).toLocaleDateString(\n locale,\n {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n },\n )}\n </div>\n </div>\n </div>\n {order.customer_email && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">{t(\"email\")}</div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.customer_email}\n </div>\n </div>\n )}\n {order.customer_name && (\n <div className=\"mt-3\">\n <div className=\"text-muted-foreground text-sm\">\n {t(\"customer\")}\n </div>\n <div className=\"text-foreground text-sm font-medium\">\n {order.customer_name}\n </div>\n </div>\n )}\n </div>\n\n {order.shipping_address && order.billing_address ? (\n <div className=\"border-border mb-6 grid grid-cols-2 gap-x-4 border-b pb-6\">\n <AddressBlock\n address={order.shipping_address}\n title={t(\"shipping_address\")}\n />\n <AddressBlock\n address={order.billing_address}\n title={t(\"billing_address\")}\n />\n </div>\n ) : (\n order.shipping_address && (\n <div className=\"border-border mb-6 border-b pb-6\">\n <AddressBlock\n address={order.shipping_address}\n title={t(\"shipping_address\")}\n />\n </div>\n )\n )}\n {(order.shipping_method || order.payment_method) && (\n <div className=\"border-border mb-6 grid grid-cols-1 gap-x-4 gap-y-4 border-b pb-6 sm:grid-cols-2\">\n {order.shipping_method && (\n <ShippingMethodSection shippingMethod={order.shipping_method} />\n )}\n {order.payment_method && (\n <PaymentMethodSection paymentMethod={order.payment_method} />\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function PortalOrderDetail({\n id,\n googleMapsApiKey,\n onNotFound,\n onError,\n onSubscriptionClick,\n}: PortalOrderDetailProps): React.JSX.Element | null {\n const { data, isLoading, error } = usePortalTenantOrder(id);\n const order = data?.order;\n\n useEffect(() => {\n if (!isLoading && error) {\n onError?.(error as Error);\n }\n }, [isLoading, error, onError]);\n\n useEffect(() => {\n if (!isLoading && !error && !order) {\n onNotFound?.();\n }\n }, [isLoading, error, order, onNotFound]);\n\n if (isLoading) {\n return <DetailSkeleton />;\n }\n\n if (!order) {\n return null;\n }\n\n return (\n <div className=\"flex flex-col lg:grid lg:grid-cols-8\">\n <ItemsSection order={order} onSubscriptionClick={onSubscriptionClick} />\n <DetailsSection order={order} googleMapsApiKey={googleMapsApiKey} />\n </div>\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { usePortalTenantOrder } from \"@fluid-app/orders-core\";\nimport { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@fluid-app/ui-primitives\";\nimport { ScreenHeaderBreadcrumbs } from \"@fluid-app/portal-react/shell/ScreenHeaderContext\";\nimport { PortalOrderDetail } from \"../components/portal-order-detail\";\n\nexport interface PortalOrderDetailScreenProps {\n id: string | number;\n googleMapsApiKey?: string;\n onNavigateToList: () => void;\n onNotFound?: () => void;\n onError?: (error: Error) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n}\n\nexport function PortalOrderDetailScreen({\n id,\n googleMapsApiKey,\n onNavigateToList,\n onNotFound,\n onError,\n onSubscriptionClick,\n}: PortalOrderDetailScreenProps): React.JSX.Element {\n const { t } = useOrdersTranslation();\n // Shares the cached query result with PortalOrderDetail below.\n // Used so the breadcrumb can render the human-readable order_number\n // instead of the URL slug we're routed with. Falls back to the DB id\n // (better than the URL slug) for historical orders with no\n // order_number, then to the URL slug only during initial load.\n const { data } = usePortalTenantOrder(id);\n const breadcrumbLabel =\n data?.order.order_number ?? data?.order.id.toString() ?? String(id);\n\n return (\n <>\n <ScreenHeaderBreadcrumbs>\n <Breadcrumb>\n <BreadcrumbList className=\"text-lg\">\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onNavigateToList();\n }}\n >\n {t(\"breadcrumb\")}\n </BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage className=\"font-semibold\">\n {t(\"breadcrumb_detail\", { id: breadcrumbLabel })}\n </BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n </ScreenHeaderBreadcrumbs>\n <div className=\"mx-auto max-w-7xl px-4 py-4 sm:px-6 sm:py-6 lg:px-10 lg:py-8\">\n <PortalOrderDetail\n id={id}\n googleMapsApiKey={googleMapsApiKey}\n onNotFound={onNotFound}\n onError={onError}\n onSubscriptionClick={onSubscriptionClick}\n />\n </div>\n </>\n );\n}\n","import { useOrdersTranslation } from \"@fluid-app/orders-core/translation-api-context\";\nimport { PortalOrderDetailScreen as PortalOrderDetailScreenContent } from \"@fluid-app/orders-ui/screens/PortalOrderDetailScreen\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { useFluidContext } from \"../providers/FluidProvider\";\n\ninterface OrderDetailScreenProps {\n token: string;\n onToast: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n}\n\nexport function OrderDetailScreen({\n token,\n onToast,\n}: OrderDetailScreenProps): React.JSX.Element {\n const { navigate } = useAppNavigation();\n const { config } = useFluidContext();\n const { t } = useOrdersTranslation();\n\n return (\n <PortalOrderDetailScreenContent\n id={token}\n googleMapsApiKey={config.googleMapsApiKey}\n onNavigateToList={() => navigate(\"orders\")}\n onNotFound={() => {\n onToast(t(\"order_not_found\"), \"warning\");\n navigate(\"orders\");\n }}\n onError={(err) => {\n const message = err instanceof Error ? err.message : t(\"error_generic\");\n onToast(t(\"error_loading_order\", { message }), \"error\");\n }}\n onSubscriptionClick={(subscriptionToken) =>\n navigate(`subscriptions/${subscriptionToken}`)\n }\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { fluidToast } from \"@fluid-app/ui-primitives\";\nimport type {\n BackgroundValue,\n BorderRadiusOptions,\n ColorOptions,\n PaddingOptions,\n} from \"../types\";\nimport type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { useAppNavigation } from \"../shell/AppNavigationContext\";\nimport { OrdersTranslationBridge } from \"../providers/OrdersTranslationBridge\";\nimport { OrdersListScreen } from \"./OrdersListScreen\";\nimport { OrderDetailScreen } from \"./OrderDetailScreen\";\n\ntype OrdersScreenProps = ComponentProps<\"div\"> & {\n background?: BackgroundValue;\n textColor?: ColorOptions;\n accentColor?: ColorOptions;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n onToast?: (message: string, type: \"success\" | \"error\" | \"warning\") => void;\n};\n\nfunction defaultToast(message: string, type: \"success\" | \"error\" | \"warning\") {\n fluidToast({ title: message, type });\n}\n\nexport function OrdersScreen({\n onToast,\n /* eslint-disable @typescript-eslint/no-unused-vars -- destructured to exclude from divProps spread */\n background,\n textColor,\n accentColor,\n padding,\n borderRadius,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...divProps\n}: OrdersScreenProps): React.JSX.Element {\n const { currentSlug } = useAppNavigation();\n const effectiveToast = onToast ?? defaultToast;\n\n // Parse slug: \"orders\" → list, \"orders/{token}\" → detail\n const detailToken = currentSlug.split(\"/\")[1];\n const isDetailView = detailToken !== undefined;\n\n if (isDetailView) {\n return (\n <OrdersTranslationBridge>\n <div {...divProps}>\n <OrderDetailScreen token={detailToken} onToast={effectiveToast} />\n </div>\n </OrdersTranslationBridge>\n );\n }\n\n return (\n <OrdersTranslationBridge>\n <div {...divProps}>\n <OrdersListScreen />\n </div>\n </OrdersTranslationBridge>\n );\n}\n\nexport const ordersScreenPropertySchema: WidgetPropertySchema = {\n widgetType: \"OrdersScreen\",\n displayName: \"Orders Screen\",\n tabsConfig: [{ id: \"styling\", label: \"Styling\" }],\n fields: [],\n} as const satisfies WidgetPropertySchema;\n"],"mappings":"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"}
|