@strapi/admin 4.24.1 → 4.24.3
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/_chunks/{AdminSeatInfo-cKbM8kvI.mjs → AdminSeatInfo-_8WVfI2k.mjs} +3 -4
- package/dist/_chunks/{AdminSeatInfo-cKbM8kvI.mjs.map → AdminSeatInfo-_8WVfI2k.mjs.map} +1 -1
- package/dist/_chunks/{AdminSeatInfo-pyBx72br.js → AdminSeatInfo-fdPAODrT.js} +3 -4
- package/dist/_chunks/{AdminSeatInfo-pyBx72br.js.map → AdminSeatInfo-fdPAODrT.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-sMEn0FIG.mjs → AuthenticatedApp-0W-A9CKn.mjs} +24 -24
- package/dist/_chunks/AuthenticatedApp-0W-A9CKn.mjs.map +1 -0
- package/dist/_chunks/{AuthenticatedApp-9kONd5LP.js → AuthenticatedApp-dvvFgV0a.js} +24 -24
- package/dist/_chunks/AuthenticatedApp-dvvFgV0a.js.map +1 -0
- package/dist/_chunks/{CreateActionEE-llgsP6GG.js → CreateActionEE-qW2hEfot.js} +2 -3
- package/dist/_chunks/{CreateActionEE-llgsP6GG.js.map → CreateActionEE-qW2hEfot.js.map} +1 -1
- package/dist/_chunks/{CreateActionEE-JWg218Mx.mjs → CreateActionEE-yhlazfz4.mjs} +2 -3
- package/dist/_chunks/{CreateActionEE-JWg218Mx.mjs.map → CreateActionEE-yhlazfz4.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-2CvZuw2s.mjs → CreatePage-7lgLZNL_.mjs} +6 -7
- package/dist/_chunks/{CreatePage-2CvZuw2s.mjs.map → CreatePage-7lgLZNL_.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-pRSqvram.js → CreatePage-CmrFQMJC.js} +3 -4
- package/dist/_chunks/{CreatePage-pRSqvram.js.map → CreatePage-CmrFQMJC.js.map} +1 -1
- package/dist/_chunks/{CreatePage-4TuZ5JvH.js → CreatePage-E-FvhPuI.js} +8 -9
- package/dist/_chunks/{CreatePage-4TuZ5JvH.js.map → CreatePage-E-FvhPuI.js.map} +1 -1
- package/dist/_chunks/{CreatePage-1qK_lewD.mjs → CreatePage-R_LEACGf.mjs} +8 -9
- package/dist/_chunks/{CreatePage-1qK_lewD.mjs.map → CreatePage-R_LEACGf.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-9s1f9eRV.mjs → CreatePage-WBJSFt1L.mjs} +3 -4
- package/dist/_chunks/{CreatePage-9s1f9eRV.mjs.map → CreatePage-WBJSFt1L.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-N4sMG7CZ.js → CreatePage-s86FxN96.js} +6 -7
- package/dist/_chunks/{CreatePage-N4sMG7CZ.js.map → CreatePage-s86FxN96.js.map} +1 -1
- package/dist/_chunks/{CreateView-Q1D43XPT.mjs → CreateView-QIHJRLXd.mjs} +6 -7
- package/dist/_chunks/{CreateView-Q1D43XPT.mjs.map → CreateView-QIHJRLXd.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-JSnWP1nr.mjs → CreateView-Uil4HEmI.mjs} +6 -7
- package/dist/_chunks/{CreateView-JSnWP1nr.mjs.map → CreateView-Uil4HEmI.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-KYcik-3y.js → CreateView-Z1S1YP34.js} +6 -7
- package/dist/_chunks/{CreateView-KYcik-3y.js.map → CreateView-Z1S1YP34.js.map} +1 -1
- package/dist/_chunks/{CreateView-Av3Oi80N.js → CreateView-qeInzVb7.js} +6 -7
- package/dist/_chunks/{CreateView-Av3Oi80N.js.map → CreateView-qeInzVb7.js.map} +1 -1
- package/dist/_chunks/{EditPage-wIAsRhCK.mjs → EditPage-26cM6Br1.mjs} +6 -7
- package/dist/_chunks/{EditPage-wIAsRhCK.mjs.map → EditPage-26cM6Br1.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-hc2BwI4v.js → EditPage-CJjc7Mry.js} +9 -10
- package/dist/_chunks/{EditPage-hc2BwI4v.js.map → EditPage-CJjc7Mry.js.map} +1 -1
- package/dist/_chunks/{EditPage-F6ENQ_7v.js → EditPage-aHkkOEtD.js} +4 -5
- package/dist/_chunks/{EditPage-F6ENQ_7v.js.map → EditPage-aHkkOEtD.js.map} +1 -1
- package/dist/_chunks/{EditPage-1oQB_ybR.mjs → EditPage-jBeiCR0x.mjs} +4 -5
- package/dist/_chunks/{EditPage-1oQB_ybR.mjs.map → EditPage-jBeiCR0x.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-SpK2YHJ9.js → EditPage-meUEmcmo.js} +6 -6
- package/dist/_chunks/{EditPage-SpK2YHJ9.js.map → EditPage-meUEmcmo.js.map} +1 -1
- package/dist/_chunks/{EditPage-1zzhTAkb.mjs → EditPage-pV2YK6mV.mjs} +6 -6
- package/dist/_chunks/{EditPage-1zzhTAkb.mjs.map → EditPage-pV2YK6mV.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-obOSpUc6.js → EditPage-px7lwDfY.js} +6 -7
- package/dist/_chunks/{EditPage-obOSpUc6.js.map → EditPage-px7lwDfY.js.map} +1 -1
- package/dist/_chunks/{EditPage-qSnWDV7_.mjs → EditPage-yYXStg87.mjs} +9 -10
- package/dist/_chunks/{EditPage-qSnWDV7_.mjs.map → EditPage-yYXStg87.mjs.map} +1 -1
- package/dist/_chunks/{EditView-YplxCh76.js → EditView-6wM2eONF.js} +4 -5
- package/dist/_chunks/{EditView-YplxCh76.js.map → EditView-6wM2eONF.js.map} +1 -1
- package/dist/_chunks/{EditView-zrXj5T-c.mjs → EditView-r1HOA27b.mjs} +4 -5
- package/dist/_chunks/{EditView-zrXj5T-c.mjs.map → EditView-r1HOA27b.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-awuXoCRr.mjs → EditViewPage-4bV32Q7r.mjs} +4 -5
- package/dist/_chunks/{EditViewPage-awuXoCRr.mjs.map → EditViewPage-4bV32Q7r.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-HC95kNgd.js → EditViewPage-8suVqokC.js} +4 -5
- package/dist/_chunks/{EditViewPage-HC95kNgd.js.map → EditViewPage-8suVqokC.js.map} +1 -1
- package/dist/_chunks/{EventsTable-_LhZe7re.js → EventsTable-Ftc5pejf.js} +6 -7
- package/dist/_chunks/{EventsTable-_LhZe7re.js.map → EventsTable-Ftc5pejf.js.map} +1 -1
- package/dist/_chunks/{EventsTable-4vNRxK-S.mjs → EventsTable-bsy7mgkN.mjs} +6 -7
- package/dist/_chunks/{EventsTable-4vNRxK-S.mjs.map → EventsTable-bsy7mgkN.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-fMxSIEsd.mjs → HomePage-1ud8e5XT.mjs} +5 -6
- package/dist/_chunks/{HomePage-fMxSIEsd.mjs.map → HomePage-1ud8e5XT.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-YJFJpQMu.js → HomePage-8ggsrnev.js} +5 -6
- package/dist/_chunks/{HomePage-YJFJpQMu.js.map → HomePage-8ggsrnev.js.map} +1 -1
- package/dist/_chunks/{HomePage-uz2pWbR8.mjs → HomePage-aDvEczFh.mjs} +6 -7
- package/dist/_chunks/{HomePage-uz2pWbR8.mjs.map → HomePage-aDvEczFh.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-tbMtKZ5S.js → HomePage-xFGSMMww.js} +6 -7
- package/dist/_chunks/{HomePage-tbMtKZ5S.js.map → HomePage-xFGSMMww.js.map} +1 -1
- package/dist/_chunks/{InformationBoxEE-FTugJx5y.js → InformationBoxEE-A2ujADFv.js} +3 -4
- package/dist/_chunks/{InformationBoxEE-FTugJx5y.js.map → InformationBoxEE-A2ujADFv.js.map} +1 -1
- package/dist/_chunks/{InformationBoxEE-iERsuegv.mjs → InformationBoxEE-zSYNqXtZ.mjs} +3 -4
- package/dist/_chunks/{InformationBoxEE-iERsuegv.mjs.map → InformationBoxEE-zSYNqXtZ.mjs.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-yQJCBWcd.js → InstalledPluginsPage-Xv7kCAsO.js} +3 -4
- package/dist/_chunks/{InstalledPluginsPage-yQJCBWcd.js.map → InstalledPluginsPage-Xv7kCAsO.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-fHk7YMKM.mjs → InstalledPluginsPage-xIBYKYPq.mjs} +3 -4
- package/dist/_chunks/{InstalledPluginsPage-fHk7YMKM.mjs.map → InstalledPluginsPage-xIBYKYPq.mjs.map} +1 -1
- package/dist/_chunks/{Layout-L5IGgYl9.mjs → Layout-kVEDYKjZ.mjs} +2 -2
- package/dist/_chunks/{Layout-L5IGgYl9.mjs.map → Layout-kVEDYKjZ.mjs.map} +1 -1
- package/dist/_chunks/{Layout-1AJukXSa.js → Layout-ozKmjzbz.js} +2 -2
- package/dist/_chunks/{Layout-1AJukXSa.js.map → Layout-ozKmjzbz.js.map} +1 -1
- package/dist/_chunks/{ListPage-Asr3_NSR.mjs → ListPage-5iTFDpe-.mjs} +4 -5
- package/dist/_chunks/{ListPage-Asr3_NSR.mjs.map → ListPage-5iTFDpe-.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-QtaoNrK6.js → ListPage-HgFd2Cws.js} +8 -9
- package/dist/_chunks/{ListPage-QtaoNrK6.js.map → ListPage-HgFd2Cws.js.map} +1 -1
- package/dist/_chunks/{ListPage--ku74hPe.js → ListPage-KoaGD8iE.js} +3 -4
- package/dist/_chunks/{ListPage--ku74hPe.js.map → ListPage-KoaGD8iE.js.map} +1 -1
- package/dist/_chunks/{ListPage-u7Dy3pFw.mjs → ListPage-KtyVYRvB.mjs} +7 -8
- package/dist/_chunks/{ListPage-u7Dy3pFw.mjs.map → ListPage-KtyVYRvB.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-gH7NTmzw.mjs → ListPage-RZZQIdBT.mjs} +6 -7
- package/dist/_chunks/{ListPage-gH7NTmzw.mjs.map → ListPage-RZZQIdBT.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-jukX-rcq.mjs → ListPage-ZQalZLZt.mjs} +3 -4
- package/dist/_chunks/{ListPage-jukX-rcq.mjs.map → ListPage-ZQalZLZt.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-dSxW7zGR.mjs → ListPage-bu783mQv.mjs} +2 -3
- package/dist/_chunks/{ListPage-dSxW7zGR.mjs.map → ListPage-bu783mQv.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-HIeUaGJt.js → ListPage-d6Qy0aWV.js} +4 -5
- package/dist/_chunks/{ListPage-HIeUaGJt.js.map → ListPage-d6Qy0aWV.js.map} +1 -1
- package/dist/_chunks/{ListPage-wCETa9bA.js → ListPage-du5SItim.js} +6 -7
- package/dist/_chunks/{ListPage-wCETa9bA.js.map → ListPage-du5SItim.js.map} +1 -1
- package/dist/_chunks/{ListPage-PplJ33CZ.js → ListPage-kRuB5e4n.js} +2 -3
- package/dist/_chunks/{ListPage-PplJ33CZ.js.map → ListPage-kRuB5e4n.js.map} +1 -1
- package/dist/_chunks/{ListPage-dJ5LoxEG.mjs → ListPage-lCvnc3iq.mjs} +8 -9
- package/dist/_chunks/{ListPage-dJ5LoxEG.mjs.map → ListPage-lCvnc3iq.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-R_vY34Z8.js → ListPage-yI278EXh.js} +7 -8
- package/dist/_chunks/{ListPage-R_vY34Z8.js.map → ListPage-yI278EXh.js.map} +1 -1
- package/dist/_chunks/{ListView-_WGm0UfE.mjs → ListView-ebjkV0Qn.mjs} +3 -4
- package/dist/_chunks/{ListView-_WGm0UfE.mjs.map → ListView-ebjkV0Qn.mjs.map} +1 -1
- package/dist/_chunks/{ListView-8acfdhwB.mjs → ListView-k-063mrg.mjs} +3 -4
- package/dist/_chunks/{ListView-8acfdhwB.mjs.map → ListView-k-063mrg.mjs.map} +1 -1
- package/dist/_chunks/{ListView--oYSWTMj.js → ListView-p6uHjVs9.js} +3 -4
- package/dist/_chunks/{ListView--oYSWTMj.js.map → ListView-p6uHjVs9.js.map} +1 -1
- package/dist/_chunks/{ListView-a8tgfYZR.js → ListView-xePUNiV9.js} +3 -4
- package/dist/_chunks/{ListView-a8tgfYZR.js.map → ListView-xePUNiV9.js.map} +1 -1
- package/dist/_chunks/{Login-H7Cb-b9u.mjs → Login-GqfmOsm6.mjs} +2 -3
- package/dist/_chunks/{Login-H7Cb-b9u.mjs.map → Login-GqfmOsm6.mjs.map} +1 -1
- package/dist/_chunks/{Login-JJSG3Q17.js → Login-OI2su1GC.js} +2 -3
- package/dist/_chunks/{Login-JJSG3Q17.js.map → Login-OI2su1GC.js.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-QrxWwK3J.js → MagicLinkEE-FcXopU1u.js} +4 -5
- package/dist/_chunks/{MagicLinkEE-QrxWwK3J.js.map → MagicLinkEE-FcXopU1u.js.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-h2AfSkky.mjs → MagicLinkEE-b2IcvqS1.mjs} +4 -5
- package/dist/_chunks/{MagicLinkEE-h2AfSkky.mjs.map → MagicLinkEE-b2IcvqS1.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-HXV33aGR.js → MarketplacePage-9z1R0T1b.js} +3 -4
- package/dist/_chunks/{MarketplacePage-HXV33aGR.js.map → MarketplacePage-9z1R0T1b.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-Mv65CBzK.mjs → MarketplacePage-Ehut4NEK.mjs} +3 -4
- package/dist/_chunks/{MarketplacePage-Mv65CBzK.mjs.map → MarketplacePage-Ehut4NEK.mjs.map} +1 -1
- package/dist/_chunks/{Permissions-o5FsqSEN.mjs → Permissions--3sZ-eg8.mjs} +2 -2
- package/dist/_chunks/{Permissions-o5FsqSEN.mjs.map → Permissions--3sZ-eg8.mjs.map} +1 -1
- package/dist/_chunks/{Permissions-U7Gfxm78.js → Permissions-0jgnqArp.js} +2 -2
- package/dist/_chunks/{Permissions-U7Gfxm78.js.map → Permissions-0jgnqArp.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-HNl8o56h.js → ProfilePage-HCD8iiDz.js} +4 -5
- package/dist/_chunks/ProfilePage-HCD8iiDz.js.map +1 -0
- package/dist/_chunks/{ProfilePage-yu1ayyHY.mjs → ProfilePage-rByTEZSv.mjs} +4 -5
- package/dist/_chunks/ProfilePage-rByTEZSv.mjs.map +1 -0
- package/dist/_chunks/{ReviewWorkflowsColumn-HWKasziL.mjs → ReviewWorkflowsColumn-GuEM0Pzw.mjs} +2 -3
- package/dist/_chunks/{ReviewWorkflowsColumn-HWKasziL.mjs.map → ReviewWorkflowsColumn-GuEM0Pzw.mjs.map} +1 -1
- package/dist/_chunks/{ReviewWorkflowsColumn-eNxSowxH.js → ReviewWorkflowsColumn-cwsnu2ZR.js} +2 -3
- package/dist/_chunks/{ReviewWorkflowsColumn-eNxSowxH.js.map → ReviewWorkflowsColumn-cwsnu2ZR.js.map} +1 -1
- package/dist/_chunks/{SelectRoles-fcY2TRKH.js → SelectRoles-JMx8T14x.js} +3 -3
- package/dist/_chunks/{SelectRoles-fcY2TRKH.js.map → SelectRoles-JMx8T14x.js.map} +1 -1
- package/dist/_chunks/{SelectRoles-lGIENydS.mjs → SelectRoles-SPS56XJu.mjs} +3 -3
- package/dist/_chunks/{SelectRoles-lGIENydS.mjs.map → SelectRoles-SPS56XJu.mjs.map} +1 -1
- package/dist/_chunks/{SettingsPage-AdHfj5GW.mjs → SettingsPage-55PUQgmA.mjs} +21 -22
- package/dist/_chunks/{SettingsPage-AdHfj5GW.mjs.map → SettingsPage-55PUQgmA.mjs.map} +1 -1
- package/dist/_chunks/{SettingsPage-mAb9sKT9.js → SettingsPage-x4AKyEnW.js} +21 -22
- package/dist/_chunks/{SettingsPage-mAb9sKT9.js.map → SettingsPage-x4AKyEnW.js.map} +1 -1
- package/dist/_chunks/{SingleSignOnPage-m31WC3pK.js → SingleSignOnPage-NRMmwjF0.js} +3 -4
- package/dist/_chunks/{SingleSignOnPage-m31WC3pK.js.map → SingleSignOnPage-NRMmwjF0.js.map} +1 -1
- package/dist/_chunks/{SingleSignOnPage-xe2YbAsv.mjs → SingleSignOnPage-mbZtYqh1.mjs} +3 -4
- package/dist/_chunks/{SingleSignOnPage-xe2YbAsv.mjs.map → SingleSignOnPage-mbZtYqh1.mjs.map} +1 -1
- package/dist/_chunks/{TokenTypeSelect-VqdmzXA_.mjs → TokenTypeSelect-T4JplhIP.mjs} +2 -2
- package/dist/_chunks/{TokenTypeSelect-VqdmzXA_.mjs.map → TokenTypeSelect-T4JplhIP.mjs.map} +1 -1
- package/dist/_chunks/{TokenTypeSelect-X2ULS8wc.js → TokenTypeSelect-mzw7r8sl.js} +2 -2
- package/dist/_chunks/{TokenTypeSelect-X2ULS8wc.js.map → TokenTypeSelect-mzw7r8sl.js.map} +1 -1
- package/dist/_chunks/{apiTokens-GZPZS8MW.mjs → apiTokens-CUBfON9a.mjs} +2 -2
- package/dist/_chunks/{apiTokens-GZPZS8MW.mjs.map → apiTokens-CUBfON9a.mjs.map} +1 -1
- package/dist/_chunks/{apiTokens-82n35OFR.js → apiTokens-FKSBkURH.js} +2 -2
- package/dist/_chunks/{apiTokens-82n35OFR.js.map → apiTokens-FKSBkURH.js.map} +1 -1
- package/dist/_chunks/{constants-LwQ2Ofil.mjs → constants-KYmN2NOr.mjs} +3 -4
- package/dist/_chunks/constants-KYmN2NOr.mjs.map +1 -0
- package/dist/_chunks/{constants-3wB1UhYD.js → constants-Ws4oXuLS.js} +3 -4
- package/dist/_chunks/constants-Ws4oXuLS.js.map +1 -0
- package/dist/_chunks/{constants-n2SnaxpT.js → constants-Z11Xre4u.js} +2 -3
- package/dist/_chunks/{constants-n2SnaxpT.js.map → constants-Z11Xre4u.js.map} +1 -1
- package/dist/_chunks/{constants-ycjYcL0v.js → constants-dvnXMd4F.js} +4 -5
- package/dist/_chunks/{constants-ycjYcL0v.js.map → constants-dvnXMd4F.js.map} +1 -1
- package/dist/_chunks/{constants-4rk-q6TX.mjs → constants-fsggVjP9.mjs} +2 -3
- package/dist/_chunks/{constants-4rk-q6TX.mjs.map → constants-fsggVjP9.mjs.map} +1 -1
- package/dist/_chunks/{constants-4SP3TBnI.mjs → constants-mGmqWhng.mjs} +6 -6
- package/dist/_chunks/{constants-4SP3TBnI.mjs.map → constants-mGmqWhng.mjs.map} +1 -1
- package/dist/_chunks/{constants-rwBV5bIU.mjs → constants-scI6GjKg.mjs} +4 -5
- package/dist/_chunks/{constants-rwBV5bIU.mjs.map → constants-scI6GjKg.mjs.map} +1 -1
- package/dist/_chunks/{constants-X171CMX-.js → constants-xvtwsVOy.js} +6 -6
- package/dist/_chunks/{constants-X171CMX-.js.map → constants-xvtwsVOy.js.map} +1 -1
- package/dist/_chunks/{index-jPSc5477.mjs → index-54UXR7Wc.mjs} +30 -27
- package/dist/_chunks/index-54UXR7Wc.mjs.map +1 -0
- package/dist/_chunks/{index-WJOOvkDD.js → index-kZ-K27W9.js} +30 -28
- package/dist/_chunks/index-kZ-K27W9.js.map +1 -0
- package/dist/_chunks/{reviewWorkflows-gLpmSc-P.mjs → reviewWorkflows-A6sfQAOx.mjs} +2 -2
- package/dist/_chunks/{reviewWorkflows-gLpmSc-P.mjs.map → reviewWorkflows-A6sfQAOx.mjs.map} +1 -1
- package/dist/_chunks/{reviewWorkflows-ksEl2Csi.js → reviewWorkflows-FHvDJlqd.js} +2 -2
- package/dist/_chunks/{reviewWorkflows-ksEl2Csi.js.map → reviewWorkflows-FHvDJlqd.js.map} +1 -1
- package/dist/_chunks/{transferTokens-suC3-N9k.js → transferTokens-DCO_Nrwf.js} +2 -2
- package/dist/_chunks/{transferTokens-suC3-N9k.js.map → transferTokens-DCO_Nrwf.js.map} +1 -1
- package/dist/_chunks/{transferTokens-fYJp5ok3.mjs → transferTokens-Lyu3xygE.mjs} +2 -2
- package/dist/_chunks/{transferTokens-fYJp5ok3.mjs.map → transferTokens-Lyu3xygE.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-rzx-BOWF.js → useAdminRoles--o-EQss7.js} +2 -2
- package/dist/_chunks/{useAdminRoles-rzx-BOWF.js.map → useAdminRoles--o-EQss7.js.map} +1 -1
- package/dist/_chunks/{useAdminRoles-S0VLTy6d.mjs → useAdminRoles-eAVDHW69.mjs} +2 -2
- package/dist/_chunks/{useAdminRoles-S0VLTy6d.mjs.map → useAdminRoles-eAVDHW69.mjs.map} +1 -1
- package/dist/_chunks/{useContentTypes-9lPhF1tf.mjs → useContentTypes-j--ijKnN.mjs} +2 -2
- package/dist/_chunks/{useContentTypes-9lPhF1tf.mjs.map → useContentTypes-j--ijKnN.mjs.map} +1 -1
- package/dist/_chunks/{useContentTypes-CGkh8E2r.js → useContentTypes-j9gMwsYu.js} +2 -2
- package/dist/_chunks/{useContentTypes-CGkh8E2r.js.map → useContentTypes-j9gMwsYu.js.map} +1 -1
- package/dist/_chunks/{useLicenseLimitNotification-pFWrPKCC.js → useLicenseLimitNotification-L4kV-m6_.js} +2 -2
- package/dist/_chunks/{useLicenseLimitNotification-pFWrPKCC.js.map → useLicenseLimitNotification-L4kV-m6_.js.map} +1 -1
- package/dist/_chunks/{useLicenseLimitNotification-4XtO7tSc.mjs → useLicenseLimitNotification-VEpn45Ni.mjs} +2 -2
- package/dist/_chunks/{useLicenseLimitNotification-4XtO7tSc.mjs.map → useLicenseLimitNotification-VEpn45Ni.mjs.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-vGqBbIF4.js → useReviewWorkflows-a0C1ikFJ.js} +2 -2
- package/dist/_chunks/{useReviewWorkflows-vGqBbIF4.js.map → useReviewWorkflows-a0C1ikFJ.js.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-uyrpgZeG.mjs → useReviewWorkflows-tIp2ZkjD.mjs} +2 -2
- package/dist/_chunks/{useReviewWorkflows-uyrpgZeG.mjs.map → useReviewWorkflows-tIp2ZkjD.mjs.map} +1 -1
- package/dist/_chunks/{useWebhooks-Lb4ugXPu.mjs → useWebhooks-4jpSbuXr.mjs} +2 -2
- package/dist/_chunks/{useWebhooks-Lb4ugXPu.mjs.map → useWebhooks-4jpSbuXr.mjs.map} +1 -1
- package/dist/_chunks/{useWebhooks-WKx90f9K.js → useWebhooks-g9J_FFMC.js} +2 -2
- package/dist/_chunks/{useWebhooks-WKx90f9K.js.map → useWebhooks-g9J_FFMC.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-cjgWciUT.js → validateWorkflow-GRDaNqdW.js} +2 -2
- package/dist/_chunks/{validateWorkflow-cjgWciUT.js.map → validateWorkflow-GRDaNqdW.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-ZCzTSTMU.mjs → validateWorkflow-ubW4LNUb.mjs} +2 -2
- package/dist/_chunks/{validateWorkflow-ZCzTSTMU.mjs.map → validateWorkflow-ubW4LNUb.mjs.map} +1 -1
- package/dist/admin/index.js +1 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/Context.d.ts +1 -1
- package/dist/admin/src/features/Auth.d.ts +1 -1
- package/package.json +12 -13
- package/dist/_chunks/AuthenticatedApp-9kONd5LP.js.map +0 -1
- package/dist/_chunks/AuthenticatedApp-sMEn0FIG.mjs.map +0 -1
- package/dist/_chunks/ProfilePage-HNl8o56h.js.map +0 -1
- package/dist/_chunks/ProfilePage-yu1ayyHY.mjs.map +0 -1
- package/dist/_chunks/constants-3wB1UhYD.js.map +0 -1
- package/dist/_chunks/constants-LwQ2Ofil.mjs.map +0 -1
- package/dist/_chunks/index-WJOOvkDD.js.map +0 -1
- package/dist/_chunks/index-jPSc5477.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticatedApp-9kONd5LP.js","sources":["../../admin/src/utils/getFullName.ts","../../admin/src/utils/hashAdminUserEmail.ts","../../admin/src/components/GuidedTour/constants.ts","../../admin/src/components/GuidedTour/Ornaments.tsx","../../admin/src/components/GuidedTour/Modal.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/assets/images/onboarding-preview.png","../../admin/src/components/Onboarding.tsx","../../admin/src/selectors.ts","../../admin/src/hooks/useMenu.ts","../../admin/src/layouts/AppLayout.tsx","../../admin/src/pages/Admin.tsx","../../admin/src/components/PluginsInitializer.tsx","../../admin/src/components/AuthenticatedApp.tsx"],"sourcesContent":["export function getFullName(firstname: string, lastname: string | null = '') {\n return [firstname, lastname].filter((str) => str).join(' ');\n}\n","import { SanitizedAdminUser } from '../../../shared/contracts/shared';\n\nexport const utils = {\n bufferToHex(buffer: ArrayBuffer) {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n },\n async digestMessage(message: string) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return this.bufferToHex(hashBuffer);\n },\n};\n\nexport async function hashAdminUserEmail(payload?: SanitizedAdminUser) {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await utils.digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n}\n","const LAYOUT_DATA = {\n contentTypeBuilder: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.title',\n defaultMessage: '🧠 Build the content structure',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.cta.title',\n defaultMessage: 'Go to the Content type Builder',\n },\n type: 'REDIRECT',\n target: '/plugins/content-type-builder',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentTypeBuilder',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.title',\n defaultMessage: '🧠 Create a first Collection type',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.create.content',\n defaultMessage:\n '<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.cta.title',\n defaultMessage: 'Build a Collection type',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep1CollectionType',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CTB.success.title',\n defaultMessage: 'Step 1: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.success.content',\n defaultMessage: '<p>Good going!</p><b>⚡️ What would you like to share with the world?</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didCreateGuidedTourCollectionType',\n },\n },\n contentManager: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CM.title',\n defaultMessage: '⚡️ What would you like to share with the world?',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentManager',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CM.create.title',\n defaultMessage: '⚡️ Create content',\n },\n content: {\n id: 'app.components.GuidedTour.CM.create.content',\n defaultMessage:\n \"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>💡 Quick tip - Don't forget to hit publish on the content you create.</p>\",\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep2ContentManager',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CM.success.title',\n defaultMessage: 'Step 2: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CM.success.content',\n defaultMessage: '<p>Awesome, one last step to go!</p><b>🚀 See content in action</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CM.success.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didCreateGuidedTourEntry',\n },\n },\n apiTokens: {\n home: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.apiTokens.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didClickGuidedTourHomepageApiTokens',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.create.content',\n defaultMessage:\n '<p>Generate an authentication token here and retrieve the content you just created.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.cta.title',\n defaultMessage: 'Generate an API Token',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep3ApiTokens',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.success.title',\n defaultMessage: 'Step 3: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.success.content',\n defaultMessage:\n \"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>\",\n },\n trackingEvent: 'didGenerateGuidedTourApiTokens',\n },\n },\n} as const;\n\nconst STATES = {\n IS_DONE: 'IS_DONE',\n IS_ACTIVE: 'IS_ACTIVE',\n IS_NOT_DONE: 'IS_NOT_DONE',\n} as const;\n\ntype LayoutData = typeof LAYOUT_DATA;\ntype States = keyof typeof STATES;\n\nexport { LAYOUT_DATA, STATES };\nexport type { LayoutData, States };\n","import { Box, BoxProps, Flex, FlexProps, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\n\nimport { STATES, States } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Number\n * -----------------------------------------------------------------------------------------------*/\n\ninterface NumberProps extends FlexProps {\n children: number;\n state: States;\n}\n\nconst Number = ({ children, state, ...props }: NumberProps) => {\n return state === STATES.IS_DONE || state === STATES.IS_ACTIVE ? (\n <Flex\n background=\"primary600\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n {state === STATES.IS_DONE ? (\n <Check aria-hidden width={pxToRem(16)} color=\"neutral0\" />\n ) : (\n <Typography fontWeight=\"semiBold\" textColor=\"neutral0\">\n {children}\n </Typography>\n )}\n </Flex>\n ) : (\n <Flex\n borderColor=\"neutral500\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n <Typography fontWeight=\"semiBold\" textColor=\"neutral600\">\n {children}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VerticalDivider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VerticalDividerProps extends BoxProps {\n state: States;\n}\n\nconst VerticalDivider = ({ state, ...props }: VerticalDividerProps) => (\n <Box\n width={pxToRem(2)}\n height=\"100%\"\n background={state === STATES.IS_NOT_DONE ? 'neutral300' : 'primary500'}\n hasRadius\n minHeight={state === STATES.IS_ACTIVE ? pxToRem(85) : pxToRem(65)}\n {...props}\n />\n);\n\nexport { Number, VerticalDivider };\nexport type { NumberProps, VerticalDividerProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n Typography,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { GuidedTourContextValue, pxToRem, useGuidedTour, useTracking } from '@strapi/helper-plugin';\nimport { ArrowRight, Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { LAYOUT_DATA, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourModal = () => {\n const {\n currentStep,\n guidedTourState,\n setCurrentStep,\n setStepState,\n isGuidedTourVisible,\n setSkipped,\n } = useGuidedTour();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n if (!currentStep || !isGuidedTourVisible) {\n return null;\n }\n\n const stepData = get(LAYOUT_DATA, currentStep);\n const sectionKeys = Object.keys(guidedTourState);\n const [sectionName, stepName] = currentStep.split('.') as [\n keyof GuidedTourContextValue['guidedTourState'],\n string\n ];\n const sectionIndex = sectionKeys.indexOf(sectionName);\n const stepIndex = Object.keys(guidedTourState[sectionName]).indexOf(stepName);\n const hasSectionAfter = sectionIndex < sectionKeys.length - 1;\n const hasStepAfter = stepIndex < Object.keys(guidedTourState[sectionName]).length - 1;\n\n const handleCtaClick = () => {\n setStepState(currentStep, true);\n\n if (stepData) {\n trackUsage(stepData.trackingEvent);\n }\n\n setCurrentStep(null);\n };\n\n const handleSkip = () => {\n setSkipped(true);\n setCurrentStep(null);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Portal>\n <ModalWrapper onClick={handleCtaClick} padding={8} justifyContent=\"center\">\n <FocusTrap onEscape={handleCtaClick}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral0\"\n width={pxToRem(660)}\n shadow=\"popupShadow\"\n hasRadius\n padding={4}\n gap={8}\n role=\"dialog\"\n aria-modal\n onClick={(e) => e.stopPropagation()}\n >\n <Flex justifyContent=\"flex-end\">\n <IconButton\n onClick={handleCtaClick}\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n >\n <Cross />\n </IconButton>\n </Flex>\n <Box\n paddingLeft={7}\n paddingRight={7}\n paddingBottom={!hasStepAfter && !hasSectionAfter ? 8 : 0}\n >\n <GuidedTourStepper\n title={stepData && 'title' in stepData ? stepData.title : undefined}\n cta={stepData && 'cta' in stepData ? stepData.cta : undefined}\n onCtaClick={handleCtaClick}\n sectionIndex={sectionIndex}\n stepIndex={stepIndex}\n hasSectionAfter={hasSectionAfter}\n >\n {stepData && 'content' in stepData && <GuidedTourContent {...stepData.content} />}\n </GuidedTourStepper>\n </Box>\n {!(!hasStepAfter && !hasSectionAfter) && (\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({\n id: 'app.components.GuidedTour.skip',\n defaultMessage: 'Skip the tour',\n })}\n </Button>\n </Flex>\n )}\n </Flex>\n </FocusTrap>\n </ModalWrapper>\n </Portal>\n );\n};\n\nconst ModalWrapper = styled(Flex)`\n position: fixed;\n z-index: 4;\n inset: 0;\n /* this is theme.colors.neutral800 with opacity */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourStepper\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourStepperProps {\n title: MessageDescriptor | undefined;\n children: React.ReactNode;\n cta?: {\n title: MessageDescriptor;\n target?: string;\n };\n onCtaClick: () => void;\n sectionIndex: number;\n stepIndex: number;\n hasSectionAfter: boolean;\n}\n\nconst GuidedTourStepper = ({\n title,\n children,\n cta,\n onCtaClick,\n sectionIndex,\n stepIndex,\n hasSectionAfter,\n}: GuidedTourStepperProps) => {\n const { formatMessage } = useIntl();\n\n const hasSectionBefore = sectionIndex > 0;\n const hasStepsBefore = stepIndex > 0;\n const nextSectionIndex = sectionIndex + 1;\n\n return (\n <>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionBefore && <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />}\n </Flex>\n <Typography variant=\"sigma\" textColor=\"primary600\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n </Flex>\n <Flex>\n <Flex marginRight={8} minWidth={pxToRem(30)}>\n <Number\n state={hasStepsBefore ? STATES.IS_DONE : STATES.IS_ACTIVE}\n paddingTop={3}\n paddingBottom={3}\n >\n {sectionIndex + 1}\n </Number>\n </Flex>\n {title && (\n <Typography variant=\"alpha\" fontWeight=\"bold\" textColor=\"neutral800\" as=\"h3\" id=\"title\">\n {formatMessage(title)}\n </Typography>\n )}\n </Flex>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} direction=\"column\" justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionAfter && (\n <>\n <VerticalDivider state={STATES.IS_DONE} />\n {hasStepsBefore && (\n <Number state={STATES.IS_ACTIVE} paddingTop={3}>\n {nextSectionIndex + 1}\n </Number>\n )}\n </>\n )}\n </Flex>\n <Box>\n {children}\n {cta &&\n (cta.target ? (\n <LinkButton\n as={NavLink}\n endIcon={<ArrowRight />}\n onClick={onCtaClick}\n // @ts-expect-error - types are not inferred correctly through the as prop.\n to={cta.target}\n >\n {formatMessage(cta.title)}\n </LinkButton>\n ) : (\n <Button endIcon={<ArrowRight />} onClick={onCtaClick}>\n {formatMessage(cta.title)}\n </Button>\n ))}\n </Box>\n </Flex>\n {hasStepsBefore && hasSectionAfter && (\n <Box paddingTop={3}>\n <Flex marginRight={8} justifyContent=\"center\" width={pxToRem(30)}>\n <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />\n </Flex>\n </Box>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourContentProps\n extends Required<Pick<MessageDescriptor, 'defaultMessage' | 'id'>> {}\n\nconst GuidedTourContent = ({ id, defaultMessage }: GuidedTourContentProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} paddingBottom={6}>\n {formatMessage(\n { id, defaultMessage },\n {\n documentationLink: DocumentationLink,\n b: Bold,\n p: Paragraph,\n light: Light,\n ul: List,\n li: ListItem,\n }\n )}\n </Flex>\n );\n};\n\nconst DocumentationLink = (children: React.ReactNode) => (\n <Typography\n as=\"a\"\n textColor=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#api-parameters\"\n >\n {children}\n </Typography>\n);\n\nconst Bold = (children: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\">{children}</Typography>\n);\n\nconst Paragraph = (children: React.ReactNode) => <Typography>{children}</Typography>;\n\nconst Light = (children: React.ReactNode) => (\n <Typography textColor=\"neutral600\">{children}</Typography>\n);\n\nconst List = (children: React.ReactNode) => (\n <Box paddingLeft={6}>\n <ul>{children}</ul>\n </Box>\n);\n\nconst LiStyled = styled.li`\n list-style: disc;\n &::marker {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n`;\n\nconst ListItem = (children: React.ReactNode) => <LiStyled>{children}</LiStyled>;\n\nexport { GuidedTourModal };\n","import * as React from 'react';\n\nimport { Box, Divider, Flex, FocusTrap, Icon, Typography } from '@strapi/design-system';\nimport {\n MainNav,\n NavBrand,\n NavCondense,\n NavFooter,\n NavLink,\n NavSection,\n NavSections,\n NavUser,\n} from '@strapi/design-system/v2';\nimport { useAppInfo, usePersistentState, useTracking } from '@strapi/helper-plugin';\nimport { Exit, Write, Lock } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink as RouterNavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { Menu } from '../hooks/useMenu';\n\nconst LinkUserWrapper = styled(Box)`\n width: ${150 / 16}rem;\n position: absolute;\n bottom: ${({ theme }) => theme.spaces[9]};\n left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst LinkUser = styled(RouterNavLink)<{ logout?: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.spaces[1]};\n\n &:hover {\n background: ${({ theme, logout }) =>\n logout ? theme.colors.danger100 : theme.colors.primary100};\n text-decoration: none;\n }\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n }\n`;\n\nconst NavLinkWrapper = styled(Box)`\n div:nth-child(2) {\n /* remove badge background color */\n background: transparent;\n }\n`;\n\ninterface LeftMenuProps extends Pick<Menu, 'generalSectionLinks' | 'pluginsSectionLinks'> {}\n\nconst LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }: LeftMenuProps) => {\n const navUserRef = React.useRef<HTMLDivElement>(null!);\n const [userLinksVisible, setUserLinksVisible] = React.useState(false);\n const {\n logos: { menu },\n } = useConfiguration('LeftMenu');\n const [condensed, setCondensed] = usePersistentState('navbar-condensed', false);\n const { userDisplayName } = useAppInfo();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const logout = useAuth('Logout', (state) => state.logout);\n\n const initials = userDisplayName\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 2);\n\n const handleToggleUserLinks = () => setUserLinksVisible((prev) => !prev);\n\n const handleBlur: React.FocusEventHandler = (e) => {\n if (\n !e.currentTarget.contains(e.relatedTarget) &&\n /**\n * TODO: can we replace this by just using the navUserRef?\n */\n e.relatedTarget?.parentElement?.id !== 'main-nav-user-button'\n ) {\n setUserLinksVisible(false);\n }\n };\n\n const handleClickOnLink = (destination: string) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n const menuTitle = formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n });\n\n return (\n <MainNav condensed={condensed}>\n <NavBrand\n as={RouterNavLink}\n workplace={formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n title={menuTitle}\n icon={\n <img\n src={menu.custom?.url || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n />\n }\n />\n\n <Divider />\n\n <NavSections>\n <NavLink\n as={RouterNavLink}\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to=\"/content-manager\"\n icon={<Write />}\n onClick={() => handleClickOnLink('/content-manager')}\n >\n {formatMessage({ id: 'global.content-manager', defaultMessage: 'Content manager' })}\n </NavLink>\n\n {pluginsSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.plugins',\n defaultMessage: 'Plugins',\n })}\n >\n {pluginsSectionLinks.map((link) => {\n const LinkIcon = link.icon;\n return (\n <NavLinkWrapper key={link.to}>\n <NavLink\n as={RouterNavLink}\n to={link.to}\n icon={<LinkIcon />}\n onClick={() => handleClickOnLink(link.to)}\n // @ts-expect-error: badgeContent in the DS accept only strings\n badgeContent={\n link?.lockIcon ? (\n <Icon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n ) : undefined\n }\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n </NavLinkWrapper>\n );\n })}\n </NavSection>\n ) : null}\n\n {generalSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.general',\n defaultMessage: 'General',\n })}\n >\n {generalSectionLinks.map((link) => {\n const LinkIcon = link.icon;\n\n return (\n <NavLink\n as={RouterNavLink}\n badgeContent={\n link.notificationsCount && link.notificationsCount > 0\n ? link.notificationsCount.toString()\n : undefined\n }\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to={link.to}\n key={link.to}\n icon={<LinkIcon />}\n onClick={() => handleClickOnLink(link.to)}\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n );\n })}\n </NavSection>\n ) : null}\n </NavSections>\n\n <NavFooter>\n <NavUser\n id=\"main-nav-user-button\"\n ref={navUserRef}\n onClick={handleToggleUserLinks}\n initials={initials}\n >\n {userDisplayName}\n </NavUser>\n {userLinksVisible && (\n <LinkUserWrapper\n onBlur={handleBlur}\n padding={1}\n shadow=\"tableShadow\"\n background=\"neutral0\"\n hasRadius\n >\n <FocusTrap onEscape={handleToggleUserLinks}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={0}>\n <LinkUser tabIndex={0} onClick={handleToggleUserLinks} to=\"/me\">\n <Typography>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n </LinkUser>\n <LinkUser tabIndex={0} onClick={logout} to=\"/auth/login\">\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Logout',\n })}\n </Typography>\n <Exit />\n </LinkUser>\n </Flex>\n </FocusTrap>\n </LinkUserWrapper>\n )}\n\n <NavCondense onClick={() => setCondensed((s) => !s)}>\n {condensed\n ? formatMessage({\n id: 'app.components.LeftMenu.expand',\n defaultMessage: 'Expand the navbar',\n })\n : formatMessage({\n id: 'app.components.LeftMenu.collapse',\n defaultMessage: 'Collapse the navbar',\n })}\n </NavCondense>\n </NavFooter>\n </MainNav>\n );\n};\n\nexport { LeftMenu };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAMAAAD2kgFPAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAL9UExURff3+fv7+/X19/Pz9/n5+fv7/f39//////39/UdwTPn5+/X1+fHx++/v8fn5/fHx8/Pz9eTk6e/v8/Hx9fHx/e3u7/X19e3t8evr7+fn6YuR96Gl+OLi59LS2dTU2uvr++nq7ff39+Tk697e4ufn6+vr7enq69ra3tDQ1uDg5/nv7+Dg5Nzc4Nzd4tTU2OTk5+fn7djY3tzc5M/Q1NjY3NLS1tbX3MzM0u/w9crK0unp7+np+/37+8rK0MjIzu/v78PEy9ra4djY4eLi6t7e5NbW2s7O1OLk5+/v/Ojp/dra5MPF9+3u89bX3mxz99DQ2fj4+OLi5PHx8dvb29ze+/f3/7C1+t7e5+vr69PX2OPk/Jydl/T09/f393R7+Gdw96ytuNTU3M7O2ODg6a6vumJq9+3u/dTW/PP19cXGzd7e4O3t7cnK+/f3+uLk683O+Z2h+dLU+9/h++no3/j39bq0pu/v7fv7+fHz9XF4911l93V8+bm5waGirffr7Kqrtq+z9qentF9o93mA+fj4+vr6++/v7/f3++vt+83N0/Pz8+vr8dbY+sjJ98zO1crM0vn5//Pz/ra6n/n59d/g4quvp9fa2OTn66Shm8C2prCuq+/r67Gxr9LLvbCwrcfEwK+vqZSahtPVw5WafKiknff5+ZqapvHw7fv4+YGH9dnb++Tn/Ly8xvfo6Oq5v////6WlsNrc3vPz+dLU2Ovr/eTn+drc4JWXo6Wp+cLE++nr74+T+enr4s7Q1m5098bArefk5Nze0ODc1Pf3/MC8tuDi0KWrh/n39+Tk4qmv+77Cqdjc3PX1/c7S0vv7/7ixo/Px7Z+jh62x+8rMtrS6pZebjY+Rn9bayKuvm+vp5+np6aWrjVJa9fX38bi895+fm1pk9620oevp6bS0r+fp6fv19VZg9fn19X6F+fnz89LS3MDAyPXi4uextvX1+vPW2OCVnYmJl9zc4Xh4iff3+mdy97y8xPf3977C96mpsbS29YeHlamv84qS87i89VXx8BYAAAD/dFJOU319fX19fX19fQB9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19bX19fX19fX19fX19Lwd9fX19fX19fX19fX19fX1lfX19fX19fX19fX19fX19fX19fX19fW1dED59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0PfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1mfX19bX1eXn0/fX19fX0/fSWruQsAAAbiSURBVGje7VkFcBtHFD2SbnXO9UA56dRIiiRbFFlmiO3asWKIE0MYGrQbZmjDDA1T06RJ03DSJA2XMaWUmZmZmWm6ki3lTie59kTSlJ40p5nV//tud//b/28P0WiG/PgdkhBMHKzRaBDNyWXSRoqi4ki57CQk/MZsKna58pqa0N4gnoNcNgQZzBV8ml9aYMYaW4DQRKjvDC8MG7TkG0ff+gmobifD78gXYQZE0++8b08tXFg/4uf6H46VLh5Rf/P8TERtXG1ykkmtI7zmtZFLhtW9NWfOnCUjhy0Z+T2CJOFYJMOS+YtPzV884teDX8879sKIhfUHSxG1AzH0ajXhB3UjPxpaVzd37uyls5cunRv30Fx0vhxRDfXdLLbhZWU2W1mGGNtbEPuXdStz+2ycu/+kbmv4YLOWZ3merdEyNSweW0KMxXkW1+J4RwxeMeRfCIbhMsu7/LUd0QgkSYkW8TS5wznVlg93W8LnEiUooAIqFYBQkxBnSIxkMStJVLUPoah90cCqlSurWkSI6ijdGGv0v0Wv3iaIa1i9KLJ+QoR0Wk0l2YCo6jO5unpq9dTJkyesW7uu+oZp09q0iLDXvOQNG0r9uxbtNdU2hIcidV4YELTpt40C17WIsMk9oAyapxMbNxiCR4uRWAP2TNOZ3S/KCmdEyfggEORQ9Xh4kKPkM8O6AjbIS/BWfZLED+N5StmbisEZRttRTzVD2LZtUdW09gPbFx0tatuE0Y2E/YYeVYlI0E7ELYjET68vJJS9nZdRc1shq7dgzRIeKfrtj0W//LTojTDCOE2pMsjb3BiQhSo+gF3jOJNhKQwPUgqcBdqhER+Cc4efUOvL8nFKwhxn/tjKtNLTY12HO3z15ecnTiz4ODaEkUEBgoKqIRAdgR3u8NmC4wuOd3g/noSoWoILGgHU5w7/jGpxbQ28dJRl3/AoPfR6jKIUqcnKstkm2fpnZOlZGSFBqUgQtLt6/9vvSf0Y/19qENYbgIpHSQBvFk6ekgy2NZO9SIqk1Pag7Ttvvttb6pu3Ps9lTtvsqsiTtmLpnC83L8fpyjXlmpMVhDYS+IKbN6YkBNINaubunWiMphTh9d0L1tcqMj6IDwKdszgeYYR9u6old/bsi1SsRohhs3heVBK2mz1QLQTthOe3Xyj1q8xJ3uwZZ/A5jbI17GlPyUlNTk31jHN6DQoyhgLuQNVm7l7bWZkPb719FBnKCIcOTJ8h9bVi8GO16hCdLAxR1N9E6HSsDlOmDGjLNBOlcnR6KlY6RFitODzFlrCM799qyt1eZV1KEqhU+E+/5EiE8EML/8qgXVdIfbPHZhfkrrp2bL5J2sqmJptL8nOzi9fnFxekKgjLUOB/rub58obMCEGjVoGzI7x8986Z5zydsDcQkMXWQguPJG4No25tslXYt08Vs62N8TaYvUnKNVSh6tVBuxl798iE7/QYuRSO5jhB2koYGCHZ4PBwKV2MnF5BhlPqxsqC1uJshKChUDIk3qsOPPmy1LeXIIgMzToYWtqK6nS0vRNNC+P1gqgUPrwFfYuFP+DiWK5hCwhjFzSF/WuzOnd2uwt9fEcZ4dp+l52VxSWvPueQb4ugMc7lcY8GhA+iC5+CETqLhV8Ww5iwmmbKsD4glPHtg3bIhJ/mMpucuelpabK8jqVyqdkVOea0nOtzTR4FYQoKvM1MadcJfSUjvO+uB2MlfP+hgrtLAoUf5VAhzPCe++MepVD4gAmlw71bZMLvnZ5ucBhpe0+ZDokuUPgpnJETofDtkYSfEjhUKP8ks0G5eaOoVPjbpt8t9XUYOU+6gfZYZIUEytMOzmB39OzJGThaQZgBv1EPFeIr/AiHCnEMmmiHCgMnnJHI4oFNjGzySEBGVDZsD2g+ovChX3DzjpCeptT1AaEdf8CgHbKgcbnSXBUmoykvRyb8ZKMnrSIzz2Q2myKV+iHhY0laJeGRfhLhW/dcqWulxqOOkOFNp7v78IRm/BZkiztiF6WRDxX85zRFIKTDGfu3PCr1SxcEmGd1jMDKhD9+jE6kRZHWdrILSh3CTsVAXZqa5eWUhA8P7UqGuuu0bfpDso3fuJXjDILHIBc+LQgp6XaHMd1o4HpFyvgZzUzpE49Jn5563wv+qRk/ej6culFSCG96RBc74UcmnHJnH2A5K/xdj0t9S0oLirMrvSWrKmSlvvMmZ3GBuTI/u7IkX1nqW1BQ2wzh6FskNY11eyuFH2kC4DJRf581/B+tQHzfK4e9ZsIQBkFHbURgLQMfX9x4vAlh1sMhIYnAhxhYxVgSNE6C+E+F0KWJpZuIrEgs4WBkSI9E8vXQIJrlCWTssRwSajSDJyYoXFYM0Wj+BNjsk7mwYOwbAAAAAElFTkSuQmCC\"","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Icon,\n PopoverPrimitives,\n Portal,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useAppInfo } from '@strapi/helper-plugin';\nimport { Cross, Message, Play, Question, Book, PaperPlane } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport onboardingPreview from '../assets/images/onboarding-preview.png';\n\nconst Onboarding = () => {\n const triggerRef = React.useRef<HTMLButtonElement>(null!);\n const [isOpen, setIsOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { communityEdition } = useAppInfo();\n\n const handlePopoverVisibility = () => {\n setIsOpen((prev) => !prev);\n };\n\n const docLinks = [\n ...DOCUMENTATION_LINKS,\n {\n label: { id: 'Settings.application.get-help', defaultMessage: 'Get help' },\n icon: Message,\n href: communityEdition\n ? 'https://discord.strapi.io'\n : 'https://support.strapi.io/support/home',\n },\n ];\n\n return (\n <Box as=\"aside\" position=\"fixed\" bottom={2} right={2}>\n <HelperButton\n aria-label={formatMessage(\n isOpen\n ? {\n id: 'app.components.Onboarding.help.button-close',\n defaultMessage: 'Close help menu',\n }\n : {\n id: 'app.components.Onboarding.help.button',\n defaultMessage: 'Open help menu',\n }\n )}\n onClick={handlePopoverVisibility}\n ref={triggerRef}\n >\n <Icon as={isOpen ? Cross : Question} color=\"buttonNeutral0\" />\n </HelperButton>\n\n {isOpen && (\n <Portal>\n <PopoverPrimitives.Content\n padding={0}\n onDismiss={handlePopoverVisibility}\n source={triggerRef}\n placement=\"top-end\"\n spacing={12}\n >\n <Flex\n justifyContent=\"space-between\"\n paddingBottom={5}\n paddingRight={6}\n paddingLeft={6}\n paddingTop={6}\n >\n <TypographyLineHeight fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.Onboarding.title',\n defaultMessage: 'Get started videos',\n })}\n </TypographyLineHeight>\n <TextLink\n as=\"a\"\n href={WATCH_MORE.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"pi\"\n textColor=\"primary600\"\n >\n {formatMessage(WATCH_MORE.label)}\n </TextLink>\n </Flex>\n <Divider />\n {VIDEO_LINKS.map(({ href, duration, label }, index) => (\n <VideoLinkWrapper\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n key={href}\n hasRadius\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={11}\n >\n <Box paddingRight={5}>\n <Typography textColor=\"neutral200\" variant=\"alpha\">\n {index + 1}\n </Typography>\n </Box>\n <Box position=\"relative\">\n <Preview src={onboardingPreview} alt=\"\" />\n <IconWrapper\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n background=\"primary600\"\n borderRadius=\"50%\"\n justifyContent=\"center\"\n width={6}\n height={6}\n >\n <Icon as={Play} color=\"buttonNeutral0\" width={3} height={3} />\n </IconWrapper>\n </Box>\n <Flex direction=\"column\" alignItems=\"start\" paddingLeft={4}>\n <Typography fontWeight=\"bold\">{formatMessage(label)}</Typography>\n <VisuallyHidden>:</VisuallyHidden>\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {duration}\n </Typography>\n </Flex>\n </VideoLinkWrapper>\n ))}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n paddingLeft={5}\n paddingTop={2}\n paddingBottom={5}\n >\n {docLinks.map(({ label, href, icon }) => (\n <Flex gap={3} key={href}>\n <Icon as={icon} color=\"primary600\" />\n <TextLink\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"sigma\"\n textColor=\"primary700\"\n >\n {formatMessage(label)}\n </TextLink>\n </Flex>\n ))}\n </Flex>\n </PopoverPrimitives.Content>\n </Portal>\n )}\n </Box>\n );\n};\n\n// TODO: use new Button props derived from Box props with next DS release\nconst HelperButton = styled(Button)`\n border-radius: 50%;\n padding: ${({ theme }) => theme.spaces[3]};\n /* Resetting 2rem height defined by Button component */\n height: 100%;\n`;\n\nconst IconWrapper = styled(Flex)`\n transform: translate(-50%, -50%);\n`;\n\nconst VideoLinkWrapper = styled(Flex)`\n text-decoration: none;\n\n :focus-visible {\n outline-offset: ${({ theme }) => `-${theme.spaces[1]}`};\n }\n\n :hover {\n background: ${({ theme }) => theme.colors.primary100};\n\n /* Hover style for the number displayed */\n ${Typography}:first-child {\n color: ${({ theme }) => theme.colors.primary500};\n }\n\n /* Hover style for the label */\n ${Typography}:nth-child(1) {\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst Preview = styled.img`\n width: ${({ theme }) => theme.spaces[10]};\n height: ${({ theme }) => theme.spaces[8]};\n /* Same overlay used in ModalLayout */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst TypographyLineHeight = styled(Typography)`\n /* line height of label and watch more to 1 so they can be better aligned visually */\n line-height: 1;\n`;\n\nconst TextLink = styled(TypographyLineHeight)`\n text-decoration: none;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nconst VIDEO_LINKS = [\n {\n label: {\n id: 'app.components.Onboarding.link.build-content',\n defaultMessage: 'Build a content architecture',\n },\n href: 'https://www.youtube.com/watch?v=G9GjN0RxhkE',\n duration: '5:48',\n },\n {\n label: {\n id: 'app.components.Onboarding.link.manage-content',\n defaultMessage: 'Add & manage content',\n },\n href: 'https://www.youtube.com/watch?v=DEZw4KbybAI',\n duration: '3:18',\n },\n {\n label: { id: 'app.components.Onboarding.link.manage-media', defaultMessage: 'Manage media' },\n href: 'https://www.youtube.com/watch?v=-61MuiMQb38',\n duration: '3:41',\n },\n];\n\nconst WATCH_MORE = {\n href: 'https://www.youtube.com/playlist?list=PL7Q0DQYATmvidz6lEmwE5nIcOAYagxWqq',\n label: {\n id: 'app.components.Onboarding.link.more-videos',\n defaultMessage: 'Watch more videos',\n },\n};\n\nconst DOCUMENTATION_LINKS = [\n {\n label: { id: 'global.documentation', defaultMessage: 'documentation' },\n href: 'https://docs.strapi.io',\n icon: Book,\n },\n {\n label: { id: 'app.static.links.cheatsheet', defaultMessage: 'cheatsheet' },\n href: 'https://strapi-showcase.s3-us-west-2.amazonaws.com/CheatSheet.pdf',\n icon: PaperPlane,\n },\n];\n\nexport { Onboarding };\n","import { createTypedSelector } from './core/store/hooks';\n\n/**\n * @deprecated\n *\n * Use `useTypedSelector` and access the state directly, this was only used so we knew\n * we were using the correct path. Which is state.admin_app.permissions\n */\nexport const selectAdminPermissions = createTypedSelector((state) => state.admin_app.permissions);\n","import * as React from 'react';\n\nimport {\n Permission,\n hasPermissions,\n useAppInfo,\n useRBACProvider,\n useStrapiApp,\n StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport { Cog, Puzzle, ShoppingCart } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../selectors';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype MenuItem = StrapiAppContextValue['menu'][number];\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = () => {\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { menu } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: Puzzle,\n intlLabel: {\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n },\n to: '/list-plugins',\n permissions: permissions.marketplace?.main ?? [],\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: '/marketplace',\n permissions: permissions.marketplace?.main ?? [],\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n },\n ],\n pluginsSectionLinks: [],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(userPermissions, menu);\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n userPermissions,\n generalSectionLinksRef.current,\n shouldUpdateStrapi\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n userPermissions,\n menu,\n permissions,\n shouldUpdateStrapi,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n userPermissions: Permission[],\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false\n) => {\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionRawLinks.filter(\n (_, index) => generalSectionLinksPermissions[index]\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n userPermissions: Permission[],\n pluginsSectionRawLinks: MenuItem[]\n) => {\n const pluginSectionLinksPermissions = await Promise.all(\n pluginsSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedPluginSectionLinks = pluginsSectionRawLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index]\n );\n\n return authorizedPluginSectionLinks;\n};\n\nexport { useMenu };\n","import * as React from 'react';\n\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst FlexBox = styled(Box)`\n flex: 1;\n`;\n\ninterface AppLayoutProps {\n children: React.ReactNode;\n sideNav: React.ReactNode;\n}\n\nexport const AppLayout = ({ children, sideNav }: AppLayoutProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex alignItems=\"flex-start\">\n {sideNav}\n <FlexBox>{children}</FlexBox>\n </Flex>\n </Box>\n );\n};\n","/**\n *\n * Admin\n *\n */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, useStrapiApp, useTracking } from '@strapi/helper-plugin';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { GuidedTourModal } from '../components/GuidedTour/Modal';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { Onboarding } from '../components/Onboarding';\nimport { useConfiguration } from '../features/Configuration';\nimport { useMenu } from '../hooks/useMenu';\nimport { useOnce } from '../hooks/useOnce';\nimport { AppLayout } from '../layouts/AppLayout';\nimport { createRoute } from '../utils/createRoute';\n\nconst CM = React.lazy(() =>\n import('../content-manager/pages/App').then((mod) => ({ default: mod.App }))\n);\nconst HomePage = React.lazy(() =>\n import('./HomePage').then((mod) => ({\n default: mod.HomePage,\n }))\n);\nconst InstalledPluginsPage = React.lazy(() =>\n import('./InstalledPluginsPage').then((mod) => ({\n default: mod.ProtectedInstalledPluginsPage,\n }))\n);\nconst MarketplacePage = React.lazy(() =>\n import('./Marketplace/MarketplacePage').then((mod) => ({ default: mod.ProtectedMarketplacePage }))\n);\nconst NotFoundPage = React.lazy(() =>\n import('./NotFoundPage').then(({ NotFoundPage }) => ({ default: NotFoundPage }))\n);\nconst InternalErrorPage = React.lazy(() =>\n import('./InternalErrorPage').then(({ InternalErrorPage }) => ({\n default: InternalErrorPage,\n }))\n);\n\nconst ProfilePage = React.lazy(() =>\n import('./ProfilePage').then((mod) => ({\n default: mod.ProfilePage,\n }))\n);\nconst SettingsPage = React.lazy(() =>\n import('./Settings/SettingsPage').then((mod) => ({\n default: mod.SettingsPage,\n }))\n);\n\nconst Admin = () => {\n const { trackUsage } = useTracking();\n\n const { isLoading, generalSectionLinks, pluginsSectionLinks } = useMenu();\n const { menu } = useStrapiApp();\n const { showTutorials } = useConfiguration('Admin');\n\n /**\n * Make sure the event is only send once after accessing the admin panel\n * and not at runtime for example when regenerating the permissions with the ctb\n * or with i18n\n */\n useOnce(() => {\n trackUsage('didAccessAuthenticatedAdministration');\n });\n\n const routes = React.useMemo(() => {\n return (\n menu\n .filter((link) => link.Component)\n // we've filtered out the links that don't have a component above\n .map(({ to, Component, exact }) => createRoute(Component!, to, exact))\n );\n }, [menu]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <DndProvider backend={HTML5Backend}>\n <AppLayout\n sideNav={\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n />\n }\n >\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <Switch>\n <Route path=\"/\" component={HomePage} exact />\n <Route path=\"/me\" component={ProfilePage} exact />\n <Route path=\"/content-manager\" component={CM} />\n {routes}\n <Route path=\"/settings/:settingId\" component={SettingsPage} />\n <Route path=\"/settings\" component={SettingsPage} exact />\n <Route path=\"/marketplace\">\n <MarketplacePage />\n </Route>\n <Route path=\"/list-plugins\" exact>\n <InstalledPluginsPage />\n </Route>\n <Route path=\"/404\" component={NotFoundPage} />\n <Route path=\"/500\" component={InternalErrorPage} />\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </React.Suspense>\n <GuidedTourModal />\n\n {showTutorials && <Onboarding />}\n </AppLayout>\n </DndProvider>\n );\n};\n\nexport { Admin };\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n useStrapiApp,\n type StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport set from 'lodash/set';\n\nimport { Admin } from '../pages/Admin';\n\n/**\n * TODO: this isn't great, and we really should focus on fixing this.\n */\nconst PluginsInitializer = () => {\n const { plugins: appPlugins } = useStrapiApp();\n const [{ plugins }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => init(appPlugins)\n );\n const setPlugin = React.useRef((pluginId: string) => {\n dispatch({ type: 'SET_PLUGIN_READY', pluginId });\n });\n\n const hasApluginNotReady = Object.keys(plugins).some(\n (plugin) => plugins[plugin].isReady === false\n );\n\n /**\n *\n * I have spent some time trying to understand what is happening here, and wanted to\n * leave that knowledge for my future me:\n *\n * `initializer` is an undocumented property of the `registerPlugin` API. At the time\n * of writing it seems only to be used by the i18n plugin.\n *\n * How does it work?\n *\n * Every plugin that has an `initializer` component defined, receives the\n * `setPlugin` function as a component prop. In the case of i18n the plugin fetches locales\n * first and calls `setPlugin` with `pluginId` once they are loaded, which then triggers the\n * reducer of the admin app defined above.\n *\n * Once all plugins are set to `isReady: true` the app renders.\n *\n * This API is used to block rendering of the admin app. We should remove that in v5 completely\n * and make sure plugins can inject data into the global store before they are initialized, to avoid\n * having a new prop-callback based communication channel between plugins and the core admin app.\n *\n */\n\n if (hasApluginNotReady) {\n const initializers = Object.keys(plugins).reduce((acc, current) => {\n const InitializerComponent = plugins[current].initializer;\n\n if (InitializerComponent) {\n const key = plugins[current].pluginId;\n\n acc.push(<InitializerComponent key={key} setPlugin={setPlugin.current} />);\n }\n\n return acc;\n }, [] as React.ReactNode[]);\n\n return (\n <>\n {initializers}\n <LoadingIndicatorPage />\n </>\n );\n }\n\n return <Admin />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n plugins: StrapiAppContextValue['plugins'];\n}\n\nconst initialState: State = {\n plugins: {},\n};\n\ntype SetPluginReadyAction = {\n type: 'SET_PLUGIN_READY';\n pluginId: string;\n};\n\ntype Action = SetPluginReadyAction;\n\nconst reducer: React.Reducer<State, Action> = (state = initialState, action: Action): State =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_PLUGIN_READY': {\n set(draftState, ['plugins', action.pluginId, 'isReady'], true);\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * Init state\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (plugins: State['plugins']): State => {\n return {\n plugins: Object.keys(plugins).reduce<State['plugins']>((acc, current) => {\n acc[current] = { ...plugins[current] };\n\n return acc;\n }, {}),\n };\n};\n\nexport { PluginsInitializer };\n","import * as React from 'react';\n\nimport { AppInfoProvider, LoadingIndicatorPage, useGuidedTour } from '@strapi/helper-plugin';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n// TODO: DS add loader\n\nimport packageJSON from '../../../package.json';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useInformationQuery } from '../services/admin';\nimport { useGetMyPermissionsQuery } from '../services/auth';\nimport { getFullName } from '../utils/getFullName';\nimport { hashAdminUserEmail } from '../utils/hashAdminUserEmail';\n\nimport { NpsSurvey } from './NpsSurvey';\nimport { PluginsInitializer } from './PluginsInitializer';\nimport { RBACProvider } from './RBACProvider';\n\nconst strapiVersion = packageJSON.version;\n\nconst AuthenticatedApp = () => {\n const { setGuidedTourVisibility } = useGuidedTour();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userDisplayName, setUserDisplayName] = React.useState<string>(() =>\n userInfo ? userInfo.username || getFullName(userInfo.firstname ?? '', userInfo.lastname) : ''\n );\n /**\n * Keep this in sync with the user info we return from the useAuth hook.\n * We can't remove the above state because it's used in `useAppInfo` which\n * is a public API.\n *\n * TODO: remove this workaround in V5.\n */\n React.useEffect(() => {\n setUserDisplayName(\n userInfo ? userInfo.username || getFullName(userInfo.firstname ?? '', userInfo.lastname) : ''\n );\n }, [userInfo]);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n /**\n * TODO: in V5 remove the `RBACProvider` and fire this in the Auth provider instead.\n */\n const {\n data: permissions,\n isLoading: isLoadingPermissions,\n refetch,\n } = useGetMyPermissionsQuery();\n\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n throw new Error();\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n const userRoles = useAuth('AuthenticatedApp', (state) => state.user?.roles);\n\n React.useEffect(() => {\n if (userRoles) {\n const isUserSuperAdmin = userRoles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin && appInfo?.autoReload) {\n setGuidedTourVisibility(true);\n }\n }\n }, [userRoles, appInfo?.autoReload, setGuidedTourVisibility]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingAppInfo || isLoadingPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n const refetchPermissions = () => {\n refetch();\n };\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n setUserDisplayName={setUserDisplayName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n userDisplayName={userDisplayName}\n >\n <RBACProvider permissions={permissions ?? []} refetchPermissions={refetchPermissions}>\n <NpsSurvey />\n <PluginsInitializer />\n </RBACProvider>\n </AppInfoProvider>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AuthenticatedApp };\n"],"names":["jsx","Flex","pxToRem","Check","Typography","Box","useGuidedTour","useIntl","useTracking","get","Portal","FocusTrap","jsxs","IconButton","Cross","Button","styled","Fragment","LinkButton","NavLink","ArrowRight","RouterNavLink","React","useConfiguration","usePersistentState","useAppInfo","useLocation","useAuth","name","MainNav","NavBrand","Divider","NavSections","Write","NavSection","Icon","Lock","NavFooter","NavUser","Exit","NavCondense","Message","Question","PopoverPrimitives","index","Play","VisuallyHidden","Book","PaperPlane","createTypedSelector","useRBACProvider","useStrapiApp","useSelector","Puzzle","ShoppingCart","Cog","hasPermissions","cloneDeep","SkipToContent","NotFoundPage","InternalErrorPage","useOnce","createRoute","LoadingIndicatorPage","DndProvider","HTML5Backend","Switch","Route","produce","set","useInformationQuery","useGetMyPermissionsQuery","AppInfoProvider","RBACProvider","NpsSurvey","valid","lt"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAgB,SAAA,YAAY,WAAmB,WAA0B,IAAI;AACpE,SAAA,CAAC,WAAW,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,KAAK,GAAG;AAC5D;ACAO,MAAM,QAAQ;AAAA,EACnB,YAAY,QAAqB;AACxB,WAAA,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA,EACxF;AAAA,EACA,MAAM,cAAc,SAAiB;AACnC,UAAM,WAAW,IAAI,YAAY,EAAE,OAAO,OAAO;AACjD,UAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,QAAQ;AAE1D,WAAA,KAAK,YAAY,UAAU;AAAA,EACpC;AACF;AAEA,eAAsB,mBAAmB,SAA8B;AACrE,MAAI,CAAC,WAAW,CAAC,QAAQ,OAAO;AACvB,WAAA;AAAA,EACT;AAEI,MAAA;AACF,WAAO,MAAM,MAAM,cAAc,QAAQ,KAAK;AAAA,WACvC,OAAO;AACP,WAAA;AAAA,EACT;AACF;ACxBA,MAAM,cAAc;AAAA,EAClB,oBAAoB;AAAA,IAClB,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,KAAK;AAAA,QACH,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,gBACE;AAAA,MACJ;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEA,MAAM,SAAS;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,aAAa;AACf;ACtJA,MAAM,SAAS,CAAC,EAAE,UAAU,OAAO,GAAG,YAAyB;AAC7D,SAAO,UAAU,OAAO,WAAW,UAAU,OAAO,YAClDA,2BAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,SAAS;AAAA,MACT,cAAa;AAAA,MACb,OAAOC,qBAAQ,EAAE;AAAA,MACjB,QAAQA,qBAAQ,EAAE;AAAA,MAClB,gBAAe;AAAA,MACd,GAAG;AAAA,MAEH,UAAA,UAAU,OAAO,UAChBF,2BAAA,IAACG,eAAM,eAAW,MAAC,OAAOD,qBAAQ,EAAE,GAAG,OAAM,WAAA,CAAW,IAEvDF,2BAAAA,IAAAI,aAAA,YAAA,EAAW,YAAW,YAAW,WAAU,YACzC,SACH,CAAA;AAAA,IAAA;AAAA,EAAA,IAIJJ,2BAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,SAAS;AAAA,MACT,cAAa;AAAA,MACb,OAAOC,qBAAQ,EAAE;AAAA,MACjB,QAAQA,qBAAQ,EAAE;AAAA,MAClB,gBAAe;AAAA,MACd,GAAG;AAAA,MAEJ,yCAACE,aAAAA,YAAW,EAAA,YAAW,YAAW,WAAU,cACzC,UACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAUA,MAAM,kBAAkB,CAAC,EAAE,OAAO,GAAG,MACnC,MAAAJ,2BAAA;AAAA,EAACK,aAAA;AAAA,EAAA;AAAA,IACC,OAAOH,qBAAQ,CAAC;AAAA,IAChB,QAAO;AAAA,IACP,YAAY,UAAU,OAAO,cAAc,eAAe;AAAA,IAC1D,WAAS;AAAA,IACT,WAAW,UAAU,OAAO,YAAYA,qBAAQ,EAAE,IAAIA,qBAAQ,EAAE;AAAA,IAC/D,GAAG;AAAA,EAAA;AACN;AC3CF,MAAM,kBAAkB,MAAM;AACtB,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEI,aAAc,cAAA;AACZ,QAAA,EAAE,kBAAkBC,UAAAA;AACpB,QAAA,EAAE,eAAeC,aAAAA;AAEnB,MAAA,CAAC,eAAe,CAAC,qBAAqB;AACjC,WAAA;AAAA,EACT;AAEM,QAAA,WAAWC,aAAAA,QAAI,aAAa,WAAW;AACvC,QAAA,cAAc,OAAO,KAAK,eAAe;AAC/C,QAAM,CAAC,aAAa,QAAQ,IAAI,YAAY,MAAM,GAAG;AAI/C,QAAA,eAAe,YAAY,QAAQ,WAAW;AAC9C,QAAA,YAAY,OAAO,KAAK,gBAAgB,WAAW,CAAC,EAAE,QAAQ,QAAQ;AACtE,QAAA,kBAAkB,eAAe,YAAY,SAAS;AACtD,QAAA,eAAe,YAAY,OAAO,KAAK,gBAAgB,WAAW,CAAC,EAAE,SAAS;AAEpF,QAAM,iBAAiB,MAAM;AAC3B,iBAAa,aAAa,IAAI;AAE9B,QAAI,UAAU;AACZ,iBAAW,SAAS,aAAa;AAAA,IACnC;AAEA,mBAAe,IAAI;AAAA,EAAA;AAGrB,QAAM,aAAa,MAAM;AACvB,eAAW,IAAI;AACf,mBAAe,IAAI;AACnB,eAAW,mBAAmB;AAAA,EAAA;AAGhC,SACGT,2BAAA,IAAAU,aAAA,QAAA,EACC,UAACV,2BAAA,IAAA,cAAA,EAAa,SAAS,gBAAgB,SAAS,GAAG,gBAAe,UAChE,UAACA,2BAAA,IAAAW,aAAA,WAAA,EAAU,UAAU,gBACnB,UAAAC,2BAAA;AAAA,IAACX,aAAA;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,YAAW;AAAA,MACX,YAAW;AAAA,MACX,OAAOC,qBAAQ,GAAG;AAAA,MAClB,QAAO;AAAA,MACP,WAAS;AAAA,MACT,SAAS;AAAA,MACT,KAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAU;AAAA,MACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,MAElC,UAAA;AAAA,QAACF,2BAAAA,IAAAC,aAAAA,MAAA,EAAK,gBAAe,YACnB,UAAAD,2BAAA;AAAA,UAACa,aAAA;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,cAAY,cAAc;AAAA,cACxB,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,YAED,yCAACC,MAAM,OAAA,EAAA;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACAd,2BAAA;AAAA,UAACK,aAAA;AAAA,UAAA;AAAA,YACC,aAAa;AAAA,YACb,cAAc;AAAA,YACd,eAAe,CAAC,gBAAgB,CAAC,kBAAkB,IAAI;AAAA,YAEvD,UAAAL,2BAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,YAAY,WAAW,WAAW,SAAS,QAAQ;AAAA,gBAC1D,KAAK,YAAY,SAAS,WAAW,SAAS,MAAM;AAAA,gBACpD,YAAY;AAAA,gBACZ;AAAA,gBACA;AAAA,gBACA;AAAA,gBAEC,sBAAY,aAAa,2CAAa,mBAAmB,EAAA,GAAG,SAAS,SAAS;AAAA,cAAA;AAAA,YACjF;AAAA,UAAA;AAAA,QACF;AAAA,QACC,EAAE,CAAC,gBAAgB,CAAC,oBAClBA,2BAAAA,IAAAC,aAAA,MAAA,EAAK,gBAAe,YACnB,yCAACc,aAAAA,QAAO,EAAA,SAAQ,YAAW,SAAS,YACjC,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB,GACH,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGN,GACF,EACF,CAAA;AAEJ;AAEA,MAAM,eAAeC,gBAAAA,QAAOf,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKhB,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,UAAU,IAAI;AAAA;AAoB7D,MAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AACtB,QAAA,EAAE,kBAAkBM,UAAAA;AAE1B,QAAM,mBAAmB,eAAe;AACxC,QAAM,iBAAiB,YAAY;AACnC,QAAM,mBAAmB,eAAe;AAExC,SAEIK,2BAAA,KAAAK,qBAAA,EAAA,UAAA;AAAA,IAACL,2BAAAA,KAAAX,aAAAA,MAAA,EAAK,YAAW,WACf,UAAA;AAAA,MAAAD,2BAAAA,IAACC,qBAAK,aAAa,GAAG,gBAAe,UAAS,UAAUC,aAAAA,QAAQ,EAAE,GAC/D,8BAAqBF,2BAAAA,IAAA,iBAAA,EAAgB,OAAO,OAAO,SAAS,WAAWE,qBAAQ,EAAE,EAAG,CAAA,GACvF;AAAA,qCACCE,aAAAA,YAAW,EAAA,SAAQ,SAAQ,WAAU,cACnC,UAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,IAAA,GACF;AAAA,oCACCH,aAAAA,MACC,EAAA,UAAA;AAAA,MAAAD,+BAACC,aAAAA,QAAK,aAAa,GAAG,UAAUC,qBAAQ,EAAE,GACxC,UAAAF,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,iBAAiB,OAAO,UAAU,OAAO;AAAA,UAChD,YAAY;AAAA,UACZ,eAAe;AAAA,UAEd,UAAe,eAAA;AAAA,QAAA;AAAA,MAAA,GAEpB;AAAA,MACC,SACCA,2BAAA,IAACI,yBAAW,EAAA,SAAQ,SAAQ,YAAW,QAAO,WAAU,cAAa,IAAG,MAAK,IAAG,SAC7E,UAAA,cAAc,KAAK,GACtB;AAAA,IAAA,GAEJ;AAAA,IACAQ,2BAAAA,KAACX,aAAAA,MAAK,EAAA,YAAW,WACf,UAAA;AAAA,MAAAD,2BAAA,IAACC,aAAK,MAAA,EAAA,aAAa,GAAG,WAAU,UAAS,gBAAe,UAAS,UAAUC,aAAQ,QAAA,EAAE,GAClF,UAAA,mBAEGU,gCAAAK,WAAAA,UAAA,EAAA,UAAA;AAAA,QAACjB,2BAAAA,IAAA,iBAAA,EAAgB,OAAO,OAAO,QAAS,CAAA;AAAA,QACvC,iDACE,QAAO,EAAA,OAAO,OAAO,WAAW,YAAY,GAC1C,UAAA,mBAAmB,EACtB,CAAA;AAAA,MAAA,EAAA,CAEJ,EAEJ,CAAA;AAAA,sCACCK,aAAAA,KACE,EAAA,UAAA;AAAA,QAAA;AAAA,QACA,QACE,IAAI,SACHL,2BAAA;AAAA,UAACkB,GAAA;AAAA,UAAA;AAAA,YACC,IAAIC,eAAA;AAAA,YACJ,wCAAUC,MAAW,YAAA,EAAA;AAAA,YACrB,SAAS;AAAA,YAET,IAAI,IAAI;AAAA,YAEP,UAAA,cAAc,IAAI,KAAK;AAAA,UAAA;AAAA,QAAA,IAG1BpB,2BAAAA,IAACe,aAAAA,QAAO,EAAA,SAAUf,2BAAA,IAAAoB,MAAA,YAAA,CAAW,CAAA,GAAI,SAAS,YACvC,UAAA,cAAc,IAAI,KAAK,EAC1B,CAAA;AAAA,MAAA,GAEN;AAAA,IAAA,GACF;AAAA,IACC,kBAAkB,mBACjBpB,2BAAAA,IAACK,aAAAA,KAAI,EAAA,YAAY,GACf,UAAAL,2BAAA,IAACC,aAAK,MAAA,EAAA,aAAa,GAAG,gBAAe,UAAS,OAAOC,aAAAA,QAAQ,EAAE,GAC7D,UAACF,2BAAA,IAAA,iBAAA,EAAgB,OAAO,OAAO,SAAS,WAAWE,aAAAA,QAAQ,EAAE,EAAG,CAAA,EAAA,CAClE,EACF,CAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;AASA,MAAM,oBAAoB,CAAC,EAAE,IAAI,qBAA6C;AACtE,QAAA,EAAE,kBAAkBK,UAAAA;AAGxB,SAAAP,2BAAA,IAACC,qBAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAAG,eAAe,GAClE,UAAA;AAAA,IACC,EAAE,IAAI,eAAe;AAAA,IACrB;AAAA,MACE,mBAAmB;AAAA,MACnB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAEA,MAAM,oBAAoB,CAAC,aACzBD,2BAAA;AAAA,EAACI,aAAA;AAAA,EAAA;AAAA,IACC,IAAG;AAAA,IACH,WAAU;AAAA,IACV,QAAO;AAAA,IACP,KAAI;AAAA,IACJ,MAAK;AAAA,IAEJ;AAAA,EAAA;AACH;AAGF,MAAM,OAAO,CAAC,4CACXA,aAAAA,YAAW,EAAA,YAAW,YAAY,SAAS,CAAA;AAG9C,MAAM,YAAY,CAAC,aAA8BJ,2BAAAA,IAACI,aAAAA,cAAY,SAAS,CAAA;AAEvE,MAAM,QAAQ,CAAC,4CACZA,aAAAA,YAAW,EAAA,WAAU,cAAc,SAAS,CAAA;AAG/C,MAAM,OAAO,CAAC,aACXJ,2BAAA,IAAAK,aAAA,KAAA,EAAI,aAAa,GAChB,UAAAL,2BAAA,IAAC,MAAI,EAAA,SAAS,CAAA,EAChB,CAAA;AAGF,MAAM,WAAWgB,gBAAO,QAAA;AAAA;AAAA;AAAA,aAGX,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAInD,MAAM,WAAW,CAAC,aAA8BhB,2BAAAA,IAAC,YAAU,SAAS,CAAA;AC1RpE,MAAM,kBAAkBgB,gBAAAA,QAAOX,aAAAA,GAAG;AAAA,WACvB,MAAM,EAAE;AAAA;AAAA,YAEP,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA,UAChC,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAGxC,MAAM,WAAWW,gBAAAA,QAAOK,eAAAA,OAAa;AAAA;AAAA;AAAA;AAAA;AAAA,aAKxB,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA,mBAChD,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA,kBAG/B,CAAC,EAAE,OAAO,OAAO,MAC7B,SAAS,MAAM,OAAO,YAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMjD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,SAAS;AAAA;AAAA;AAAA;AAKnD,MAAM,iBAAiBL,gBAAAA,QAAOX,aAAAA,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AASjC,MAAM,WAAW,CAAC,EAAE,qBAAqB,0BAAyC;AAC1E,QAAA,aAAaiB,iBAAM,OAAuB,IAAK;AACrD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,iBAAM,SAAS,KAAK;AAC9D,QAAA;AAAA,IACJ,OAAO,EAAE,KAAK;AAAA,EAAA,IACZC,MAAAA,iBAAiB,UAAU;AAC/B,QAAM,CAAC,WAAW,YAAY,IAAIC,aAAAA,mBAAmB,oBAAoB,KAAK;AACxE,QAAA,EAAE,oBAAoBC,aAAAA;AACtB,QAAA,EAAE,kBAAkBlB,UAAAA;AACpB,QAAA,EAAE,eAAeC,aAAAA;AACjB,QAAA,EAAE,aAAakB,eAAAA;AACrB,QAAM,SAASC,MAAAA,QAAQ,UAAU,CAAC,UAAU,MAAM,MAAM;AAExD,QAAM,WAAW,gBACd,MAAM,GAAG,EACT,IAAI,CAACC,UAASA,MAAK,UAAU,GAAG,CAAC,CAAC,EAClC,KAAK,EAAE,EACP,UAAU,GAAG,CAAC;AAEjB,QAAM,wBAAwB,MAAM,oBAAoB,CAAC,SAAS,CAAC,IAAI;AAEjE,QAAA,aAAsC,CAAC,MAAM;AACjD,QACE,CAAC,EAAE,cAAc,SAAS,EAAE,aAAa;AAAA;AAAA;AAAA,IAIzC,EAAE,eAAe,eAAe,OAAO,wBACvC;AACA,0BAAoB,KAAK;AAAA,IAC3B;AAAA,EAAA;AAGI,QAAA,oBAAoB,CAAC,gBAAwB;AACjD,eAAW,gBAAgB,EAAE,MAAM,UAAU,IAAI,aAAa;AAAA,EAAA;AAGhE,QAAM,YAAY,cAAc;AAAA,IAC9B,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAAA,CACjB;AAGC,SAAAhB,gCAACiB,GAAAA,WAAQ,WACP,UAAA;AAAA,IAAA7B,2BAAA;AAAA,MAAC8B,GAAA;AAAA,MAAA;AAAA,QACC,IAAIT,eAAA;AAAA,QACJ,WAAW,cAAc;AAAA,UACvB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,OAAO;AAAA,QACP,MACErB,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK,KAAK,QAAQ,OAAO,KAAK;AAAA,YAC9B,KAAK,cAAc;AAAA,cACjB,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ;AAAA,mCAEC+B,aAAQ,SAAA,EAAA;AAAA,oCAERC,GAAAA,aACC,EAAA,UAAA;AAAA,MAAAhC,2BAAA;AAAA,QAACmB,GAAA;AAAA,QAAA;AAAA,UACC,IAAIE,eAAA;AAAA,UAEJ,IAAG;AAAA,UACH,qCAAOY,MAAM,OAAA,EAAA;AAAA,UACb,SAAS,MAAM,kBAAkB,kBAAkB;AAAA,UAElD,wBAAc,EAAE,IAAI,0BAA0B,gBAAgB,mBAAmB;AAAA,QAAA;AAAA,MACpF;AAAA,MAEC,oBAAoB,SAAS,IAC5BjC,2BAAA;AAAA,QAACkC,GAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UAEA,UAAA,oBAAoB,IAAI,CAAC,SAAS;AACjC,kBAAM,WAAW,KAAK;AACtB,kDACG,gBACC,EAAA,UAAAlC,2BAAA;AAAA,cAACmB,GAAA;AAAA,cAAA;AAAA,gBACC,IAAIE,eAAA;AAAA,gBACJ,IAAI,KAAK;AAAA,gBACT,qCAAO,UAAS,EAAA;AAAA,gBAChB,SAAS,MAAM,kBAAkB,KAAK,EAAE;AAAA,gBAExC,cACE,MAAM,WACHrB,+BAAAmC,aAAAA,MAAA,EAAK,OAAO,GAAG,KAAK,EAAE,OAAO,QAAQ,GAAG,KAAK,EAAE,OAAO,IAAIC,MAAAA,MAAM,IAC/D;AAAA,gBAGL,UAAA,cAAc,KAAK,SAAS;AAAA,cAAA;AAAA,YAAA,KAbZ,KAAK,EAe1B;AAAA,UAAA,CAEH;AAAA,QAAA;AAAA,MAAA,IAED;AAAA,MAEH,oBAAoB,SAAS,IAC5BpC,2BAAA;AAAA,QAACkC,GAAA;AAAA,QAAA;AAAA,UACC,OAAO,cAAc;AAAA,YACnB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,UAEA,UAAA,oBAAoB,IAAI,CAAC,SAAS;AACjC,kBAAM,WAAW,KAAK;AAGpB,mBAAAlC,2BAAA;AAAA,cAACmB,GAAA;AAAA,cAAA;AAAA,gBACC,IAAIE,eAAA;AAAA,gBACJ,cACE,KAAK,sBAAsB,KAAK,qBAAqB,IACjD,KAAK,mBAAmB,SACxB,IAAA;AAAA,gBAGN,IAAI,KAAK;AAAA,gBAET,qCAAO,UAAS,EAAA;AAAA,gBAChB,SAAS,MAAM,kBAAkB,KAAK,EAAE;AAAA,gBAEvC,UAAA,cAAc,KAAK,SAAS;AAAA,cAAA;AAAA,cAJxB,KAAK;AAAA,YAAA;AAAA,UAKZ,CAEH;AAAA,QAAA;AAAA,MAAA,IAED;AAAA,IAAA,GACN;AAAA,oCAECgB,GAAAA,WACC,EAAA,UAAA;AAAA,MAAArC,2BAAA;AAAA,QAACsC,GAAA;AAAA,QAAA;AAAA,UACC,IAAG;AAAA,UACH,KAAK;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UAEC,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,MACC,oBACCtC,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAO;AAAA,UACP,YAAW;AAAA,UACX,WAAS;AAAA,UAET,UAAAA,2BAAA,IAACW,aAAU,WAAA,EAAA,UAAU,uBACnB,UAAAC,2BAAA,KAACX,aAAK,MAAA,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,YAACD,2BAAAA,IAAA,UAAA,EAAS,UAAU,GAAG,SAAS,uBAAuB,IAAG,OACxD,UAACA,2BAAA,IAAAI,aAAA,YAAA,EACE,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB,GACH,EACF,CAAA;AAAA,4CACC,UAAS,EAAA,UAAU,GAAG,SAAS,QAAQ,IAAG,eACzC,UAAA;AAAA,cAACJ,2BAAA,IAAAI,aAAA,YAAA,EAAW,WAAU,aACnB,UAAc,cAAA;AAAA,gBACb,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cACjB,CAAA,GACH;AAAA,6CACCmC,MAAK,MAAA,EAAA;AAAA,YAAA,GACR;AAAA,UAAA,EAAA,CACF,EACF,CAAA;AAAA,QAAA;AAAA,MACF;AAAA,MAGFvC,2BAAAA,IAACwC,GAAY,aAAA,EAAA,SAAS,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,GAC/C,UAAA,YACG,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,IACD,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,gBAAgB;AAAA,MACjB,CAAA,GACP;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;AC7PA,MAAe,oBAAA;ACoBf,MAAM,aAAa,MAAM;AACjB,QAAA,aAAalB,iBAAM,OAA0B,IAAK;AACxD,QAAM,CAAC,QAAQ,SAAS,IAAIA,iBAAM,SAAS,KAAK;AAC1C,QAAA,EAAE,kBAAkBf,UAAAA;AACpB,QAAA,EAAE,qBAAqBkB,aAAAA;AAE7B,QAAM,0BAA0B,MAAM;AAC1B,cAAA,CAAC,SAAS,CAAC,IAAI;AAAA,EAAA;AAG3B,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH;AAAA,MACE,OAAO,EAAE,IAAI,iCAAiC,gBAAgB,WAAW;AAAA,MACzE,MAAMgB,MAAA;AAAA,MACN,MAAM,mBACF,8BACA;AAAA,IACN;AAAA,EAAA;AAIA,SAAA7B,gCAACP,aAAAA,OAAI,IAAG,SAAQ,UAAS,SAAQ,QAAQ,GAAG,OAAO,GACjD,UAAA;AAAA,IAAAL,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,UACV,SACI;AAAA,YACE,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,IAElB;AAAA,YACE,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAClB;AAAA,QACN;AAAA,QACA,SAAS;AAAA,QACT,KAAK;AAAA,QAEL,yCAACmC,aAAK,MAAA,EAAA,IAAI,SAASrB,MAAAA,QAAQ4B,MAAA,UAAU,OAAM,kBAAiB;AAAA,MAAA;AAAA,IAC9D;AAAA,IAEC,yCACEhC,qBACC,EAAA,UAAAE,2BAAA;AAAA,MAAC+B,aAAAA,kBAAkB;AAAA,MAAlB;AAAA,QACC,SAAS;AAAA,QACT,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS;AAAA,QAET,UAAA;AAAA,UAAA/B,2BAAA;AAAA,YAACX,aAAA;AAAA,YAAA;AAAA,cACC,gBAAe;AAAA,cACf,eAAe;AAAA,cACf,cAAc;AAAA,cACd,aAAa;AAAA,cACb,YAAY;AAAA,cAEZ,UAAA;AAAA,gBAACD,2BAAA,IAAA,sBAAA,EAAqB,YAAW,QAC9B,UAAc,cAAA;AAAA,kBACb,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBACjB,CAAA,GACH;AAAA,gBACAA,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,MAAM,WAAW;AAAA,oBACjB,QAAO;AAAA,oBACP,KAAI;AAAA,oBACJ,SAAQ;AAAA,oBACR,WAAU;AAAA,oBAET,UAAA,cAAc,WAAW,KAAK;AAAA,kBAAA;AAAA,gBACjC;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,yCACC+B,aAAQ,SAAA,EAAA;AAAA,UACR,YAAY,IAAI,CAAC,EAAE,MAAM,UAAU,MAAA,GAASa,WAC3ChC,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH;AAAA,cACA,QAAO;AAAA,cACP,KAAI;AAAA,cAEJ,WAAS;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,aAAa;AAAA,cACb,cAAc;AAAA,cAEd,UAAA;AAAA,gBAACZ,2BAAA,IAAAK,aAAA,KAAA,EAAI,cAAc,GACjB,UAACL,2BAAA,IAAAI,yBAAA,EAAW,WAAU,cAAa,SAAQ,SACxC,UAAQwC,SAAA,EACX,CAAA,GACF;AAAA,gBACAhC,2BAAAA,KAACP,aAAAA,KAAI,EAAA,UAAS,YACZ,UAAA;AAAA,kBAAAL,2BAAA,IAAC,SAAQ,EAAA,KAAK,mBAAmB,KAAI,IAAG;AAAA,kBACxCA,2BAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,UAAS;AAAA,sBACT,KAAI;AAAA,sBACJ,MAAK;AAAA,sBACL,YAAW;AAAA,sBACX,cAAa;AAAA,sBACb,gBAAe;AAAA,sBACf,OAAO;AAAA,sBACP,QAAQ;AAAA,sBAER,UAAAA,2BAAA,IAACmC,qBAAK,IAAIU,MAAA,MAAM,OAAM,kBAAiB,OAAO,GAAG,QAAQ,EAAG,CAAA;AAAA,oBAAA;AAAA,kBAC9D;AAAA,gBAAA,GACF;AAAA,gDACC5C,aAAAA,MAAK,EAAA,WAAU,UAAS,YAAW,SAAQ,aAAa,GACvD,UAAA;AAAA,kBAAAD,+BAACI,aAAAA,YAAW,EAAA,YAAW,QAAQ,UAAA,cAAc,KAAK,GAAE;AAAA,kBACpDJ,2BAAAA,IAAC8C,+BAAe,UAAC,IAAA,CAAA;AAAA,iDAChB1C,aAAAA,YAAW,EAAA,WAAU,cAAa,SAAQ,MACxC,UACH,UAAA;AAAA,gBAAA,GACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAjCK;AAAA,UAAA,CAmCR;AAAA,UACDJ,2BAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,YAAW;AAAA,cACX,KAAK;AAAA,cACL,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,eAAe;AAAA,cAEd,UAAA,SAAS,IAAI,CAAC,EAAE,OAAO,MAAM,KAC5B,MAAAW,2BAAA,KAACX,aAAK,MAAA,EAAA,KAAK,GACT,UAAA;AAAA,gBAAAD,2BAAA,IAACmC,aAAK,MAAA,EAAA,IAAI,MAAM,OAAM,cAAa;AAAA,gBACnCnC,2BAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH;AAAA,oBACA,QAAO;AAAA,oBACP,KAAI;AAAA,oBACJ,SAAQ;AAAA,oBACR,WAAU;AAAA,oBAET,wBAAc,KAAK;AAAA,kBAAA;AAAA,gBACtB;AAAA,cAAA,EAAA,GAXiB,IAYnB,CACD;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,EAEJ,EAAA,CAAA;AAEJ;AAGA,MAAM,eAAegB,gBAAAA,QAAOD,aAAAA,MAAM;AAAA;AAAA,aAErB,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAK3C,MAAM,cAAcC,gBAAAA,QAAOf,aAAAA,IAAI;AAAA;AAAA;AAI/B,MAAM,mBAAmBe,gBAAAA,QAAOf,aAAAA,IAAI;AAAA;AAAA;AAAA;AAAA,sBAId,CAAC,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA,kBAIxC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA,MAGlDG,uBAAU;AAAA,eACD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,MAI/CA,uBAAU;AAAA,eACD,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAKrD,MAAM,UAAUY,gBAAO,QAAA;AAAA,WACZ,CAAC,EAAE,YAAY,MAAM,OAAO,EAAE,CAAC;AAAA,YAC9B,CAAC,EAAE,YAAY,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA,gBAE1B,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,OAAO,UAAU,IAAI;AAAA,mBAC1C,CAAC,EAAE,YAAY,MAAM,YAAY;AAAA;AAGpD,MAAM,uBAAuBA,gBAAAA,QAAOZ,aAAAA,UAAU;AAAA;AAAA;AAAA;AAK9C,MAAM,WAAWY,gBAAAA,QAAO,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5C,MAAM,cAAc;AAAA,EAClB;AAAA,IACE,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,OAAO,EAAE,IAAI,+CAA+C,gBAAgB,eAAe;AAAA,IAC3F,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AACF;AAEA,MAAM,aAAa;AAAA,EACjB,MAAM;AAAA,EACN,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,gBAAgB;AAAA,EAClB;AACF;AAEA,MAAM,sBAAsB;AAAA,EAC1B;AAAA,IACE,OAAO,EAAE,IAAI,wBAAwB,gBAAgB,gBAAgB;AAAA,IACrE,MAAM;AAAA,IACN,MAAM+B,MAAA;AAAA,EACR;AAAA,EACA;AAAA,IACE,OAAO,EAAE,IAAI,+BAA+B,gBAAgB,aAAa;AAAA,IACzE,MAAM;AAAA,IACN,MAAMC,MAAA;AAAA,EACR;AACF;AClQO,MAAM,yBAAyBC,MAAAA,oBAAoB,CAAC,UAAU,MAAM,UAAU,WAAW;ACoBhG,MAAM,UAAU,MAAM;AACpB,QAAM,EAAE,gBAAgB,gBAAgB,IAAIC,aAAgB,gBAAA;AACtD,QAAA,EAAE,uBAAuBzB,aAAAA;AACzB,QAAA,EAAE,SAAS0B,aAAAA;AACX,QAAA,cAAcC,uBAAY,sBAAsB;AACtD,QAAM,CAAC,yBAAyB,0BAA0B,IAAI9B,iBAAM,SAAe;AAAA,IACjF,qBAAqB;AAAA,MACnB;AAAA,QACE,MAAM+B,MAAA;AAAA,QACN,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA,QACJ,aAAa,YAAY,aAAa,QAAQ,CAAC;AAAA,MACjD;AAAA,MACA;AAAA,QACE,MAAMC,MAAA;AAAA,QACN,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA,QACJ,aAAa,YAAY,aAAa,QAAQ,CAAC;AAAA,MACjD;AAAA,MACA;AAAA,QACE,MAAMC,MAAA;AAAA,QACN,WAAW;AAAA,UACT,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAClB;AAAA,QACA,IAAI;AAAA;AAAA;AAAA,QAGJ,aAAa,CAAC;AAAA,QACd,oBAAoB;AAAA,MACtB;AAAA,IACF;AAAA,IACA,qBAAqB,CAAC;AAAA,IACtB,WAAW;AAAA,EAAA,CACZ;AACD,QAAM,yBAAyBjC,iBAAM,OAAO,wBAAwB,mBAAmB;AAEvFA,mBAAM,UAAU,MAAM;AACpB,mBAAe,uBAAuB;AACpC,YAAM,+BAA+B,MAAM,sBAAsB,iBAAiB,IAAI;AAEtF,YAAM,gCAAgC,MAAM;AAAA,QAC1C;AAAA,QACA,uBAAuB;AAAA,QACvB;AAAA,MAAA;AAGF,iCAA2B,CAAC,WAAW;AAAA,QACrC,GAAG;AAAA,QACH,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,WAAW;AAAA,MACX,EAAA;AAAA,IACJ;AAEqB;EAAA,GACpB;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AAMA,MAAM,kBAAkB,OACtB,iBACA,wBACA,qBAA8B,UAC3B;AACG,QAAA,iCAAiC,MAAM,QAAQ;AAAA,IACnD,uBAAuB,IAAI,CAAC,EAAE,YAAkB,MAAAkC,4BAAe,iBAAiB,WAAW,CAAC;AAAA,EAAA;AAG9F,QAAM,gCAAgC,uBAAuB;AAAA,IAC3D,CAAC,GAAGZ,WAAU,+BAA+BA,MAAK;AAAA,EAAA;AAGpD,QAAM,oBAAoB,8BAA8B;AAAA,IACtD,CAAC,QAAQ,IAAI,OAAO;AAAA,EAAA;AAGtB,MAAI,sBAAsB,IAAI;AAC5B,WAAO;EACT;AAEM,QAAA,8BAA8Ba,2BAAU,6BAA6B;AAE3E,8BAA4B,iBAAiB,EAAE,qBAAqB,qBAAqB,IAAI;AAEtF,SAAA;AACT;AAEA,MAAM,wBAAwB,OAC5B,iBACA,2BACG;AACG,QAAA,gCAAgC,MAAM,QAAQ;AAAA,IAClD,uBAAuB,IAAI,CAAC,EAAE,YAAkB,MAAAD,4BAAe,iBAAiB,WAAW,CAAC;AAAA,EAAA;AAG9F,QAAM,+BAA+B,uBAAuB;AAAA,IAC1D,CAAC,GAAGZ,WAAU,8BAA8BA,MAAK;AAAA,EAAA;AAG5C,SAAA;AACT;AC7IA,MAAM,UAAU5B,gBAAAA,QAAOX,aAAAA,GAAG;AAAA;AAAA;AASnB,MAAM,YAAY,CAAC,EAAE,UAAU,cAA8B;AAC5D,QAAA,EAAE,kBAAkBE,UAAAA;AAGxB,SAAAK,2BAAA,KAACP,aAAI,KAAA,EAAA,YAAW,cACd,UAAA;AAAA,IAACL,2BAAAA,IAAA0D,aAAA,eAAA,EACE,wBAAc,EAAE,IAAI,iBAAiB,gBAAgB,kBAAmB,CAAA,GAC3E;AAAA,IACA9C,2BAAAA,KAACX,aAAAA,MAAK,EAAA,YAAW,cACd,UAAA;AAAA,MAAA;AAAA,MACDD,+BAAC,WAAS,UAAS;AAAA,IAAA,GACrB;AAAA,EACF,EAAA,CAAA;AAEJ;ACPA,MAAM,KAAKsB,iBAAM;AAAA,EAAK,MACpB,QAAO,QAAA,EAAA,KAAA,MAAA,QAAA,qBAA8B,sBAAE,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,IAAA,EAAM;AAC7E;AACA,MAAM,WAAWA,iBAAM;AAAA,EAAK,MAC1B,qCAAO,wBAAY,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IAClC,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AACA,MAAM,uBAAuBA,iBAAM;AAAA,EAAK,MACtC,qCAAO,oCAAwB,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IAC9C,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AACA,MAAM,kBAAkBA,iBAAM;AAAA,EAAK,MACjC,QAAO,QAAA,EAAA,KAAA,MAAA,QAAA,+BAA+B,GAAE,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,yBAAA,EAA2B;AACnG;AACA,MAAM,eAAeA,iBAAM;AAAA,EAAK,MAC9B,qCAAO,qBAAgB,CAAA,EAAA,KAAA,OAAA,EAAA,YAAA,EAAE,KAAK,CAAC,EAAE,cAAAqC,cAAa,OAAO,EAAE,SAASA,gBAAe;AACjF;AACA,MAAM,oBAAoBrC,iBAAM;AAAA,EAAK,MACnC,QAAA,QAAA,EAAA,KAAA,MAAA,QAAO,iCAAqB,CAAA,EAAE,KAAK,CAAC,EAAE,mBAAAsC,0BAAyB;AAAA,IAC7D,SAASA;AAAAA,EAAA,EACT;AACJ;AAEA,MAAM,cAActC,iBAAM;AAAA,EAAK,MAC7B,qCAAO,2BAAe,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IACrC,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AACA,MAAM,eAAeA,iBAAM;AAAA,EAAK,MAC9B,qCAAO,4BAAyB,CAAA,EAAE,KAAK,CAAC,SAAS;AAAA,IAC/C,SAAS,IAAI;AAAA,EAAA,EACb;AACJ;AAEA,MAAM,QAAQ,MAAM;AACZ,QAAA,EAAE,eAAed,aAAAA;AAEvB,QAAM,EAAE,WAAW,qBAAqB,wBAAwB,QAAQ;AAClE,QAAA,EAAE,SAAS2C,aAAAA;AACjB,QAAM,EAAE,cAAA,IAAkB5B,MAAA,iBAAiB,OAAO;AAOlDsC,QAAAA,QAAQ,MAAM;AACZ,eAAW,sCAAsC;AAAA,EAAA,CAClD;AAEK,QAAA,SAASvC,iBAAM,QAAQ,MAAM;AACjC,WACE,KACG,OAAO,CAAC,SAAS,KAAK,SAAS,EAE/B,IAAI,CAAC,EAAE,IAAI,WAAW,YAAYwC,MAAAA,YAAY,WAAY,IAAI,KAAK,CAAC;AAAA,EAAA,GAExE,CAAC,IAAI,CAAC;AAET,MAAI,WAAW;AACb,0CAAQC,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAGE,SAAA/D,2BAAAA,IAACgE,SAAAA,aAAY,EAAA,SAASC,qBACpB,cAAA,UAAArD,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SACEZ,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,MAGF,UAAA;AAAA,QAACA,2BAAAA,IAAAsB,iBAAM,UAAN,EAAe,yCAAWyC,aAAAA,sBAAqB,CAAA,CAAA,GAC9C,0CAACG,eACC,QAAA,EAAA,UAAA;AAAA,UAAAlE,+BAACmE,eAAAA,SAAM,MAAK,KAAI,WAAW,UAAU,OAAK,MAAC;AAAA,yCAC1CA,eAAAA,OAAM,EAAA,MAAK,OAAM,WAAW,aAAa,OAAK,MAAC;AAAA,UAC/CnE,2BAAA,IAAAmE,eAAA,OAAA,EAAM,MAAK,oBAAmB,WAAW,IAAI;AAAA,UAC7C;AAAA,UACAnE,2BAAA,IAAAmE,eAAA,OAAA,EAAM,MAAK,wBAAuB,WAAW,cAAc;AAAA,yCAC3DA,eAAAA,OAAM,EAAA,MAAK,aAAY,WAAW,cAAc,OAAK,MAAC;AAAA,yCACtDA,eAAAA,OAAM,EAAA,MAAK,gBACV,UAAAnE,+BAAC,kBAAgB,CAAA,GACnB;AAAA,UACAA,2BAAAA,IAACmE,wBAAM,MAAK,iBAAgB,OAAK,MAC/B,UAAAnE,2BAAA,IAAC,wBAAqB,EACxB,CAAA;AAAA,UACCA,2BAAA,IAAAmE,eAAA,OAAA,EAAM,MAAK,QAAO,WAAW,cAAc;AAAA,UAC3CnE,2BAAA,IAAAmE,eAAA,OAAA,EAAM,MAAK,QAAO,WAAW,mBAAmB;AAAA,UAChDnE,2BAAA,IAAAmE,eAAA,OAAA,EAAM,MAAK,IAAG,WAAW,cAAc;AAAA,QAAA,EAAA,CAC1C,EACF,CAAA;AAAA,uCACC,iBAAgB,EAAA;AAAA,QAEhB,gDAAkB,YAAW,EAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAElC,EAAA,CAAA;AAEJ;AC3GA,MAAM,qBAAqB,MAAM;AAC/B,QAAM,EAAE,SAAS,WAAW,IAAIhB,aAAa,aAAA;AAC7C,QAAM,CAAC,EAAE,QAAA,GAAW,QAAQ,IAAI7B,iBAAM;AAAA,IACpC;AAAA,IACA;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,EAAA;AAEvB,QAAM,YAAYA,iBAAM,OAAO,CAAC,aAAqB;AACnD,aAAS,EAAE,MAAM,oBAAoB,SAAU,CAAA;AAAA,EAAA,CAChD;AAED,QAAM,qBAAqB,OAAO,KAAK,OAAO,EAAE;AAAA,IAC9C,CAAC,WAAW,QAAQ,MAAM,EAAE,YAAY;AAAA,EAAA;AA0B1C,MAAI,oBAAoB;AAChB,UAAA,eAAe,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,KAAK,YAAY;AAC3D,YAAA,uBAAuB,QAAQ,OAAO,EAAE;AAE9C,UAAI,sBAAsB;AAClB,cAAA,MAAM,QAAQ,OAAO,EAAE;AAE7B,YAAI,KAAMtB,2BAAA,IAAA,sBAAA,EAA+B,WAAW,UAAU,QAAA,GAA1B,GAAmC,CAAE;AAAA,MAC3E;AAEO,aAAA;AAAA,IACT,GAAG,CAAuB,CAAA;AAE1B,WAEKY,2BAAA,KAAAK,qBAAA,EAAA,UAAA;AAAA,MAAA;AAAA,qCACA8C,aAAqB,sBAAA,EAAA;AAAA,IACxB,EAAA,CAAA;AAAA,EAEJ;AAEA,wCAAQ,OAAM,CAAA,CAAA;AAChB;AAUA,MAAM,eAAsB;AAAA,EAC1B,SAAS,CAAC;AACZ;AASA,MAAM,UAAwC,CAAC,QAAQ,cAAc,WACnEK,yBAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,oBAAoB;AACvBC,2BAAI,YAAY,CAAC,WAAW,OAAO,UAAU,SAAS,GAAG,IAAI;AAC7D;AAAA,IACF;AAAA,IACA;AACS,aAAA;AAAA,EACX;AACF,CAAC;AAMH,MAAM,OAAO,CAAC,YAAqC;AAC1C,SAAA;AAAA,IACL,SAAS,OAAO,KAAK,OAAO,EAAE,OAAyB,CAAC,KAAK,YAAY;AACvE,UAAI,OAAO,IAAI,EAAE,GAAG,QAAQ,OAAO,EAAE;AAE9B,aAAA;AAAA,IACT,GAAG,EAAE;AAAA,EAAA;AAET;ACrGA,MAAM,gBAAgB,YAAY;AAElC,MAAM,mBAAmB,MAAM;AACvB,QAAA,EAAE,4BAA4B/D,aAAAA;AACpC,QAAM,WAAWqB,MAAAA,QAAQ,oBAAoB,CAAC,UAAU,MAAM,IAAI;AAClE,QAAM,CAAC,iBAAiB,kBAAkB,IAAIL,iBAAM;AAAA,IAAiB,MACnE,WAAW,SAAS,YAAY,YAAY,SAAS,aAAa,IAAI,SAAS,QAAQ,IAAI;AAAA,EAAA;AAS7FA,mBAAM,UAAU,MAAM;AACpB;AAAA,MACE,WAAW,SAAS,YAAY,YAAY,SAAS,aAAa,IAAI,SAAS,QAAQ,IAAI;AAAA,IAAA;AAAA,EAC7F,GACC,CAAC,QAAQ,CAAC;AACb,QAAM,CAAC,QAAQ,SAAS,IAAIA,iBAAM,SAAiB;AACnD,QAAM,EAAE,wBAAA,IAA4BC,MAAA,iBAAiB,kBAAkB;AAEvE,QAAM,EAAE,MAAM,SAAS,WAAW,iBAAA,IAAqB+C,MAAAA;AAIjD,QAAA;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX;AAAA,MACEC,MAAyB,yBAAA;AAE7B,QAAM,CAAC,SAAS,UAAU,IAAIjD,iBAAM,SAAiB,aAAa;AAElEA,mBAAM,UAAU,MAAM;AACpB,QAAI,yBAAyB;AAC3B,YAAM,4DAA4D,EAC/D,KAAK,OAAO,QAAQ;AACf,YAAA,CAAC,IAAI,IAAI;AACX,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEM,cAAA,WAAY,MAAM,IAAI;AAExB,YAAA,CAAC,SAAS,UAAU;AACtB,gBAAM,IAAI,MAAM;AAAA,QAClB;AAEA,mBAAW,SAAS,QAAQ;AAAA,MAAA,CAC7B,EACA,MAAM,MAAM;AAAA,MAAA,CAIZ;AAAA,IACL;AAAA,EAAA,GACC,CAAC,uBAAuB,CAAC;AAE5B,QAAM,YAAYK,MAAQ,QAAA,oBAAoB,CAAC,UAAU,MAAM,MAAM,KAAK;AAE1EL,mBAAM,UAAU,MAAM;AACpB,QAAI,WAAW;AACP,YAAA,mBAAmB,UAAU,KAAK,CAAC,EAAE,WAAW,SAAS,oBAAoB;AAE/E,UAAA,oBAAoB,SAAS,YAAY;AAC3C,gCAAwB,IAAI;AAAA,MAC9B;AAAA,IACF;AAAA,KACC,CAAC,WAAW,SAAS,YAAY,uBAAuB,CAAC;AAE5DA,mBAAM,UAAU,MAAM;AACpB,uBAAmB,QAAQ,EAAE,KAAK,CAAC,OAAO;AACxC,UAAI,IAAI;AACN,kBAAU,EAAE;AAAA,MACd;AAAA,IAAA,CACD;AAAA,EAAA,GACA,CAAC,QAAQ,CAAC;AAIb,MAAI,oBAAoB,sBAAsB;AAC5C,0CAAQyC,mCAAqB,CAAA,CAAA;AAAA,EAC/B;AAEA,QAAM,qBAAqB,MAAM;AACvB;EAAA;AAIR,SAAA/D,2BAAA;AAAA,IAACwE,aAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,wBAAwB;AAAA,MACxB;AAAA,MACA,oBAAoB,yBAAyB,eAAe,OAAO;AAAA,MACnE;AAAA,MAEA,0CAACC,MAAAA,cAAa,EAAA,aAAa,eAAe,IAAI,oBAC5C,UAAA;AAAA,QAAAzE,2BAAA,IAAC0E,MAAU,WAAA,EAAA;AAAA,uCACV,oBAAmB,EAAA;AAAA,MAAA,GACtB;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAM,2BAA2B,CAC/B,uBACA,yBAAiC,OACrB;AACZ,MAAI,CAACC,eAAM,QAAA,qBAAqB,KAAK,CAACA,eAAA,QAAM,sBAAsB,GAAG;AAC5D,WAAA;AAAA,EACT;AAEO,SAAAC,YAAA,QAAG,uBAAuB,sBAAsB;AACzD;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticatedApp-sMEn0FIG.mjs","sources":["../../admin/src/utils/getFullName.ts","../../admin/src/utils/hashAdminUserEmail.ts","../../admin/src/components/GuidedTour/constants.ts","../../admin/src/components/GuidedTour/Ornaments.tsx","../../admin/src/components/GuidedTour/Modal.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/assets/images/onboarding-preview.png","../../admin/src/components/Onboarding.tsx","../../admin/src/selectors.ts","../../admin/src/hooks/useMenu.ts","../../admin/src/layouts/AppLayout.tsx","../../admin/src/pages/Admin.tsx","../../admin/src/components/PluginsInitializer.tsx","../../admin/src/components/AuthenticatedApp.tsx"],"sourcesContent":["export function getFullName(firstname: string, lastname: string | null = '') {\n return [firstname, lastname].filter((str) => str).join(' ');\n}\n","import { SanitizedAdminUser } from '../../../shared/contracts/shared';\n\nexport const utils = {\n bufferToHex(buffer: ArrayBuffer) {\n return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, '0')).join('');\n },\n async digestMessage(message: string) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);\n\n return this.bufferToHex(hashBuffer);\n },\n};\n\nexport async function hashAdminUserEmail(payload?: SanitizedAdminUser) {\n if (!payload || !payload.email) {\n return null;\n }\n\n try {\n return await utils.digestMessage(payload.email);\n } catch (error) {\n return null;\n }\n}\n","const LAYOUT_DATA = {\n contentTypeBuilder: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.title',\n defaultMessage: '🧠 Build the content structure',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.CTB.cta.title',\n defaultMessage: 'Go to the Content type Builder',\n },\n type: 'REDIRECT',\n target: '/plugins/content-type-builder',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentTypeBuilder',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.title',\n defaultMessage: '🧠 Create a first Collection type',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.create.content',\n defaultMessage:\n '<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CTB.create.cta.title',\n defaultMessage: 'Build a Collection type',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep1CollectionType',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CTB.success.title',\n defaultMessage: 'Step 1: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CTB.success.content',\n defaultMessage: '<p>Good going!</p><b>⚡️ What would you like to share with the world?</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didCreateGuidedTourCollectionType',\n },\n },\n contentManager: {\n home: {\n title: {\n id: 'app.components.GuidedTour.home.CM.title',\n defaultMessage: '⚡️ What would you like to share with the world?',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'REDIRECT',\n target: '/content-manager',\n },\n trackingEvent: 'didClickGuidedTourHomepageContentManager',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.CM.create.title',\n defaultMessage: '⚡️ Create content',\n },\n content: {\n id: 'app.components.GuidedTour.CM.create.content',\n defaultMessage:\n \"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>💡 Quick tip - Don't forget to hit publish on the content you create.</p>\",\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.create-content',\n defaultMessage: 'Create content',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep2ContentManager',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.CM.success.title',\n defaultMessage: 'Step 2: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.CM.success.content',\n defaultMessage: '<p>Awesome, one last step to go!</p><b>🚀 See content in action</b>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.CM.success.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didCreateGuidedTourEntry',\n },\n },\n apiTokens: {\n home: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.home.apiTokens.cta.title',\n defaultMessage: 'Test the API',\n },\n type: 'REDIRECT',\n target: '/settings/api-tokens',\n },\n trackingEvent: 'didClickGuidedTourHomepageApiTokens',\n },\n create: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.title',\n defaultMessage: '🚀 See content in action',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.create.content',\n defaultMessage:\n '<p>Generate an authentication token here and retrieve the content you just created.</p>',\n },\n cta: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.create.cta.title',\n defaultMessage: 'Generate an API Token',\n },\n type: 'CLOSE',\n },\n trackingEvent: 'didClickGuidedTourStep3ApiTokens',\n },\n success: {\n title: {\n id: 'app.components.GuidedTour.apiTokens.success.title',\n defaultMessage: 'Step 3: Completed ✅',\n },\n content: {\n id: 'app.components.GuidedTour.apiTokens.success.content',\n defaultMessage:\n \"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>\",\n },\n trackingEvent: 'didGenerateGuidedTourApiTokens',\n },\n },\n} as const;\n\nconst STATES = {\n IS_DONE: 'IS_DONE',\n IS_ACTIVE: 'IS_ACTIVE',\n IS_NOT_DONE: 'IS_NOT_DONE',\n} as const;\n\ntype LayoutData = typeof LAYOUT_DATA;\ntype States = keyof typeof STATES;\n\nexport { LAYOUT_DATA, STATES };\nexport type { LayoutData, States };\n","import { Box, BoxProps, Flex, FlexProps, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\n\nimport { STATES, States } from './constants';\n\n/* -------------------------------------------------------------------------------------------------\n * Number\n * -----------------------------------------------------------------------------------------------*/\n\ninterface NumberProps extends FlexProps {\n children: number;\n state: States;\n}\n\nconst Number = ({ children, state, ...props }: NumberProps) => {\n return state === STATES.IS_DONE || state === STATES.IS_ACTIVE ? (\n <Flex\n background=\"primary600\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n {state === STATES.IS_DONE ? (\n <Check aria-hidden width={pxToRem(16)} color=\"neutral0\" />\n ) : (\n <Typography fontWeight=\"semiBold\" textColor=\"neutral0\">\n {children}\n </Typography>\n )}\n </Flex>\n ) : (\n <Flex\n borderColor=\"neutral500\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n padding={2}\n borderRadius=\"50%\"\n width={pxToRem(30)}\n height={pxToRem(30)}\n justifyContent=\"center\"\n {...props}\n >\n <Typography fontWeight=\"semiBold\" textColor=\"neutral600\">\n {children}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VerticalDivider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VerticalDividerProps extends BoxProps {\n state: States;\n}\n\nconst VerticalDivider = ({ state, ...props }: VerticalDividerProps) => (\n <Box\n width={pxToRem(2)}\n height=\"100%\"\n background={state === STATES.IS_NOT_DONE ? 'neutral300' : 'primary500'}\n hasRadius\n minHeight={state === STATES.IS_ACTIVE ? pxToRem(85) : pxToRem(65)}\n {...props}\n />\n);\n\nexport { Number, VerticalDivider };\nexport type { NumberProps, VerticalDividerProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n Typography,\n} from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { GuidedTourContextValue, pxToRem, useGuidedTour, useTracking } from '@strapi/helper-plugin';\nimport { ArrowRight, Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { LAYOUT_DATA, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourModal = () => {\n const {\n currentStep,\n guidedTourState,\n setCurrentStep,\n setStepState,\n isGuidedTourVisible,\n setSkipped,\n } = useGuidedTour();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n if (!currentStep || !isGuidedTourVisible) {\n return null;\n }\n\n const stepData = get(LAYOUT_DATA, currentStep);\n const sectionKeys = Object.keys(guidedTourState);\n const [sectionName, stepName] = currentStep.split('.') as [\n keyof GuidedTourContextValue['guidedTourState'],\n string\n ];\n const sectionIndex = sectionKeys.indexOf(sectionName);\n const stepIndex = Object.keys(guidedTourState[sectionName]).indexOf(stepName);\n const hasSectionAfter = sectionIndex < sectionKeys.length - 1;\n const hasStepAfter = stepIndex < Object.keys(guidedTourState[sectionName]).length - 1;\n\n const handleCtaClick = () => {\n setStepState(currentStep, true);\n\n if (stepData) {\n trackUsage(stepData.trackingEvent);\n }\n\n setCurrentStep(null);\n };\n\n const handleSkip = () => {\n setSkipped(true);\n setCurrentStep(null);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Portal>\n <ModalWrapper onClick={handleCtaClick} padding={8} justifyContent=\"center\">\n <FocusTrap onEscape={handleCtaClick}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral0\"\n width={pxToRem(660)}\n shadow=\"popupShadow\"\n hasRadius\n padding={4}\n gap={8}\n role=\"dialog\"\n aria-modal\n onClick={(e) => e.stopPropagation()}\n >\n <Flex justifyContent=\"flex-end\">\n <IconButton\n onClick={handleCtaClick}\n aria-label={formatMessage({\n id: 'app.utils.close-label',\n defaultMessage: 'Close',\n })}\n >\n <Cross />\n </IconButton>\n </Flex>\n <Box\n paddingLeft={7}\n paddingRight={7}\n paddingBottom={!hasStepAfter && !hasSectionAfter ? 8 : 0}\n >\n <GuidedTourStepper\n title={stepData && 'title' in stepData ? stepData.title : undefined}\n cta={stepData && 'cta' in stepData ? stepData.cta : undefined}\n onCtaClick={handleCtaClick}\n sectionIndex={sectionIndex}\n stepIndex={stepIndex}\n hasSectionAfter={hasSectionAfter}\n >\n {stepData && 'content' in stepData && <GuidedTourContent {...stepData.content} />}\n </GuidedTourStepper>\n </Box>\n {!(!hasStepAfter && !hasSectionAfter) && (\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({\n id: 'app.components.GuidedTour.skip',\n defaultMessage: 'Skip the tour',\n })}\n </Button>\n </Flex>\n )}\n </Flex>\n </FocusTrap>\n </ModalWrapper>\n </Portal>\n );\n};\n\nconst ModalWrapper = styled(Flex)`\n position: fixed;\n z-index: 4;\n inset: 0;\n /* this is theme.colors.neutral800 with opacity */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourStepper\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourStepperProps {\n title: MessageDescriptor | undefined;\n children: React.ReactNode;\n cta?: {\n title: MessageDescriptor;\n target?: string;\n };\n onCtaClick: () => void;\n sectionIndex: number;\n stepIndex: number;\n hasSectionAfter: boolean;\n}\n\nconst GuidedTourStepper = ({\n title,\n children,\n cta,\n onCtaClick,\n sectionIndex,\n stepIndex,\n hasSectionAfter,\n}: GuidedTourStepperProps) => {\n const { formatMessage } = useIntl();\n\n const hasSectionBefore = sectionIndex > 0;\n const hasStepsBefore = stepIndex > 0;\n const nextSectionIndex = sectionIndex + 1;\n\n return (\n <>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionBefore && <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />}\n </Flex>\n <Typography variant=\"sigma\" textColor=\"primary600\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n </Flex>\n <Flex>\n <Flex marginRight={8} minWidth={pxToRem(30)}>\n <Number\n state={hasStepsBefore ? STATES.IS_DONE : STATES.IS_ACTIVE}\n paddingTop={3}\n paddingBottom={3}\n >\n {sectionIndex + 1}\n </Number>\n </Flex>\n {title && (\n <Typography variant=\"alpha\" fontWeight=\"bold\" textColor=\"neutral800\" as=\"h3\" id=\"title\">\n {formatMessage(title)}\n </Typography>\n )}\n </Flex>\n <Flex alignItems=\"stretch\">\n <Flex marginRight={8} direction=\"column\" justifyContent=\"center\" minWidth={pxToRem(30)}>\n {hasSectionAfter && (\n <>\n <VerticalDivider state={STATES.IS_DONE} />\n {hasStepsBefore && (\n <Number state={STATES.IS_ACTIVE} paddingTop={3}>\n {nextSectionIndex + 1}\n </Number>\n )}\n </>\n )}\n </Flex>\n <Box>\n {children}\n {cta &&\n (cta.target ? (\n <LinkButton\n as={NavLink}\n endIcon={<ArrowRight />}\n onClick={onCtaClick}\n // @ts-expect-error - types are not inferred correctly through the as prop.\n to={cta.target}\n >\n {formatMessage(cta.title)}\n </LinkButton>\n ) : (\n <Button endIcon={<ArrowRight />} onClick={onCtaClick}>\n {formatMessage(cta.title)}\n </Button>\n ))}\n </Box>\n </Flex>\n {hasStepsBefore && hasSectionAfter && (\n <Box paddingTop={3}>\n <Flex marginRight={8} justifyContent=\"center\" width={pxToRem(30)}>\n <VerticalDivider state={STATES.IS_DONE} minHeight={pxToRem(24)} />\n </Flex>\n </Box>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GuidedTourContentProps\n extends Required<Pick<MessageDescriptor, 'defaultMessage' | 'id'>> {}\n\nconst GuidedTourContent = ({ id, defaultMessage }: GuidedTourContentProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} paddingBottom={6}>\n {formatMessage(\n { id, defaultMessage },\n {\n documentationLink: DocumentationLink,\n b: Bold,\n p: Paragraph,\n light: Light,\n ul: List,\n li: ListItem,\n }\n )}\n </Flex>\n );\n};\n\nconst DocumentationLink = (children: React.ReactNode) => (\n <Typography\n as=\"a\"\n textColor=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#api-parameters\"\n >\n {children}\n </Typography>\n);\n\nconst Bold = (children: React.ReactNode) => (\n <Typography fontWeight=\"semiBold\">{children}</Typography>\n);\n\nconst Paragraph = (children: React.ReactNode) => <Typography>{children}</Typography>;\n\nconst Light = (children: React.ReactNode) => (\n <Typography textColor=\"neutral600\">{children}</Typography>\n);\n\nconst List = (children: React.ReactNode) => (\n <Box paddingLeft={6}>\n <ul>{children}</ul>\n </Box>\n);\n\nconst LiStyled = styled.li`\n list-style: disc;\n &::marker {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n`;\n\nconst ListItem = (children: React.ReactNode) => <LiStyled>{children}</LiStyled>;\n\nexport { GuidedTourModal };\n","import * as React from 'react';\n\nimport { Box, Divider, Flex, FocusTrap, Icon, Typography } from '@strapi/design-system';\nimport {\n MainNav,\n NavBrand,\n NavCondense,\n NavFooter,\n NavLink,\n NavSection,\n NavSections,\n NavUser,\n} from '@strapi/design-system/v2';\nimport { useAppInfo, usePersistentState, useTracking } from '@strapi/helper-plugin';\nimport { Exit, Write, Lock } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink as RouterNavLink, useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { Menu } from '../hooks/useMenu';\n\nconst LinkUserWrapper = styled(Box)`\n width: ${150 / 16}rem;\n position: absolute;\n bottom: ${({ theme }) => theme.spaces[9]};\n left: ${({ theme }) => theme.spaces[5]};\n`;\n\nconst LinkUser = styled(RouterNavLink)<{ logout?: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.spaces[1]};\n\n &:hover {\n background: ${({ theme, logout }) =>\n logout ? theme.colors.danger100 : theme.colors.primary100};\n text-decoration: none;\n }\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n }\n`;\n\nconst NavLinkWrapper = styled(Box)`\n div:nth-child(2) {\n /* remove badge background color */\n background: transparent;\n }\n`;\n\ninterface LeftMenuProps extends Pick<Menu, 'generalSectionLinks' | 'pluginsSectionLinks'> {}\n\nconst LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }: LeftMenuProps) => {\n const navUserRef = React.useRef<HTMLDivElement>(null!);\n const [userLinksVisible, setUserLinksVisible] = React.useState(false);\n const {\n logos: { menu },\n } = useConfiguration('LeftMenu');\n const [condensed, setCondensed] = usePersistentState('navbar-condensed', false);\n const { userDisplayName } = useAppInfo();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const logout = useAuth('Logout', (state) => state.logout);\n\n const initials = userDisplayName\n .split(' ')\n .map((name) => name.substring(0, 1))\n .join('')\n .substring(0, 2);\n\n const handleToggleUserLinks = () => setUserLinksVisible((prev) => !prev);\n\n const handleBlur: React.FocusEventHandler = (e) => {\n if (\n !e.currentTarget.contains(e.relatedTarget) &&\n /**\n * TODO: can we replace this by just using the navUserRef?\n */\n e.relatedTarget?.parentElement?.id !== 'main-nav-user-button'\n ) {\n setUserLinksVisible(false);\n }\n };\n\n const handleClickOnLink = (destination: string) => {\n trackUsage('willNavigate', { from: pathname, to: destination });\n };\n\n const menuTitle = formatMessage({\n id: 'app.components.LeftMenu.navbrand.title',\n defaultMessage: 'Strapi Dashboard',\n });\n\n return (\n <MainNav condensed={condensed}>\n <NavBrand\n as={RouterNavLink}\n workplace={formatMessage({\n id: 'app.components.LeftMenu.navbrand.workplace',\n defaultMessage: 'Workplace',\n })}\n title={menuTitle}\n icon={\n <img\n src={menu.custom?.url || menu.default}\n alt={formatMessage({\n id: 'app.components.LeftMenu.logo.alt',\n defaultMessage: 'Application logo',\n })}\n />\n }\n />\n\n <Divider />\n\n <NavSections>\n <NavLink\n as={RouterNavLink}\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to=\"/content-manager\"\n icon={<Write />}\n onClick={() => handleClickOnLink('/content-manager')}\n >\n {formatMessage({ id: 'global.content-manager', defaultMessage: 'Content manager' })}\n </NavLink>\n\n {pluginsSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.plugins',\n defaultMessage: 'Plugins',\n })}\n >\n {pluginsSectionLinks.map((link) => {\n const LinkIcon = link.icon;\n return (\n <NavLinkWrapper key={link.to}>\n <NavLink\n as={RouterNavLink}\n to={link.to}\n icon={<LinkIcon />}\n onClick={() => handleClickOnLink(link.to)}\n // @ts-expect-error: badgeContent in the DS accept only strings\n badgeContent={\n link?.lockIcon ? (\n <Icon width={`${15 / 16}rem`} height={`${15 / 16}rem`} as={Lock} />\n ) : undefined\n }\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n </NavLinkWrapper>\n );\n })}\n </NavSection>\n ) : null}\n\n {generalSectionLinks.length > 0 ? (\n <NavSection\n label={formatMessage({\n id: 'app.components.LeftMenu.general',\n defaultMessage: 'General',\n })}\n >\n {generalSectionLinks.map((link) => {\n const LinkIcon = link.icon;\n\n return (\n <NavLink\n as={RouterNavLink}\n badgeContent={\n link.notificationsCount && link.notificationsCount > 0\n ? link.notificationsCount.toString()\n : undefined\n }\n // @ts-expect-error the props from the passed as prop are not inferred // joined together\n to={link.to}\n key={link.to}\n icon={<LinkIcon />}\n onClick={() => handleClickOnLink(link.to)}\n >\n {formatMessage(link.intlLabel)}\n </NavLink>\n );\n })}\n </NavSection>\n ) : null}\n </NavSections>\n\n <NavFooter>\n <NavUser\n id=\"main-nav-user-button\"\n ref={navUserRef}\n onClick={handleToggleUserLinks}\n initials={initials}\n >\n {userDisplayName}\n </NavUser>\n {userLinksVisible && (\n <LinkUserWrapper\n onBlur={handleBlur}\n padding={1}\n shadow=\"tableShadow\"\n background=\"neutral0\"\n hasRadius\n >\n <FocusTrap onEscape={handleToggleUserLinks}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={0}>\n <LinkUser tabIndex={0} onClick={handleToggleUserLinks} to=\"/me\">\n <Typography>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n </LinkUser>\n <LinkUser tabIndex={0} onClick={logout} to=\"/auth/login\">\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Logout',\n })}\n </Typography>\n <Exit />\n </LinkUser>\n </Flex>\n </FocusTrap>\n </LinkUserWrapper>\n )}\n\n <NavCondense onClick={() => setCondensed((s) => !s)}>\n {condensed\n ? formatMessage({\n id: 'app.components.LeftMenu.expand',\n defaultMessage: 'Expand the navbar',\n })\n : formatMessage({\n id: 'app.components.LeftMenu.collapse',\n defaultMessage: 'Collapse the navbar',\n })}\n </NavCondense>\n </NavFooter>\n </MainNav>\n );\n};\n\nexport { LeftMenu };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABQCAMAAAD2kgFPAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAL9UExURff3+fv7+/X19/Pz9/n5+fv7/f39//////39/UdwTPn5+/X1+fHx++/v8fn5/fHx8/Pz9eTk6e/v8/Hx9fHx/e3u7/X19e3t8evr7+fn6YuR96Gl+OLi59LS2dTU2uvr++nq7ff39+Tk697e4ufn6+vr7enq69ra3tDQ1uDg5/nv7+Dg5Nzc4Nzd4tTU2OTk5+fn7djY3tzc5M/Q1NjY3NLS1tbX3MzM0u/w9crK0unp7+np+/37+8rK0MjIzu/v78PEy9ra4djY4eLi6t7e5NbW2s7O1OLk5+/v/Ojp/dra5MPF9+3u89bX3mxz99DQ2fj4+OLi5PHx8dvb29ze+/f3/7C1+t7e5+vr69PX2OPk/Jydl/T09/f393R7+Gdw96ytuNTU3M7O2ODg6a6vumJq9+3u/dTW/PP19cXGzd7e4O3t7cnK+/f3+uLk683O+Z2h+dLU+9/h++no3/j39bq0pu/v7fv7+fHz9XF4911l93V8+bm5waGirffr7Kqrtq+z9qentF9o93mA+fj4+vr6++/v7/f3++vt+83N0/Pz8+vr8dbY+sjJ98zO1crM0vn5//Pz/ra6n/n59d/g4quvp9fa2OTn66Shm8C2prCuq+/r67Gxr9LLvbCwrcfEwK+vqZSahtPVw5WafKiknff5+ZqapvHw7fv4+YGH9dnb++Tn/Ly8xvfo6Oq5v////6WlsNrc3vPz+dLU2Ovr/eTn+drc4JWXo6Wp+cLE++nr74+T+enr4s7Q1m5098bArefk5Nze0ODc1Pf3/MC8tuDi0KWrh/n39+Tk4qmv+77Cqdjc3PX1/c7S0vv7/7ixo/Px7Z+jh62x+8rMtrS6pZebjY+Rn9bayKuvm+vp5+np6aWrjVJa9fX38bi895+fm1pk9620oevp6bS0r+fp6fv19VZg9fn19X6F+fnz89LS3MDAyPXi4uextvX1+vPW2OCVnYmJl9zc4Xh4iff3+mdy97y8xPf3977C96mpsbS29YeHlamv84qS87i89VXx8BYAAAD/dFJOU319fX19fX19fQB9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19bX19fX19fX19fX19Lwd9fX19fX19fX19fX19fX1lfX19fX19fX19fX19fX19fX19fX19fW1dED59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0PfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1mfX19bX1eXn0/fX19fX0/fSWruQsAAAbiSURBVGje7VkFcBtHFD2SbnXO9UA56dRIiiRbFFlmiO3asWKIE0MYGrQbZmjDDA1T06RJ03DSJA2XMaWUmZmZmWm6ki3lTie59kTSlJ40p5nV//tud//b/28P0WiG/PgdkhBMHKzRaBDNyWXSRoqi4ki57CQk/MZsKna58pqa0N4gnoNcNgQZzBV8ml9aYMYaW4DQRKjvDC8MG7TkG0ff+gmobifD78gXYQZE0++8b08tXFg/4uf6H46VLh5Rf/P8TERtXG1ykkmtI7zmtZFLhtW9NWfOnCUjhy0Z+T2CJOFYJMOS+YtPzV884teDX8879sKIhfUHSxG1AzH0ajXhB3UjPxpaVzd37uyls5cunRv30Fx0vhxRDfXdLLbhZWU2W1mGGNtbEPuXdStz+2ycu/+kbmv4YLOWZ3merdEyNSweW0KMxXkW1+J4RwxeMeRfCIbhMsu7/LUd0QgkSYkW8TS5wznVlg93W8LnEiUooAIqFYBQkxBnSIxkMStJVLUPoah90cCqlSurWkSI6ijdGGv0v0Wv3iaIa1i9KLJ+QoR0Wk0l2YCo6jO5unpq9dTJkyesW7uu+oZp09q0iLDXvOQNG0r9uxbtNdU2hIcidV4YELTpt40C17WIsMk9oAyapxMbNxiCR4uRWAP2TNOZ3S/KCmdEyfggEORQ9Xh4kKPkM8O6AjbIS/BWfZLED+N5StmbisEZRttRTzVD2LZtUdW09gPbFx0tatuE0Y2E/YYeVYlI0E7ELYjET68vJJS9nZdRc1shq7dgzRIeKfrtj0W//LTojTDCOE2pMsjb3BiQhSo+gF3jOJNhKQwPUgqcBdqhER+Cc4efUOvL8nFKwhxn/tjKtNLTY12HO3z15ecnTiz4ODaEkUEBgoKqIRAdgR3u8NmC4wuOd3g/noSoWoILGgHU5w7/jGpxbQ28dJRl3/AoPfR6jKIUqcnKstkm2fpnZOlZGSFBqUgQtLt6/9vvSf0Y/19qENYbgIpHSQBvFk6ekgy2NZO9SIqk1Pag7Ttvvttb6pu3Ps9lTtvsqsiTtmLpnC83L8fpyjXlmpMVhDYS+IKbN6YkBNINaubunWiMphTh9d0L1tcqMj6IDwKdszgeYYR9u6old/bsi1SsRohhs3heVBK2mz1QLQTthOe3Xyj1q8xJ3uwZZ/A5jbI17GlPyUlNTk31jHN6DQoyhgLuQNVm7l7bWZkPb719FBnKCIcOTJ8h9bVi8GO16hCdLAxR1N9E6HSsDlOmDGjLNBOlcnR6KlY6RFitODzFlrCM799qyt1eZV1KEqhU+E+/5EiE8EML/8qgXVdIfbPHZhfkrrp2bL5J2sqmJptL8nOzi9fnFxekKgjLUOB/rub58obMCEGjVoGzI7x8986Z5zydsDcQkMXWQguPJG4No25tslXYt08Vs62N8TaYvUnKNVSh6tVBuxl798iE7/QYuRSO5jhB2koYGCHZ4PBwKV2MnF5BhlPqxsqC1uJshKChUDIk3qsOPPmy1LeXIIgMzToYWtqK6nS0vRNNC+P1gqgUPrwFfYuFP+DiWK5hCwhjFzSF/WuzOnd2uwt9fEcZ4dp+l52VxSWvPueQb4ugMc7lcY8GhA+iC5+CETqLhV8Ww5iwmmbKsD4glPHtg3bIhJ/mMpucuelpabK8jqVyqdkVOea0nOtzTR4FYQoKvM1MadcJfSUjvO+uB2MlfP+hgrtLAoUf5VAhzPCe++MepVD4gAmlw71bZMLvnZ5ucBhpe0+ZDokuUPgpnJETofDtkYSfEjhUKP8ks0G5eaOoVPjbpt8t9XUYOU+6gfZYZIUEytMOzmB39OzJGThaQZgBv1EPFeIr/AiHCnEMmmiHCgMnnJHI4oFNjGzySEBGVDZsD2g+ovChX3DzjpCeptT1AaEdf8CgHbKgcbnSXBUmoykvRyb8ZKMnrSIzz2Q2myKV+iHhY0laJeGRfhLhW/dcqWulxqOOkOFNp7v78IRm/BZkiztiF6WRDxX85zRFIKTDGfu3PCr1SxcEmGd1jMDKhD9+jE6kRZHWdrILSh3CTsVAXZqa5eWUhA8P7UqGuuu0bfpDso3fuJXjDILHIBc+LQgp6XaHMd1o4HpFyvgZzUzpE49Jn5563wv+qRk/ej6culFSCG96RBc74UcmnHJnH2A5K/xdj0t9S0oLirMrvSWrKmSlvvMmZ3GBuTI/u7IkX1nqW1BQ2wzh6FskNY11eyuFH2kC4DJRf581/B+tQHzfK4e9ZsIQBkFHbURgLQMfX9x4vAlh1sMhIYnAhxhYxVgSNE6C+E+F0KWJpZuIrEgs4WBkSI9E8vXQIJrlCWTssRwSajSDJyYoXFYM0Wj+BNjsk7mwYOwbAAAAAElFTkSuQmCC\"","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Divider,\n Flex,\n Icon,\n PopoverPrimitives,\n Portal,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useAppInfo } from '@strapi/helper-plugin';\nimport { Cross, Message, Play, Question, Book, PaperPlane } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport onboardingPreview from '../assets/images/onboarding-preview.png';\n\nconst Onboarding = () => {\n const triggerRef = React.useRef<HTMLButtonElement>(null!);\n const [isOpen, setIsOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { communityEdition } = useAppInfo();\n\n const handlePopoverVisibility = () => {\n setIsOpen((prev) => !prev);\n };\n\n const docLinks = [\n ...DOCUMENTATION_LINKS,\n {\n label: { id: 'Settings.application.get-help', defaultMessage: 'Get help' },\n icon: Message,\n href: communityEdition\n ? 'https://discord.strapi.io'\n : 'https://support.strapi.io/support/home',\n },\n ];\n\n return (\n <Box as=\"aside\" position=\"fixed\" bottom={2} right={2}>\n <HelperButton\n aria-label={formatMessage(\n isOpen\n ? {\n id: 'app.components.Onboarding.help.button-close',\n defaultMessage: 'Close help menu',\n }\n : {\n id: 'app.components.Onboarding.help.button',\n defaultMessage: 'Open help menu',\n }\n )}\n onClick={handlePopoverVisibility}\n ref={triggerRef}\n >\n <Icon as={isOpen ? Cross : Question} color=\"buttonNeutral0\" />\n </HelperButton>\n\n {isOpen && (\n <Portal>\n <PopoverPrimitives.Content\n padding={0}\n onDismiss={handlePopoverVisibility}\n source={triggerRef}\n placement=\"top-end\"\n spacing={12}\n >\n <Flex\n justifyContent=\"space-between\"\n paddingBottom={5}\n paddingRight={6}\n paddingLeft={6}\n paddingTop={6}\n >\n <TypographyLineHeight fontWeight=\"bold\">\n {formatMessage({\n id: 'app.components.Onboarding.title',\n defaultMessage: 'Get started videos',\n })}\n </TypographyLineHeight>\n <TextLink\n as=\"a\"\n href={WATCH_MORE.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"pi\"\n textColor=\"primary600\"\n >\n {formatMessage(WATCH_MORE.label)}\n </TextLink>\n </Flex>\n <Divider />\n {VIDEO_LINKS.map(({ href, duration, label }, index) => (\n <VideoLinkWrapper\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n key={href}\n hasRadius\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={6}\n paddingRight={11}\n >\n <Box paddingRight={5}>\n <Typography textColor=\"neutral200\" variant=\"alpha\">\n {index + 1}\n </Typography>\n </Box>\n <Box position=\"relative\">\n <Preview src={onboardingPreview} alt=\"\" />\n <IconWrapper\n position=\"absolute\"\n top=\"50%\"\n left=\"50%\"\n background=\"primary600\"\n borderRadius=\"50%\"\n justifyContent=\"center\"\n width={6}\n height={6}\n >\n <Icon as={Play} color=\"buttonNeutral0\" width={3} height={3} />\n </IconWrapper>\n </Box>\n <Flex direction=\"column\" alignItems=\"start\" paddingLeft={4}>\n <Typography fontWeight=\"bold\">{formatMessage(label)}</Typography>\n <VisuallyHidden>:</VisuallyHidden>\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {duration}\n </Typography>\n </Flex>\n </VideoLinkWrapper>\n ))}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={2}\n paddingLeft={5}\n paddingTop={2}\n paddingBottom={5}\n >\n {docLinks.map(({ label, href, icon }) => (\n <Flex gap={3} key={href}>\n <Icon as={icon} color=\"primary600\" />\n <TextLink\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n variant=\"sigma\"\n textColor=\"primary700\"\n >\n {formatMessage(label)}\n </TextLink>\n </Flex>\n ))}\n </Flex>\n </PopoverPrimitives.Content>\n </Portal>\n )}\n </Box>\n );\n};\n\n// TODO: use new Button props derived from Box props with next DS release\nconst HelperButton = styled(Button)`\n border-radius: 50%;\n padding: ${({ theme }) => theme.spaces[3]};\n /* Resetting 2rem height defined by Button component */\n height: 100%;\n`;\n\nconst IconWrapper = styled(Flex)`\n transform: translate(-50%, -50%);\n`;\n\nconst VideoLinkWrapper = styled(Flex)`\n text-decoration: none;\n\n :focus-visible {\n outline-offset: ${({ theme }) => `-${theme.spaces[1]}`};\n }\n\n :hover {\n background: ${({ theme }) => theme.colors.primary100};\n\n /* Hover style for the number displayed */\n ${Typography}:first-child {\n color: ${({ theme }) => theme.colors.primary500};\n }\n\n /* Hover style for the label */\n ${Typography}:nth-child(1) {\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst Preview = styled.img`\n width: ${({ theme }) => theme.spaces[10]};\n height: ${({ theme }) => theme.spaces[8]};\n /* Same overlay used in ModalLayout */\n background: ${({ theme }) => `${theme.colors.neutral800}1F`};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst TypographyLineHeight = styled(Typography)`\n /* line height of label and watch more to 1 so they can be better aligned visually */\n line-height: 1;\n`;\n\nconst TextLink = styled(TypographyLineHeight)`\n text-decoration: none;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nconst VIDEO_LINKS = [\n {\n label: {\n id: 'app.components.Onboarding.link.build-content',\n defaultMessage: 'Build a content architecture',\n },\n href: 'https://www.youtube.com/watch?v=G9GjN0RxhkE',\n duration: '5:48',\n },\n {\n label: {\n id: 'app.components.Onboarding.link.manage-content',\n defaultMessage: 'Add & manage content',\n },\n href: 'https://www.youtube.com/watch?v=DEZw4KbybAI',\n duration: '3:18',\n },\n {\n label: { id: 'app.components.Onboarding.link.manage-media', defaultMessage: 'Manage media' },\n href: 'https://www.youtube.com/watch?v=-61MuiMQb38',\n duration: '3:41',\n },\n];\n\nconst WATCH_MORE = {\n href: 'https://www.youtube.com/playlist?list=PL7Q0DQYATmvidz6lEmwE5nIcOAYagxWqq',\n label: {\n id: 'app.components.Onboarding.link.more-videos',\n defaultMessage: 'Watch more videos',\n },\n};\n\nconst DOCUMENTATION_LINKS = [\n {\n label: { id: 'global.documentation', defaultMessage: 'documentation' },\n href: 'https://docs.strapi.io',\n icon: Book,\n },\n {\n label: { id: 'app.static.links.cheatsheet', defaultMessage: 'cheatsheet' },\n href: 'https://strapi-showcase.s3-us-west-2.amazonaws.com/CheatSheet.pdf',\n icon: PaperPlane,\n },\n];\n\nexport { Onboarding };\n","import { createTypedSelector } from './core/store/hooks';\n\n/**\n * @deprecated\n *\n * Use `useTypedSelector` and access the state directly, this was only used so we knew\n * we were using the correct path. Which is state.admin_app.permissions\n */\nexport const selectAdminPermissions = createTypedSelector((state) => state.admin_app.permissions);\n","import * as React from 'react';\n\nimport {\n Permission,\n hasPermissions,\n useAppInfo,\n useRBACProvider,\n useStrapiApp,\n StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport { Cog, Puzzle, ShoppingCart } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../selectors';\n\n/* -------------------------------------------------------------------------------------------------\n * useMenu\n * -----------------------------------------------------------------------------------------------*/\n\ntype MenuItem = StrapiAppContextValue['menu'][number];\n\nexport interface Menu {\n generalSectionLinks: MenuItem[];\n pluginsSectionLinks: MenuItem[];\n isLoading: boolean;\n}\n\nconst useMenu = () => {\n const { allPermissions: userPermissions } = useRBACProvider();\n const { shouldUpdateStrapi } = useAppInfo();\n const { menu } = useStrapiApp();\n const permissions = useSelector(selectAdminPermissions);\n const [menuWithUserPermissions, setMenuWithUserPermissions] = React.useState<Menu>({\n generalSectionLinks: [\n {\n icon: Puzzle,\n intlLabel: {\n id: 'global.plugins',\n defaultMessage: 'Plugins',\n },\n to: '/list-plugins',\n permissions: permissions.marketplace?.main ?? [],\n },\n {\n icon: ShoppingCart,\n intlLabel: {\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n },\n to: '/marketplace',\n permissions: permissions.marketplace?.main ?? [],\n },\n {\n icon: Cog,\n intlLabel: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n to: '/settings',\n // Permissions of this link are retrieved in the init phase\n // using the settings menu\n permissions: [],\n notificationsCount: 0,\n },\n ],\n pluginsSectionLinks: [],\n isLoading: true,\n });\n const generalSectionLinksRef = React.useRef(menuWithUserPermissions.generalSectionLinks);\n\n React.useEffect(() => {\n async function applyMenuPermissions() {\n const authorizedPluginSectionLinks = await getPluginSectionLinks(userPermissions, menu);\n\n const authorizedGeneralSectionLinks = await getGeneralLinks(\n userPermissions,\n generalSectionLinksRef.current,\n shouldUpdateStrapi\n );\n\n setMenuWithUserPermissions((state) => ({\n ...state,\n generalSectionLinks: authorizedGeneralSectionLinks,\n pluginsSectionLinks: authorizedPluginSectionLinks,\n isLoading: false,\n }));\n }\n\n applyMenuPermissions();\n }, [\n setMenuWithUserPermissions,\n generalSectionLinksRef,\n userPermissions,\n menu,\n permissions,\n shouldUpdateStrapi,\n ]);\n\n return menuWithUserPermissions;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\nconst getGeneralLinks = async (\n userPermissions: Permission[],\n generalSectionRawLinks: MenuItem[],\n shouldUpdateStrapi: boolean = false\n) => {\n const generalSectionLinksPermissions = await Promise.all(\n generalSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedGeneralSectionLinks = generalSectionRawLinks.filter(\n (_, index) => generalSectionLinksPermissions[index]\n );\n\n const settingsLinkIndex = authorizedGeneralSectionLinks.findIndex(\n (obj) => obj.to === '/settings'\n );\n\n if (settingsLinkIndex === -1) {\n return [];\n }\n\n const authorizedGeneralLinksClone = cloneDeep(authorizedGeneralSectionLinks);\n\n authorizedGeneralLinksClone[settingsLinkIndex].notificationsCount = shouldUpdateStrapi ? 1 : 0;\n\n return authorizedGeneralLinksClone;\n};\n\nconst getPluginSectionLinks = async (\n userPermissions: Permission[],\n pluginsSectionRawLinks: MenuItem[]\n) => {\n const pluginSectionLinksPermissions = await Promise.all(\n pluginsSectionRawLinks.map(({ permissions }) => hasPermissions(userPermissions, permissions))\n );\n\n const authorizedPluginSectionLinks = pluginsSectionRawLinks.filter(\n (_, index) => pluginSectionLinksPermissions[index]\n );\n\n return authorizedPluginSectionLinks;\n};\n\nexport { useMenu };\n","import * as React from 'react';\n\nimport { Box, Flex, SkipToContent } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst FlexBox = styled(Box)`\n flex: 1;\n`;\n\ninterface AppLayoutProps {\n children: React.ReactNode;\n sideNav: React.ReactNode;\n}\n\nexport const AppLayout = ({ children, sideNav }: AppLayoutProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box background=\"neutral100\">\n <SkipToContent>\n {formatMessage({ id: 'skipToContent', defaultMessage: 'Skip to content' })}\n </SkipToContent>\n <Flex alignItems=\"flex-start\">\n {sideNav}\n <FlexBox>{children}</FlexBox>\n </Flex>\n </Box>\n );\n};\n","/**\n *\n * Admin\n *\n */\n\nimport * as React from 'react';\n\nimport { LoadingIndicatorPage, useStrapiApp, useTracking } from '@strapi/helper-plugin';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { GuidedTourModal } from '../components/GuidedTour/Modal';\nimport { LeftMenu } from '../components/LeftMenu';\nimport { Onboarding } from '../components/Onboarding';\nimport { useConfiguration } from '../features/Configuration';\nimport { useMenu } from '../hooks/useMenu';\nimport { useOnce } from '../hooks/useOnce';\nimport { AppLayout } from '../layouts/AppLayout';\nimport { createRoute } from '../utils/createRoute';\n\nconst CM = React.lazy(() =>\n import('../content-manager/pages/App').then((mod) => ({ default: mod.App }))\n);\nconst HomePage = React.lazy(() =>\n import('./HomePage').then((mod) => ({\n default: mod.HomePage,\n }))\n);\nconst InstalledPluginsPage = React.lazy(() =>\n import('./InstalledPluginsPage').then((mod) => ({\n default: mod.ProtectedInstalledPluginsPage,\n }))\n);\nconst MarketplacePage = React.lazy(() =>\n import('./Marketplace/MarketplacePage').then((mod) => ({ default: mod.ProtectedMarketplacePage }))\n);\nconst NotFoundPage = React.lazy(() =>\n import('./NotFoundPage').then(({ NotFoundPage }) => ({ default: NotFoundPage }))\n);\nconst InternalErrorPage = React.lazy(() =>\n import('./InternalErrorPage').then(({ InternalErrorPage }) => ({\n default: InternalErrorPage,\n }))\n);\n\nconst ProfilePage = React.lazy(() =>\n import('./ProfilePage').then((mod) => ({\n default: mod.ProfilePage,\n }))\n);\nconst SettingsPage = React.lazy(() =>\n import('./Settings/SettingsPage').then((mod) => ({\n default: mod.SettingsPage,\n }))\n);\n\nconst Admin = () => {\n const { trackUsage } = useTracking();\n\n const { isLoading, generalSectionLinks, pluginsSectionLinks } = useMenu();\n const { menu } = useStrapiApp();\n const { showTutorials } = useConfiguration('Admin');\n\n /**\n * Make sure the event is only send once after accessing the admin panel\n * and not at runtime for example when regenerating the permissions with the ctb\n * or with i18n\n */\n useOnce(() => {\n trackUsage('didAccessAuthenticatedAdministration');\n });\n\n const routes = React.useMemo(() => {\n return (\n menu\n .filter((link) => link.Component)\n // we've filtered out the links that don't have a component above\n .map(({ to, Component, exact }) => createRoute(Component!, to, exact))\n );\n }, [menu]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <DndProvider backend={HTML5Backend}>\n <AppLayout\n sideNav={\n <LeftMenu\n generalSectionLinks={generalSectionLinks}\n pluginsSectionLinks={pluginsSectionLinks}\n />\n }\n >\n <React.Suspense fallback={<LoadingIndicatorPage />}>\n <Switch>\n <Route path=\"/\" component={HomePage} exact />\n <Route path=\"/me\" component={ProfilePage} exact />\n <Route path=\"/content-manager\" component={CM} />\n {routes}\n <Route path=\"/settings/:settingId\" component={SettingsPage} />\n <Route path=\"/settings\" component={SettingsPage} exact />\n <Route path=\"/marketplace\">\n <MarketplacePage />\n </Route>\n <Route path=\"/list-plugins\" exact>\n <InstalledPluginsPage />\n </Route>\n <Route path=\"/404\" component={NotFoundPage} />\n <Route path=\"/500\" component={InternalErrorPage} />\n <Route path=\"\" component={NotFoundPage} />\n </Switch>\n </React.Suspense>\n <GuidedTourModal />\n\n {showTutorials && <Onboarding />}\n </AppLayout>\n </DndProvider>\n );\n};\n\nexport { Admin };\n","import * as React from 'react';\n\nimport {\n LoadingIndicatorPage,\n useStrapiApp,\n type StrapiAppContextValue,\n} from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport set from 'lodash/set';\n\nimport { Admin } from '../pages/Admin';\n\n/**\n * TODO: this isn't great, and we really should focus on fixing this.\n */\nconst PluginsInitializer = () => {\n const { plugins: appPlugins } = useStrapiApp();\n const [{ plugins }, dispatch] = React.useReducer<React.Reducer<State, Action>, State>(\n reducer,\n initialState,\n () => init(appPlugins)\n );\n const setPlugin = React.useRef((pluginId: string) => {\n dispatch({ type: 'SET_PLUGIN_READY', pluginId });\n });\n\n const hasApluginNotReady = Object.keys(plugins).some(\n (plugin) => plugins[plugin].isReady === false\n );\n\n /**\n *\n * I have spent some time trying to understand what is happening here, and wanted to\n * leave that knowledge for my future me:\n *\n * `initializer` is an undocumented property of the `registerPlugin` API. At the time\n * of writing it seems only to be used by the i18n plugin.\n *\n * How does it work?\n *\n * Every plugin that has an `initializer` component defined, receives the\n * `setPlugin` function as a component prop. In the case of i18n the plugin fetches locales\n * first and calls `setPlugin` with `pluginId` once they are loaded, which then triggers the\n * reducer of the admin app defined above.\n *\n * Once all plugins are set to `isReady: true` the app renders.\n *\n * This API is used to block rendering of the admin app. We should remove that in v5 completely\n * and make sure plugins can inject data into the global store before they are initialized, to avoid\n * having a new prop-callback based communication channel between plugins and the core admin app.\n *\n */\n\n if (hasApluginNotReady) {\n const initializers = Object.keys(plugins).reduce((acc, current) => {\n const InitializerComponent = plugins[current].initializer;\n\n if (InitializerComponent) {\n const key = plugins[current].pluginId;\n\n acc.push(<InitializerComponent key={key} setPlugin={setPlugin.current} />);\n }\n\n return acc;\n }, [] as React.ReactNode[]);\n\n return (\n <>\n {initializers}\n <LoadingIndicatorPage />\n </>\n );\n }\n\n return <Admin />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n plugins: StrapiAppContextValue['plugins'];\n}\n\nconst initialState: State = {\n plugins: {},\n};\n\ntype SetPluginReadyAction = {\n type: 'SET_PLUGIN_READY';\n pluginId: string;\n};\n\ntype Action = SetPluginReadyAction;\n\nconst reducer: React.Reducer<State, Action> = (state = initialState, action: Action): State =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'SET_PLUGIN_READY': {\n set(draftState, ['plugins', action.pluginId, 'isReady'], true);\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * Init state\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (plugins: State['plugins']): State => {\n return {\n plugins: Object.keys(plugins).reduce<State['plugins']>((acc, current) => {\n acc[current] = { ...plugins[current] };\n\n return acc;\n }, {}),\n };\n};\n\nexport { PluginsInitializer };\n","import * as React from 'react';\n\nimport { AppInfoProvider, LoadingIndicatorPage, useGuidedTour } from '@strapi/helper-plugin';\nimport lt from 'semver/functions/lt';\nimport valid from 'semver/functions/valid';\n// TODO: DS add loader\n\nimport packageJSON from '../../../package.json';\nimport { useAuth } from '../features/Auth';\nimport { useConfiguration } from '../features/Configuration';\nimport { useInformationQuery } from '../services/admin';\nimport { useGetMyPermissionsQuery } from '../services/auth';\nimport { getFullName } from '../utils/getFullName';\nimport { hashAdminUserEmail } from '../utils/hashAdminUserEmail';\n\nimport { NpsSurvey } from './NpsSurvey';\nimport { PluginsInitializer } from './PluginsInitializer';\nimport { RBACProvider } from './RBACProvider';\n\nconst strapiVersion = packageJSON.version;\n\nconst AuthenticatedApp = () => {\n const { setGuidedTourVisibility } = useGuidedTour();\n const userInfo = useAuth('AuthenticatedApp', (state) => state.user);\n const [userDisplayName, setUserDisplayName] = React.useState<string>(() =>\n userInfo ? userInfo.username || getFullName(userInfo.firstname ?? '', userInfo.lastname) : ''\n );\n /**\n * Keep this in sync with the user info we return from the useAuth hook.\n * We can't remove the above state because it's used in `useAppInfo` which\n * is a public API.\n *\n * TODO: remove this workaround in V5.\n */\n React.useEffect(() => {\n setUserDisplayName(\n userInfo ? userInfo.username || getFullName(userInfo.firstname ?? '', userInfo.lastname) : ''\n );\n }, [userInfo]);\n const [userId, setUserId] = React.useState<string>();\n const { showReleaseNotification } = useConfiguration('AuthenticatedApp');\n\n const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();\n /**\n * TODO: in V5 remove the `RBACProvider` and fire this in the Auth provider instead.\n */\n const {\n data: permissions,\n isLoading: isLoadingPermissions,\n refetch,\n } = useGetMyPermissionsQuery();\n\n const [tagName, setTagName] = React.useState<string>(strapiVersion);\n\n React.useEffect(() => {\n if (showReleaseNotification) {\n fetch('https://api.github.com/repos/strapi/strapi/releases/latest')\n .then(async (res) => {\n if (!res.ok) {\n throw new Error();\n }\n\n const response = (await res.json()) as { tag_name: string | null | undefined };\n\n if (!response.tag_name) {\n throw new Error();\n }\n\n setTagName(response.tag_name);\n })\n .catch(() => {\n /**\n * silence is golden & we'll use the strapiVersion as a fallback\n */\n });\n }\n }, [showReleaseNotification]);\n\n const userRoles = useAuth('AuthenticatedApp', (state) => state.user?.roles);\n\n React.useEffect(() => {\n if (userRoles) {\n const isUserSuperAdmin = userRoles.find(({ code }) => code === 'strapi-super-admin');\n\n if (isUserSuperAdmin && appInfo?.autoReload) {\n setGuidedTourVisibility(true);\n }\n }\n }, [userRoles, appInfo?.autoReload, setGuidedTourVisibility]);\n\n React.useEffect(() => {\n hashAdminUserEmail(userInfo).then((id) => {\n if (id) {\n setUserId(id);\n }\n });\n }, [userInfo]);\n\n // We don't need to wait for the release query to be fetched before rendering the plugins\n // however, we need the appInfos and the permissions\n if (isLoadingAppInfo || isLoadingPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n const refetchPermissions = () => {\n refetch();\n };\n\n return (\n <AppInfoProvider\n {...appInfo}\n userId={userId}\n latestStrapiReleaseTag={tagName}\n setUserDisplayName={setUserDisplayName}\n shouldUpdateStrapi={checkLatestStrapiVersion(strapiVersion, tagName)}\n userDisplayName={userDisplayName}\n >\n <RBACProvider permissions={permissions ?? []} refetchPermissions={refetchPermissions}>\n <NpsSurvey />\n <PluginsInitializer />\n </RBACProvider>\n </AppInfoProvider>\n );\n};\n\nconst checkLatestStrapiVersion = (\n currentPackageVersion: string,\n latestPublishedVersion: string = ''\n): boolean => {\n if (!valid(currentPackageVersion) || !valid(latestPublishedVersion)) {\n return false;\n }\n\n return lt(currentPackageVersion, latestPublishedVersion);\n};\n\nexport { AuthenticatedApp };\n"],"names":["RouterNavLink","name","NavLink","NotFoundPage","InternalErrorPage"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProfilePage-HNl8o56h.js","sources":["../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n HeaderLayout,\n Main,\n useNotifyAT,\n Grid,\n GridItem,\n Typography,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n FieldAction,\n} from '@strapi/design-system';\nimport {\n Form,\n GenericInput,\n GenericInputProps,\n LoadingIndicatorPage,\n pxToRem,\n translatedErrors,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n useTracking,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { Check, Eye, EyeStriked } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport upperFirst from 'lodash/upperFirst';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { getFullName } from '../utils/getFullName';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema.required(translatedErrors.required)\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProfilePage = () => {\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n useFocusWhenNavigate();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'warning',\n message: { id: 'Settings.permissions.users.sso.provider.error' },\n });\n }\n }, [error, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormikHelpers<UpdateUsersMeBody>\n ) => {\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n lockApp();\n\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n }\n\n if ('error' in res) {\n if (\n isBaseQueryError(res.error) &&\n (res.error.name === 'ValidationError' || res.error.message === 'ValidationError')\n ) {\n // @ts-expect-error – We get a BadRequest error here instead of a ValidationError if the currentPassword is wrong.\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'warning',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n }\n }\n\n unlockApp?.();\n };\n\n if (isLoading) {\n return (\n <Main aria-busy=\"true\">\n <Helmet\n title={formatMessage({\n id: 'Settings.profile.form.section.helmet.title',\n defaultMessage: 'User profile',\n })}\n />\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.profile.form.section.profile.page.title',\n defaultMessage: 'Profile page',\n })}\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email,\n firstname,\n lastname,\n username,\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <Main aria-busy={isSubmittingForm}>\n <Helmet\n title={formatMessage({\n id: 'Settings.profile.form.section.helmet.title',\n defaultMessage: 'User profile',\n })}\n />\n <Formik\n onSubmit={handleSubmit}\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n enableReinitialize\n >\n {({\n errors,\n values: {\n email,\n firstname,\n lastname,\n username,\n preferedLanguage,\n currentTheme,\n ...passwordValues\n },\n handleChange,\n isSubmitting,\n dirty,\n }) => {\n return (\n <Form>\n <HeaderLayout\n title={username || getFullName(firstname ?? '', lastname)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!dirty}\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={10}>\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection\n errors={errors}\n onChange={handleChange}\n values={{\n firstname,\n lastname,\n username,\n email,\n }}\n />\n {!hasLockedRole && (\n <PasswordSection\n errors={errors}\n onChange={handleChange}\n values={passwordValues}\n />\n )}\n <PreferencesSection\n onChange={handleChange}\n values={{\n preferedLanguage,\n currentTheme,\n }}\n localeNames={localeNames}\n />\n </Flex>\n </ContentLayout>\n </Box>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PasswordSectionProps {\n errors: { currentPassword?: string; password?: string; confirmPassword?: string };\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n values: {\n currentPassword?: string;\n password?: string;\n confirmPassword?: string;\n };\n}\n\nconst PasswordSection = ({ errors, onChange, values }: PasswordSectionProps) => {\n const { formatMessage } = useIntl();\n const [currentPasswordShown, setCurrentPasswordShown] = React.useState(false);\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [passwordConfirmShown, setPasswordConfirmShown] = React.useState(false);\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <TextInput\n error={\n errors.currentPassword\n ? formatMessage({\n id: errors.currentPassword,\n defaultMessage: errors.currentPassword,\n })\n : ''\n }\n onChange={onChange}\n value={values.currentPassword}\n label={formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n })}\n name=\"currentPassword\"\n type={currentPasswordShown ? 'text' : 'password'}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setCurrentPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n currentPasswordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {currentPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n </Grid>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <PasswordInput\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: errors.password,\n })\n : ''\n }\n onChange={onChange}\n value={values.password}\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n name=\"password\"\n type={passwordShown ? 'text' : 'password'}\n autoComplete=\"new-password\"\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <PasswordInput\n error={\n errors.confirmPassword\n ? formatMessage({\n id: errors.confirmPassword,\n defaultMessage: errors.confirmPassword,\n })\n : ''\n }\n onChange={onChange}\n value={values.confirmPassword}\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n name=\"confirmPassword\"\n type={passwordConfirmShown ? 'text' : 'password'}\n autoComplete=\"new-password\"\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordConfirmShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordConfirmShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordConfirmShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\n// Wrapper of the Eye Icon able to show or hide the Password inside the field\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: ${pxToRem(16)};\n width: ${pxToRem(16)};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps extends Pick<GenericInputProps, 'onChange'> {\n values: {\n preferedLanguage?: string;\n currentTheme?: string;\n };\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ onChange, values, localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n as=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <SingleSelect\n label={formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n })}\n placeholder={formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })}\n hint={formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n })}\n onClear={() => {\n onChange({\n target: { name: 'preferedLanguage', value: null },\n });\n }}\n clearLabel={formatMessage({\n id: 'Settings.profile.form.section.experience.clear.select',\n defaultMessage: 'Clear the interface language selected',\n })}\n value={values.preferedLanguage}\n onChange={(e) => {\n onChange({\n target: { name: 'preferedLanguage', value: e },\n });\n }}\n >\n {Object.entries(localeNames).map(([language, langName]) => (\n <SingleSelectOption value={language} key={language}>\n {langName}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </GridItem>\n <GridItem s={12} col={6}>\n <SingleSelect\n label={formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n })}\n placeholder={formatMessage({\n id: 'components.Select.placeholder',\n defaultMessage: 'Select',\n })}\n hint={formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n })}\n value={values.currentTheme}\n onChange={(e) => {\n onChange({\n target: { name: 'currentTheme', value: e },\n });\n }}\n >\n <SingleSelectOption value=\"system\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n })}\n </SingleSelectOption>\n {themesToDisplay.map((theme) => (\n <SingleSelectOption value={theme} key={theme}>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n )}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UserInfoSectionProps extends Pick<GenericInputProps, 'onChange'> {\n errors: { firstname?: string; lastname?: string; username?: string; email?: string };\n values: {\n firstname?: string;\n lastname?: string;\n username?: string;\n email?: string;\n };\n}\n\nconst UserInfoSection = ({ errors, onChange, values }: UserInfoSectionProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }}\n error={errors.firstname}\n onChange={onChange}\n value={values.firstname}\n type=\"text\"\n name=\"firstname\"\n required\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }}\n error={errors.lastname}\n onChange={onChange}\n value={values.lastname}\n type=\"text\"\n name=\"lastname\"\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{ id: 'Auth.form.email.label', defaultMessage: 'Email' }}\n error={errors.email}\n onChange={onChange}\n value={values.email}\n type=\"email\"\n name=\"email\"\n required\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }}\n error={errors.username}\n onChange={onChange}\n value={values.username}\n type=\"text\"\n name=\"username\"\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nexport { ProfilePage };\n"],"names":["yup","COMMON_USER_SCHEMA","translatedErrors","useTypedSelector","useIntl","useTracking","useNotification","useOverlayBlocker","useNotifyAT","useTypedDispatch","useAPIErrorHandler","useFocusWhenNavigate","useAuth","React","useUpdateMeMutation","useIsSSOLockedQuery","currentTheme","setAppTheme","isBaseQueryError","jsxs","Main","jsx","Helmet","HeaderLayout","ContentLayout","LoadingIndicatorPage","Formik","email","firstname","lastname","username","preferedLanguage","Form","getFullName","Button","Check","Box","Flex","Typography","Grid","GridItem","TextInput","Eye","EyeStriked","styled","FieldAction","pxToRem","SingleSelect","SingleSelectOption","upperFirst","GenericInput"],"mappings":"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"}
|