@erpsquad/common 1.11.8 → 1.11.9
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/api-client/index.esm.js +1 -1
- package/dist/api-client/index.js +1 -1
- package/dist/chunks/{DynamicDependentField-C0XXmMlG.esm.js → DynamicDependentField-CzEJwzIq.esm.js} +2 -2
- package/dist/chunks/{DynamicDependentField-C0XXmMlG.esm.js.map → DynamicDependentField-CzEJwzIq.esm.js.map} +1 -1
- package/dist/chunks/{DynamicDependentField-CQIfDDqc.js → DynamicDependentField-D8K1QyqC.js} +2 -2
- package/dist/chunks/{DynamicDependentField-CQIfDDqc.js.map → DynamicDependentField-D8K1QyqC.js.map} +1 -1
- package/dist/chunks/{ERPUIProvider-I4j_X_SD.esm.js → ERPUIProvider-CqbIIC8j.esm.js} +3 -3
- package/dist/chunks/{ERPUIProvider-I4j_X_SD.esm.js.map → ERPUIProvider-CqbIIC8j.esm.js.map} +1 -1
- package/dist/chunks/{ERPUIProvider-CcSTcdEo.js → ERPUIProvider-TOq-GnAq.js} +3 -3
- package/dist/chunks/{ERPUIProvider-CcSTcdEo.js.map → ERPUIProvider-TOq-GnAq.js.map} +1 -1
- package/dist/chunks/{FORMS-pxf6g6xE.esm.js → FORMS-C1qQnoDd.esm.js} +7 -7
- package/dist/chunks/{FORMS-pxf6g6xE.esm.js.map → FORMS-C1qQnoDd.esm.js.map} +1 -1
- package/dist/chunks/{FORMS-CUx32b_4.js → FORMS-qlTftaaD.js} +7 -7
- package/dist/chunks/{FORMS-CUx32b_4.js.map → FORMS-qlTftaaD.js.map} +1 -1
- package/dist/chunks/{FlexibleReduxExample--GtoEJhc.js → FlexibleReduxExample-BEK1732S.js} +4 -4
- package/dist/chunks/{FlexibleReduxExample--GtoEJhc.js.map → FlexibleReduxExample-BEK1732S.js.map} +1 -1
- package/dist/chunks/{FlexibleReduxExample-C-2qOGIw.esm.js → FlexibleReduxExample-CfMjfKUf.esm.js} +4 -4
- package/dist/chunks/{FlexibleReduxExample-C-2qOGIw.esm.js.map → FlexibleReduxExample-CfMjfKUf.esm.js.map} +1 -1
- package/dist/chunks/{SectionFlowEditor-sKsZ3oQo.js → SectionFlowEditor-Bo7czbNc.js} +5 -5
- package/dist/chunks/{SectionFlowEditor-sKsZ3oQo.js.map → SectionFlowEditor-Bo7czbNc.js.map} +1 -1
- package/dist/chunks/{SectionFlowEditor-CFfJBYKx.esm.js → SectionFlowEditor-Ch24-oHf.esm.js} +5 -5
- package/dist/chunks/{SectionFlowEditor-CFfJBYKx.esm.js.map → SectionFlowEditor-Ch24-oHf.esm.js.map} +1 -1
- package/dist/chunks/{action-bar-C7Alva4T.esm.js → action-bar-BQ3DcZpw.esm.js} +4 -4
- package/dist/chunks/{action-bar-C7Alva4T.esm.js.map → action-bar-BQ3DcZpw.esm.js.map} +1 -1
- package/dist/chunks/{action-bar-DdtpxWNk.js → action-bar-CiYO9X02.js} +4 -4
- package/dist/chunks/{action-bar-DdtpxWNk.js.map → action-bar-CiYO9X02.js.map} +1 -1
- package/dist/chunks/{actionCreator-o4ecxFME.js → actionCreator-BdAKTPvT.js} +3 -3
- package/dist/chunks/{actionCreator-o4ecxFME.js.map → actionCreator-BdAKTPvT.js.map} +1 -1
- package/dist/chunks/{actionCreator-Cl8vPLVO.esm.js → actionCreator-C5C0Rg3P.esm.js} +2 -2
- package/dist/chunks/{actionCreator-Cl8vPLVO.esm.js.map → actionCreator-C5C0Rg3P.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-Cb3NxILP.esm.js → actionCreator-C6VISpYt.esm.js} +3 -3
- package/dist/chunks/{actionCreator-Cb3NxILP.esm.js.map → actionCreator-C6VISpYt.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-Dar9Z8_d.esm.js → actionCreator-C7fR-FtF.esm.js} +2 -2
- package/dist/chunks/{actionCreator-Dar9Z8_d.esm.js.map → actionCreator-C7fR-FtF.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-CMigYdax.js → actionCreator-CPRDrGDt.js} +3 -3
- package/dist/chunks/{actionCreator-CMigYdax.js.map → actionCreator-CPRDrGDt.js.map} +1 -1
- package/dist/chunks/{actionCreator-CXmvL3vl.js → actionCreator-D1M0-Fq1.js} +2 -2
- package/dist/chunks/{actionCreator-CXmvL3vl.js.map → actionCreator-D1M0-Fq1.js.map} +1 -1
- package/dist/chunks/{actionCreator-Bas2FW_X.js → actionCreator-Dds_g-Bu.js} +2 -2
- package/dist/chunks/{actionCreator-Bas2FW_X.js.map → actionCreator-Dds_g-Bu.js.map} +1 -1
- package/dist/chunks/{actionCreator-CpePNxQM.esm.js → actionCreator-EaDmUCRb.esm.js} +2 -2
- package/dist/chunks/{actionCreator-CpePNxQM.esm.js.map → actionCreator-EaDmUCRb.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-CL5ICuqZ.esm.js → actionCreator-Jk4efZIf.esm.js} +3 -3
- package/dist/chunks/{actionCreator-CL5ICuqZ.esm.js.map → actionCreator-Jk4efZIf.esm.js.map} +1 -1
- package/dist/chunks/{actionCreator-Dl5gTT9c.js → actionCreator-cbPvURIw.js} +2 -2
- package/dist/chunks/{actionCreator-Dl5gTT9c.js.map → actionCreator-cbPvURIw.js.map} +1 -1
- package/dist/chunks/{add-template-DVvbD9a4.esm.js → add-template-CMJffU6X.esm.js} +2 -2
- package/dist/chunks/{add-template-DVvbD9a4.esm.js.map → add-template-CMJffU6X.esm.js.map} +1 -1
- package/dist/chunks/{add-template-Dohg2bHJ.js → add-template-xJNMepo_.js} +2 -2
- package/dist/chunks/{add-template-Dohg2bHJ.js.map → add-template-xJNMepo_.js.map} +1 -1
- package/dist/chunks/{address-modal-CYhiC7ui.js → address-modal-D-FwM2i_.js} +2 -2
- package/dist/chunks/{address-modal-CYhiC7ui.js.map → address-modal-D-FwM2i_.js.map} +1 -1
- package/dist/chunks/{address-modal-CkDBjnye.esm.js → address-modal-DuLY8PAg.esm.js} +2 -2
- package/dist/chunks/{address-modal-CkDBjnye.esm.js.map → address-modal-DuLY8PAg.esm.js.map} +1 -1
- package/dist/chunks/{ai-summary-BxcrnNNM.js → ai-summary-CzLIVEbV.js} +3 -3
- package/dist/chunks/{ai-summary-BxcrnNNM.js.map → ai-summary-CzLIVEbV.js.map} +1 -1
- package/dist/chunks/{ai-summary-SKK5KN2s.esm.js → ai-summary-DGQyEhsD.esm.js} +3 -3
- package/dist/chunks/{ai-summary-SKK5KN2s.esm.js.map → ai-summary-DGQyEhsD.esm.js.map} +1 -1
- package/dist/chunks/{api-DBhNDBh9.js → api-CMF1LApB.js} +57 -1
- package/dist/chunks/{api-DBhNDBh9.js.map → api-CMF1LApB.js.map} +1 -1
- package/dist/chunks/{api-BIVCMSwW.esm.js → api-COFUx2RW.esm.js} +2 -2
- package/dist/chunks/{api-BIVCMSwW.esm.js.map → api-COFUx2RW.esm.js.map} +1 -1
- package/dist/chunks/{api-Bl6wVi9D.esm.js → api-D4FV2rsK.esm.js} +69 -13
- package/dist/chunks/{api-Bl6wVi9D.esm.js.map → api-D4FV2rsK.esm.js.map} +1 -1
- package/dist/chunks/{api-EomXz8pk.js → api-DuBJvpDR.js} +2 -2
- package/dist/chunks/{api-EomXz8pk.js.map → api-DuBJvpDR.js.map} +1 -1
- package/dist/chunks/{appbar-rqqjZ99v.js → appbar-DzkTUvFH.js} +2 -2
- package/dist/chunks/{appbar-rqqjZ99v.js.map → appbar-DzkTUvFH.js.map} +1 -1
- package/dist/chunks/{appbar-BRbO--as.esm.js → appbar-NK7cEVYo.esm.js} +2 -2
- package/dist/chunks/{appbar-BRbO--as.esm.js.map → appbar-NK7cEVYo.esm.js.map} +1 -1
- package/dist/chunks/{approval-wrapper-BTtmXMlk.esm.js → approval-wrapper-Dkc8WEg5.esm.js} +2 -2
- package/dist/chunks/{approval-wrapper-BTtmXMlk.esm.js.map → approval-wrapper-Dkc8WEg5.esm.js.map} +1 -1
- package/dist/chunks/{approval-wrapper-BM5NxbtT.js → approval-wrapper-Nh3CVait.js} +2 -2
- package/dist/chunks/{approval-wrapper-BM5NxbtT.js.map → approval-wrapper-Nh3CVait.js.map} +1 -1
- package/dist/chunks/{chat-bot-BpNtrZEL.esm.js → chat-bot-3MwduUlf.esm.js} +245 -68
- package/dist/chunks/chat-bot-3MwduUlf.esm.js.map +1 -0
- package/dist/chunks/{chat-bot-osiGMG3g.js → chat-bot-sjkDRlr3.js} +244 -67
- package/dist/chunks/chat-bot-sjkDRlr3.js.map +1 -0
- package/dist/chunks/{common-utility-DGpbsf7S.esm.js → common-utility-GjUrjpEf.esm.js} +2 -2
- package/dist/chunks/{common-utility-DGpbsf7S.esm.js.map → common-utility-GjUrjpEf.esm.js.map} +1 -1
- package/dist/chunks/{common-utility-CA_Upser.js → common-utility-TLpddkaa.js} +2 -2
- package/dist/chunks/{common-utility-CA_Upser.js.map → common-utility-TLpddkaa.js.map} +1 -1
- package/dist/chunks/{custom-editor-6-xqhKz6.esm.js → custom-editor-BjUUIs4F.esm.js} +2 -2
- package/dist/chunks/{custom-editor-6-xqhKz6.esm.js.map → custom-editor-BjUUIs4F.esm.js.map} +1 -1
- package/dist/chunks/{custom-editor-BeLYFfpv.js → custom-editor-ByC55Z4G.js} +2 -2
- package/dist/chunks/{custom-editor-BeLYFfpv.js.map → custom-editor-ByC55Z4G.js.map} +1 -1
- package/dist/chunks/{custom-form-CFU7NEVb.js → custom-form-DEzUMeYP.js} +6 -6
- package/dist/chunks/{custom-form-CFU7NEVb.js.map → custom-form-DEzUMeYP.js.map} +1 -1
- package/dist/chunks/{custom-form-DD7YOHMF.esm.js → custom-form-RvoE2OQr.esm.js} +6 -6
- package/dist/chunks/{custom-form-DD7YOHMF.esm.js.map → custom-form-RvoE2OQr.esm.js.map} +1 -1
- package/dist/chunks/{dashboard-DL83yYRR.esm.js → dashboard-C-HlBEpm.esm.js} +3 -3
- package/dist/chunks/{dashboard-DL83yYRR.esm.js.map → dashboard-C-HlBEpm.esm.js.map} +1 -1
- package/dist/chunks/{dashboard-BcWVkWZt.js → dashboard-CSms9RGu.js} +3 -3
- package/dist/chunks/{dashboard-BcWVkWZt.js.map → dashboard-CSms9RGu.js.map} +1 -1
- package/dist/chunks/{dynamic-report-Z7TQNhUq.js → dynamic-report-2BfQqTlE.js} +4 -4
- package/dist/chunks/{dynamic-report-Z7TQNhUq.js.map → dynamic-report-2BfQqTlE.js.map} +1 -1
- package/dist/chunks/{dynamic-report-tKn-KqAd.esm.js → dynamic-report-6NS0z5pW.esm.js} +4 -4
- package/dist/chunks/{dynamic-report-tKn-KqAd.esm.js.map → dynamic-report-6NS0z5pW.esm.js.map} +1 -1
- package/dist/chunks/{dynamic-rows-CTGETfcP.esm.js → dynamic-rows-CZ1dmLX-.esm.js} +2 -2
- package/dist/chunks/{dynamic-rows-CTGETfcP.esm.js.map → dynamic-rows-CZ1dmLX-.esm.js.map} +1 -1
- package/dist/chunks/{dynamic-rows-CNd_zBwf.js → dynamic-rows-DXy4dtIP.js} +2 -2
- package/dist/chunks/{dynamic-rows-CNd_zBwf.js.map → dynamic-rows-DXy4dtIP.js.map} +1 -1
- package/dist/chunks/{dynamic-text-editor-BBIYTdKZ.js → dynamic-text-editor-BsS7d6iX.js} +2 -2
- package/dist/chunks/{dynamic-text-editor-BBIYTdKZ.js.map → dynamic-text-editor-BsS7d6iX.js.map} +1 -1
- package/dist/chunks/{dynamic-text-editor-CPvlGcLK.esm.js → dynamic-text-editor-CLrhRiKM.esm.js} +2 -2
- package/dist/chunks/{dynamic-text-editor-CPvlGcLK.esm.js.map → dynamic-text-editor-CLrhRiKM.esm.js.map} +1 -1
- package/dist/chunks/{edit-section-modal-BW-aZmUv.esm.js → edit-section-modal-BVH6gzyy.esm.js} +2 -2
- package/dist/chunks/{edit-section-modal-BW-aZmUv.esm.js.map → edit-section-modal-BVH6gzyy.esm.js.map} +1 -1
- package/dist/chunks/{edit-section-modal-Br2ITvLk.js → edit-section-modal-CB6-TNxs.js} +2 -2
- package/dist/chunks/{edit-section-modal-Br2ITvLk.js.map → edit-section-modal-CB6-TNxs.js.map} +1 -1
- package/dist/chunks/{filter-Cr_OSIpb.js → filter-Chgp8Ga-.js} +3 -3
- package/dist/chunks/{filter-Cr_OSIpb.js.map → filter-Chgp8Ga-.js.map} +1 -1
- package/dist/chunks/{filter-COXKBEER.esm.js → filter-DgzeYnXU.esm.js} +3 -3
- package/dist/chunks/{filter-COXKBEER.esm.js.map → filter-DgzeYnXU.esm.js.map} +1 -1
- package/dist/chunks/{footer-CD3kMRdS.js → footer-CTDZ2Qkg.js} +2 -2
- package/dist/chunks/{footer-CD3kMRdS.js.map → footer-CTDZ2Qkg.js.map} +1 -1
- package/dist/chunks/{footer-m3_dlNl8.esm.js → footer-Db5CEUun.esm.js} +2 -2
- package/dist/chunks/{footer-m3_dlNl8.esm.js.map → footer-Db5CEUun.esm.js.map} +1 -1
- package/dist/chunks/{form-fields-yE9kwjvb.js → form-fields-BrEECDh1.js} +2 -2
- package/dist/chunks/{form-fields-yE9kwjvb.js.map → form-fields-BrEECDh1.js.map} +1 -1
- package/dist/chunks/{form-fields-hMMnB_wE.esm.js → form-fields-CpOWIV5e.esm.js} +2 -2
- package/dist/chunks/{form-fields-hMMnB_wE.esm.js.map → form-fields-CpOWIV5e.esm.js.map} +1 -1
- package/dist/chunks/{form-parser-DbnSn5eY.esm.js → form-parser-BOBQohRY.esm.js} +2 -2
- package/dist/chunks/{form-parser-DbnSn5eY.esm.js.map → form-parser-BOBQohRY.esm.js.map} +1 -1
- package/dist/chunks/{form-parser-m4fnw38a.js → form-parser-Bo_xCoz5.js} +2 -2
- package/dist/chunks/{form-parser-m4fnw38a.js.map → form-parser-Bo_xCoz5.js.map} +1 -1
- package/dist/chunks/{form-section-CPIyMdk2.js → form-section-CQkrOcT4.js} +5 -5
- package/dist/chunks/{form-section-CPIyMdk2.js.map → form-section-CQkrOcT4.js.map} +1 -1
- package/dist/chunks/{form-section-TMjdOVeW.esm.js → form-section-CuA5Rmec.esm.js} +5 -5
- package/dist/chunks/{form-section-TMjdOVeW.esm.js.map → form-section-CuA5Rmec.esm.js.map} +1 -1
- package/dist/chunks/{fullScreen-BLLa9ogA.js → fullScreen-CKsAPzW8.js} +3 -3
- package/dist/chunks/{fullScreen-BLLa9ogA.js.map → fullScreen-CKsAPzW8.js.map} +1 -1
- package/dist/chunks/{fullScreen-DFgzE41_.esm.js → fullScreen-Dq0rkDY2.esm.js} +3 -3
- package/dist/chunks/{fullScreen-DFgzE41_.esm.js.map → fullScreen-Dq0rkDY2.esm.js.map} +1 -1
- package/dist/chunks/{global-search-BOkxXiZ0.esm.js → global-search-CzTd58hv.esm.js} +3 -3
- package/dist/chunks/{global-search-BOkxXiZ0.esm.js.map → global-search-CzTd58hv.esm.js.map} +1 -1
- package/dist/chunks/{global-search-BjKPmzsQ.js → global-search-mE46QvyY.js} +3 -3
- package/dist/chunks/{global-search-BjKPmzsQ.js.map → global-search-mE46QvyY.js.map} +1 -1
- package/dist/chunks/{grid-view-Bo86x7YL.esm.js → grid-view-Ccl3P7WG.esm.js} +2 -2
- package/dist/chunks/{grid-view-Bo86x7YL.esm.js.map → grid-view-Ccl3P7WG.esm.js.map} +1 -1
- package/dist/chunks/{grid-view-B1u_x5yr.js → grid-view-CcmdZI39.js} +2 -2
- package/dist/chunks/{grid-view-B1u_x5yr.js.map → grid-view-CcmdZI39.js.map} +1 -1
- package/dist/chunks/{header-BHsex2As.js → header-BLQberkS.js} +3 -3
- package/dist/chunks/{header-BHsex2As.js.map → header-BLQberkS.js.map} +1 -1
- package/dist/chunks/{header-B-HaoeK7.esm.js → header-DJXi29Ed.esm.js} +3 -3
- package/dist/chunks/{header-B-HaoeK7.esm.js.map → header-DJXi29Ed.esm.js.map} +1 -1
- package/dist/chunks/{header-enhanced-BjfqyQ1a.esm.js → header-enhanced-BXn_RBUl.esm.js} +2 -2
- package/dist/chunks/{header-enhanced-BjfqyQ1a.esm.js.map → header-enhanced-BXn_RBUl.esm.js.map} +1 -1
- package/dist/chunks/{header-enhanced-gJl4iC4m.js → header-enhanced-GQeFu_BL.js} +2 -2
- package/dist/chunks/{header-enhanced-gJl4iC4m.js.map → header-enhanced-GQeFu_BL.js.map} +1 -1
- package/dist/chunks/{inline-edit-fields-BYhRpPcH.esm.js → inline-edit-fields-D68s-Ll-.esm.js} +2 -2
- package/dist/chunks/{inline-edit-fields-BYhRpPcH.esm.js.map → inline-edit-fields-D68s-Ll-.esm.js.map} +1 -1
- package/dist/chunks/{inline-edit-fields-atDP84QL.js → inline-edit-fields-vGyiNTyf.js} +2 -2
- package/dist/chunks/{inline-edit-fields-atDP84QL.js.map → inline-edit-fields-vGyiNTyf.js.map} +1 -1
- package/dist/chunks/{inventory-reports-title-bar-Bog2i0dr.js → inventory-reports-title-bar-CT7SIGlT.js} +3 -3
- package/dist/chunks/{inventory-reports-title-bar-Bog2i0dr.js.map → inventory-reports-title-bar-CT7SIGlT.js.map} +1 -1
- package/dist/chunks/{inventory-reports-title-bar-CP8FzW6A.esm.js → inventory-reports-title-bar-Ddh26t2X.esm.js} +3 -3
- package/dist/chunks/{inventory-reports-title-bar-CP8FzW6A.esm.js.map → inventory-reports-title-bar-Ddh26t2X.esm.js.map} +1 -1
- package/dist/chunks/{item-response-details-DsGQ7Dlc.js → item-response-details-BGtHtJ76.js} +4 -4
- package/dist/chunks/{item-response-details-DsGQ7Dlc.js.map → item-response-details-BGtHtJ76.js.map} +1 -1
- package/dist/chunks/{item-response-details-SHSD-nBh.esm.js → item-response-details-DSCdVRmu.esm.js} +4 -4
- package/dist/chunks/{item-response-details-SHSD-nBh.esm.js.map → item-response-details-DSCdVRmu.esm.js.map} +1 -1
- package/dist/chunks/{listing-DIuzQrzb.js → listing-CTIuYwFQ.js} +4 -4
- package/dist/chunks/{listing-DIuzQrzb.js.map → listing-CTIuYwFQ.js.map} +1 -1
- package/dist/chunks/{listing-C0Yb6MVq.esm.js → listing-Dy2Rksst.esm.js} +4 -4
- package/dist/chunks/{listing-C0Yb6MVq.esm.js.map → listing-Dy2Rksst.esm.js.map} +1 -1
- package/dist/chunks/{location-select-g5uczAUF.js → location-select-Dij5uwHV.js} +2 -2
- package/dist/chunks/{location-select-g5uczAUF.js.map → location-select-Dij5uwHV.js.map} +1 -1
- package/dist/chunks/{location-select-CFa00fy4.esm.js → location-select-N7YryMzR.esm.js} +2 -2
- package/dist/chunks/{location-select-CFa00fy4.esm.js.map → location-select-N7YryMzR.esm.js.map} +1 -1
- package/dist/chunks/{material-editable-table-pAyK7KYf.esm.js → material-editable-table-DH-mHUyW.esm.js} +3 -3
- package/dist/chunks/{material-editable-table-pAyK7KYf.esm.js.map → material-editable-table-DH-mHUyW.esm.js.map} +1 -1
- package/dist/chunks/{material-editable-table-BGLjrTzT.js → material-editable-table-flZ7dwOO.js} +3 -3
- package/dist/chunks/{material-editable-table-BGLjrTzT.js.map → material-editable-table-flZ7dwOO.js.map} +1 -1
- package/dist/chunks/{module-reducer-DMxxForv.esm.js → module-reducer-BOqAXAJs.esm.js} +2 -2
- package/dist/chunks/{module-reducer-DMxxForv.esm.js.map → module-reducer-BOqAXAJs.esm.js.map} +1 -1
- package/dist/chunks/{module-reducer-Ck36ZEmZ.js → module-reducer-khxO3m2l.js} +2 -2
- package/dist/chunks/{module-reducer-Ck36ZEmZ.js.map → module-reducer-khxO3m2l.js.map} +1 -1
- package/dist/chunks/{notification-menu-D7ASm-K1.js → notification-menu-DhXt9aJ6.js} +2 -2
- package/dist/chunks/{notification-menu-D7ASm-K1.js.map → notification-menu-DhXt9aJ6.js.map} +1 -1
- package/dist/chunks/{notification-menu-XAadkn-e.esm.js → notification-menu-INKsWdja.esm.js} +2 -2
- package/dist/chunks/{notification-menu-XAadkn-e.esm.js.map → notification-menu-INKsWdja.esm.js.map} +1 -1
- package/dist/chunks/{page-action-BPzaL2KJ.js → page-action-8XNeWxvS.js} +4 -4
- package/dist/chunks/{page-action-BPzaL2KJ.js.map → page-action-8XNeWxvS.js.map} +1 -1
- package/dist/chunks/{page-action-C07iGjvN.esm.js → page-action-BhSpPGBy.esm.js} +4 -4
- package/dist/chunks/{page-action-C07iGjvN.esm.js.map → page-action-BhSpPGBy.esm.js.map} +1 -1
- package/dist/chunks/{page-navigator-Cgbh3tTG.js → page-navigator-DSmNN1Eb.js} +2 -2
- package/dist/chunks/{page-navigator-Cgbh3tTG.js.map → page-navigator-DSmNN1Eb.js.map} +1 -1
- package/dist/chunks/{page-navigator-8gZpp9_P.esm.js → page-navigator-DjG5btI1.esm.js} +2 -2
- package/dist/chunks/{page-navigator-8gZpp9_P.esm.js.map → page-navigator-DjG5btI1.esm.js.map} +1 -1
- package/dist/chunks/{page-view-DJ6HS_dV.js → page-view-Dbf_t78X.js} +3 -3
- package/dist/chunks/{page-view-DJ6HS_dV.js.map → page-view-Dbf_t78X.js.map} +1 -1
- package/dist/chunks/{page-view-CokUNMBn.esm.js → page-view-DknSUnFR.esm.js} +3 -3
- package/dist/chunks/{page-view-CokUNMBn.esm.js.map → page-view-DknSUnFR.esm.js.map} +1 -1
- package/dist/chunks/{quick-approval-modal-BwYjIbO5.js → quick-approval-modal-BQcjEC5r.js} +2 -2
- package/dist/chunks/{quick-approval-modal-BwYjIbO5.js.map → quick-approval-modal-BQcjEC5r.js.map} +1 -1
- package/dist/chunks/{quick-approval-modal-CPWs8htH.esm.js → quick-approval-modal-DcZGFHAN.esm.js} +2 -2
- package/dist/chunks/{quick-approval-modal-CPWs8htH.esm.js.map → quick-approval-modal-DcZGFHAN.esm.js.map} +1 -1
- package/dist/chunks/{reducer-IsgN83rP.esm.js → reducer-C3tNAbZa.esm.js} +2 -2
- package/dist/chunks/{reducer-IsgN83rP.esm.js.map → reducer-C3tNAbZa.esm.js.map} +1 -1
- package/dist/chunks/{reducer-CdJ6znKF.esm.js → reducer-CACnVYCu.esm.js} +2 -2
- package/dist/chunks/{reducer-CdJ6znKF.esm.js.map → reducer-CACnVYCu.esm.js.map} +1 -1
- package/dist/chunks/{reducer-Qab0amzE.js → reducer-Ca4A9Z08.js} +3 -3
- package/dist/chunks/{reducer-Qab0amzE.js.map → reducer-Ca4A9Z08.js.map} +1 -1
- package/dist/chunks/{reducer-BRD8W9sK.js → reducer-CqXx-nCW.js} +2 -2
- package/dist/chunks/{reducer-BRD8W9sK.js.map → reducer-CqXx-nCW.js.map} +1 -1
- package/dist/chunks/{reducer-3tSO6RW6.esm.js → reducer-D5uYbcnW.esm.js} +3 -3
- package/dist/chunks/{reducer-3tSO6RW6.esm.js.map → reducer-D5uYbcnW.esm.js.map} +1 -1
- package/dist/chunks/{reducer-CpOEECi1.js → reducer-D9YsCrPV.js} +2 -2
- package/dist/chunks/{reducer-CpOEECi1.js.map → reducer-D9YsCrPV.js.map} +1 -1
- package/dist/chunks/{reducer-sgaK2vfW.esm.js → reducer-DgqigQMj.esm.js} +2 -2
- package/dist/chunks/{reducer-sgaK2vfW.esm.js.map → reducer-DgqigQMj.esm.js.map} +1 -1
- package/dist/chunks/{reducer-CPisqqqN.js → reducer-LZj3gYJv.js} +2 -2
- package/dist/chunks/{reducer-CPisqqqN.js.map → reducer-LZj3gYJv.js.map} +1 -1
- package/dist/chunks/{reducer-yyZtsg1A.esm.js → reducer-TleDUmAC.esm.js} +2 -2
- package/dist/chunks/{reducer-yyZtsg1A.esm.js.map → reducer-TleDUmAC.esm.js.map} +1 -1
- package/dist/chunks/{reducer-Bmr6fvcs.js → reducer-zvGfUKoI.js} +2 -2
- package/dist/chunks/{reducer-Bmr6fvcs.js.map → reducer-zvGfUKoI.js.map} +1 -1
- package/dist/chunks/{reports-title-bar-Kz6JjqsY.js → reports-title-bar-D-1LT4fp.js} +4 -4
- package/dist/chunks/{reports-title-bar-Kz6JjqsY.js.map → reports-title-bar-D-1LT4fp.js.map} +1 -1
- package/dist/chunks/{reports-title-bar-Cay4E8SQ.esm.js → reports-title-bar-QUF0UaA5.esm.js} +4 -4
- package/dist/chunks/{reports-title-bar-Cay4E8SQ.esm.js.map → reports-title-bar-QUF0UaA5.esm.js.map} +1 -1
- package/dist/chunks/{routes-CfqLAYgR.js → routes--Iz18uA1.js} +3 -3
- package/dist/chunks/{routes-CfqLAYgR.js.map → routes--Iz18uA1.js.map} +1 -1
- package/dist/chunks/{routes-CAc76Zan.esm.js → routes-JUv69qeO.esm.js} +3 -3
- package/dist/chunks/{routes-CAc76Zan.esm.js.map → routes-JUv69qeO.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-B4ZfEuiU.js → schedule-report-Br9G5M-o.js} +6 -6
- package/dist/chunks/{schedule-report-B4ZfEuiU.js.map → schedule-report-Br9G5M-o.js.map} +1 -1
- package/dist/chunks/{schedule-report-CLXjjfjc.esm.js → schedule-report-Ce2EEmZX.esm.js} +6 -6
- package/dist/chunks/{schedule-report-CLXjjfjc.esm.js.map → schedule-report-Ce2EEmZX.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-modal-CB3G9H7x.esm.js → schedule-report-modal-C5CAD-AQ.esm.js} +3 -3
- package/dist/chunks/{schedule-report-modal-CB3G9H7x.esm.js.map → schedule-report-modal-C5CAD-AQ.esm.js.map} +1 -1
- package/dist/chunks/{schedule-report-modal-iwoDI-sg.js → schedule-report-modal-CraO2R9I.js} +3 -3
- package/dist/chunks/{schedule-report-modal-iwoDI-sg.js.map → schedule-report-modal-CraO2R9I.js.map} +1 -1
- package/dist/chunks/{searchable-select-_DCkITfk.js → searchable-select-BdR8A-uG.js} +6 -6
- package/dist/chunks/{searchable-select-_DCkITfk.js.map → searchable-select-BdR8A-uG.js.map} +1 -1
- package/dist/chunks/{searchable-select-0F6E4XAr.esm.js → searchable-select-DSxOplyJ.esm.js} +6 -6
- package/dist/chunks/{searchable-select-0F6E4XAr.esm.js.map → searchable-select-DSxOplyJ.esm.js.map} +1 -1
- package/dist/chunks/{share-modal-BaEyZs2h.esm.js → share-modal-0Xrxwpxh.esm.js} +3 -3
- package/dist/chunks/{share-modal-BaEyZs2h.esm.js.map → share-modal-0Xrxwpxh.esm.js.map} +1 -1
- package/dist/chunks/{share-modal-DrXvh-fV.js → share-modal-CP_CC8wR.js} +3 -3
- package/dist/chunks/{share-modal-DrXvh-fV.js.map → share-modal-CP_CC8wR.js.map} +1 -1
- package/dist/chunks/{share-modal-enhanced-DnEdDBmu.esm.js → share-modal-enhanced-BFmwba0h.esm.js} +2 -2
- package/dist/chunks/{share-modal-enhanced-DnEdDBmu.esm.js.map → share-modal-enhanced-BFmwba0h.esm.js.map} +1 -1
- package/dist/chunks/{share-modal-enhanced-BTr0zRhF.js → share-modal-enhanced-BajRayrK.js} +2 -2
- package/dist/chunks/{share-modal-enhanced-BTr0zRhF.js.map → share-modal-enhanced-BajRayrK.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-DpYj_wlK.js → sidebarScreen-CaNfS0JJ.js} +5 -5
- package/dist/chunks/{sidebarScreen-DpYj_wlK.js.map → sidebarScreen-CaNfS0JJ.js.map} +1 -1
- package/dist/chunks/{sidebarScreen-DiOAiXeU.esm.js → sidebarScreen-CmnTAXY7.esm.js} +5 -5
- package/dist/chunks/{sidebarScreen-DiOAiXeU.esm.js.map → sidebarScreen-CmnTAXY7.esm.js.map} +1 -1
- package/dist/chunks/{store-BSJc1kCM.js → store-CqIuLzOS.js} +6 -6
- package/dist/chunks/{store-BSJc1kCM.js.map → store-CqIuLzOS.js.map} +1 -1
- package/dist/chunks/{store-BL5VFPie.esm.js → store-DH8pCqim.esm.js} +6 -6
- package/dist/chunks/{store-BL5VFPie.esm.js.map → store-DH8pCqim.esm.js.map} +1 -1
- package/dist/chunks/{table-gxAlAeTq.esm.js → table-ClKu8f94.esm.js} +3 -3
- package/dist/chunks/{table-gxAlAeTq.esm.js.map → table-ClKu8f94.esm.js.map} +1 -1
- package/dist/chunks/{table-DWx7x8zw.js → table-DgWNw_5R.js} +3 -3
- package/dist/chunks/{table-DWx7x8zw.js.map → table-DgWNw_5R.js.map} +1 -1
- package/dist/chunks/{table-form-DsTwCUcs.esm.js → table-form-BonoJoe4.esm.js} +2 -2
- package/dist/chunks/{table-form-DsTwCUcs.esm.js.map → table-form-BonoJoe4.esm.js.map} +1 -1
- package/dist/chunks/{table-form-DQ-pp0A_.js → table-form-DlMHRtLK.js} +2 -2
- package/dist/chunks/{table-form-DQ-pp0A_.js.map → table-form-DlMHRtLK.js.map} +1 -1
- package/dist/chunks/{template-editor-router-D4NIwVws.js → template-editor-router-BsD0ydNM.js} +2 -2
- package/dist/chunks/{template-editor-router-D4NIwVws.js.map → template-editor-router-BsD0ydNM.js.map} +1 -1
- package/dist/chunks/{template-editor-router-BXLUTvsk.esm.js → template-editor-router-DoOt_Usq.esm.js} +2 -2
- package/dist/chunks/{template-editor-router-BXLUTvsk.esm.js.map → template-editor-router-DoOt_Usq.esm.js.map} +1 -1
- package/dist/chunks/{template-modal-X-iSmlki.js → template-modal-BXZblB-i.js} +2 -2
- package/dist/chunks/{template-modal-X-iSmlki.js.map → template-modal-BXZblB-i.js.map} +1 -1
- package/dist/chunks/{template-modal-B2VgotrF.esm.js → template-modal-Cyj0AUks.esm.js} +2 -2
- package/dist/chunks/{template-modal-B2VgotrF.esm.js.map → template-modal-Cyj0AUks.esm.js.map} +1 -1
- package/dist/chunks/{templates-CCy1eG6A.esm.js → templates-BK_pcPtR.esm.js} +7 -7
- package/dist/chunks/{templates-CCy1eG6A.esm.js.map → templates-BK_pcPtR.esm.js.map} +1 -1
- package/dist/chunks/{templates-CUREMwYo.js → templates-C5whh_WJ.js} +7 -7
- package/dist/chunks/{templates-CUREMwYo.js.map → templates-C5whh_WJ.js.map} +1 -1
- package/dist/chunks/{text-measurement-BRaY2UMX.js → text-measurement-C5RUDcy3.js} +2 -2
- package/dist/chunks/{text-measurement-BRaY2UMX.js.map → text-measurement-C5RUDcy3.js.map} +1 -1
- package/dist/chunks/{text-measurement-BCjauPbB.esm.js → text-measurement-DvKHzZhR.esm.js} +2 -2
- package/dist/chunks/{text-measurement-BCjauPbB.esm.js.map → text-measurement-DvKHzZhR.esm.js.map} +1 -1
- package/dist/chunks/{translations-BrwQcVN3.esm.js → translations-BLrQX9my.esm.js} +2 -2
- package/dist/chunks/{translations-BrwQcVN3.esm.js.map → translations-BLrQX9my.esm.js.map} +1 -1
- package/dist/chunks/{translations-DoVrWLog.js → translations-CaEkNqOX.js} +2 -2
- package/dist/chunks/{translations-DoVrWLog.js.map → translations-CaEkNqOX.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-CTbEc-MB.esm.js → uom-field-wrapper-By-UFGEf.esm.js} +2 -2
- package/dist/chunks/{uom-field-wrapper-CTbEc-MB.esm.js.map → uom-field-wrapper-By-UFGEf.esm.js.map} +1 -1
- package/dist/chunks/{uom-field-wrapper-DXZgzOYB.js → uom-field-wrapper-CPbf2ESo.js} +2 -2
- package/dist/chunks/{uom-field-wrapper-DXZgzOYB.js.map → uom-field-wrapper-CPbf2ESo.js.map} +1 -1
- package/dist/chunks/{upload-excel-BZPP13tP.esm.js → upload-excel-Bv2QulNF.esm.js} +2 -2
- package/dist/chunks/{upload-excel-BZPP13tP.esm.js.map → upload-excel-Bv2QulNF.esm.js.map} +1 -1
- package/dist/chunks/{upload-excel-rzyINtLp.js → upload-excel-Dki_3fi7.js} +2 -2
- package/dist/chunks/{upload-excel-rzyINtLp.js.map → upload-excel-Dki_3fi7.js.map} +1 -1
- package/dist/chunks/{use-translations-5wUQBxMm.js → use-translations-CiaeAhQ7.js} +2 -2
- package/dist/chunks/{use-translations-5wUQBxMm.js.map → use-translations-CiaeAhQ7.js.map} +1 -1
- package/dist/chunks/{use-translations-CcjSFA3F.esm.js → use-translations-Cplg_xvQ.esm.js} +2 -2
- package/dist/chunks/{use-translations-CcjSFA3F.esm.js.map → use-translations-Cplg_xvQ.esm.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-vAqgEiJB.esm.js → useAccountSetting-D2zH-h5F.esm.js} +3 -3
- package/dist/chunks/{useAccountSetting-vAqgEiJB.esm.js.map → useAccountSetting-D2zH-h5F.esm.js.map} +1 -1
- package/dist/chunks/{useAccountSetting-9XBALMnW.js → useAccountSetting-Dvyv7WUv.js} +3 -3
- package/dist/chunks/{useAccountSetting-9XBALMnW.js.map → useAccountSetting-Dvyv7WUv.js.map} +1 -1
- package/dist/chunks/{useCheckSkuAndName-CqSLFlhD.js → useCheckSkuAndName-3SCc5HGN.js} +2 -2
- package/dist/chunks/{useCheckSkuAndName-CqSLFlhD.js.map → useCheckSkuAndName-3SCc5HGN.js.map} +1 -1
- package/dist/chunks/{useCheckSkuAndName-Dl24wQO-.esm.js → useCheckSkuAndName-BuHzZ_fJ.esm.js} +2 -2
- package/dist/chunks/{useCheckSkuAndName-Dl24wQO-.esm.js.map → useCheckSkuAndName-BuHzZ_fJ.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-DZBfKF7d.esm.js → useReduxIntegration-B0bZ0VOc.esm.js} +2 -2
- package/dist/chunks/{useReduxIntegration-DZBfKF7d.esm.js.map → useReduxIntegration-B0bZ0VOc.esm.js.map} +1 -1
- package/dist/chunks/{useReduxIntegration-Ct1UN9fB.js → useReduxIntegration-GG8n-C3E.js} +2 -2
- package/dist/chunks/{useReduxIntegration-Ct1UN9fB.js.map → useReduxIntegration-GG8n-C3E.js.map} +1 -1
- package/dist/chunks/{useUniquenessCheck-bYjnp_0P.esm.js → useUniquenessCheck-B_KNcS14.esm.js} +2 -2
- package/dist/chunks/{useUniquenessCheck-bYjnp_0P.esm.js.map → useUniquenessCheck-B_KNcS14.esm.js.map} +1 -1
- package/dist/chunks/{useUniquenessCheck-By5zlovX.js → useUniquenessCheck-SyibUppM.js} +2 -2
- package/dist/chunks/{useUniquenessCheck-By5zlovX.js.map → useUniquenessCheck-SyibUppM.js.map} +1 -1
- package/dist/chunks/{useVendorAICompare-BAkWpJbe.js → useVendorAICompare-Br8Zaj9n.js} +3 -3
- package/dist/chunks/{useVendorAICompare-BAkWpJbe.js.map → useVendorAICompare-Br8Zaj9n.js.map} +1 -1
- package/dist/chunks/{useVendorAICompare-DZRFDk4i.esm.js → useVendorAICompare-MAhIaPcK.esm.js} +3 -3
- package/dist/chunks/{useVendorAICompare-DZRFDk4i.esm.js.map → useVendorAICompare-MAhIaPcK.esm.js.map} +1 -1
- package/dist/chunks/{value-editor-BSS9Ns2T.js → value-editor-CjBbeBcy.js} +3 -3
- package/dist/chunks/{value-editor-BSS9Ns2T.js.map → value-editor-CjBbeBcy.js.map} +1 -1
- package/dist/chunks/{value-editor-DQ1qgZ2u.esm.js → value-editor-Du1_lUxK.esm.js} +3 -3
- package/dist/chunks/{value-editor-DQ1qgZ2u.esm.js.map → value-editor-Du1_lUxK.esm.js.map} +1 -1
- package/dist/chunks/{vendor-ai-summary-DWmAaQ_N.js → vendor-ai-summary-ChCg_E_J.js} +2 -2
- package/dist/chunks/{vendor-ai-summary-DWmAaQ_N.js.map → vendor-ai-summary-ChCg_E_J.js.map} +1 -1
- package/dist/chunks/{vendor-ai-summary-BA6m2dH9.esm.js → vendor-ai-summary-DICDiSMd.esm.js} +2 -2
- package/dist/chunks/{vendor-ai-summary-BA6m2dH9.esm.js.map → vendor-ai-summary-DICDiSMd.esm.js.map} +1 -1
- package/dist/components/action-bar/action-bar/index.esm.js +1 -1
- package/dist/components/action-bar/action-bar/index.js +1 -1
- package/dist/components/action-bar/index.esm.js +1 -1
- package/dist/components/action-bar/index.js +1 -1
- package/dist/components/address-modal/index.esm.js +1 -1
- package/dist/components/address-modal/index.js +1 -1
- package/dist/components/ai-summary/ai-summary/index.esm.js +1 -1
- package/dist/components/ai-summary/ai-summary/index.js +1 -1
- package/dist/components/ai-summary/index.esm.js +1 -1
- package/dist/components/ai-summary/index.js +1 -1
- package/dist/components/appbar/appbar/index.esm.js +1 -1
- package/dist/components/appbar/appbar/index.js +1 -1
- package/dist/components/appbar/index.esm.js +1 -1
- package/dist/components/appbar/index.js +1 -1
- package/dist/components/approval-wrapper/approval-wrapper/index.esm.js +1 -1
- package/dist/components/approval-wrapper/approval-wrapper/index.js +1 -1
- package/dist/components/approval-wrapper/index.esm.js +1 -1
- package/dist/components/approval-wrapper/index.js +1 -1
- package/dist/components/chat-bot/index.esm.js +1 -1
- package/dist/components/chat-bot/index.js +1 -1
- package/dist/components/custom-forms/FORMS/index.esm.js +1 -1
- package/dist/components/custom-forms/FORMS/index.js +1 -1
- package/dist/components/custom-forms/grid-view/grid-view/index.esm.js +1 -1
- package/dist/components/custom-forms/grid-view/grid-view/index.js +1 -1
- package/dist/components/custom-forms/grid-view/index.esm.js +1 -1
- package/dist/components/custom-forms/grid-view/index.js +1 -1
- package/dist/components/custom-forms/index.esm.js +2 -2
- package/dist/components/custom-forms/index.js +2 -2
- package/dist/components/department-add-modal/index.esm.js +1 -1
- package/dist/components/department-add-modal/index.js +1 -1
- package/dist/components/designation-add-modal/index.esm.js +1 -1
- package/dist/components/designation-add-modal/index.js +1 -1
- package/dist/components/editor/custom-editor/index.esm.js +1 -1
- package/dist/components/editor/custom-editor/index.js +1 -1
- package/dist/components/editor/index.esm.js +1 -1
- package/dist/components/editor/index.js +1 -1
- package/dist/components/examples/FlexibleReduxExample/index.esm.js +1 -1
- package/dist/components/examples/FlexibleReduxExample/index.js +1 -1
- package/dist/components/examples/index.esm.js +1 -1
- package/dist/components/examples/index.js +1 -1
- package/dist/components/filter/components/index.esm.js +1 -1
- package/dist/components/filter/components/index.js +1 -1
- package/dist/components/filter/components/value-editor/index.esm.js +1 -1
- package/dist/components/filter/components/value-editor/index.js +1 -1
- package/dist/components/filter/filter/index.esm.js +1 -1
- package/dist/components/filter/filter/index.js +1 -1
- package/dist/components/filter/index.esm.js +2 -2
- package/dist/components/filter/index.js +2 -2
- package/dist/components/footer/footer/index.esm.js +1 -1
- package/dist/components/footer/footer/index.js +1 -1
- package/dist/components/footer/index.esm.js +1 -1
- package/dist/components/footer/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-text-editor/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/dynamic-text-editor/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/index.esm.js +4 -4
- package/dist/components/form-control/form-builder/form-builder-element/index.js +4 -4
- package/dist/components/form-control/form-builder/form-builder-element/location-add-modal/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/location-add-modal/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/select-configuration/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/select-configuration/index.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/table/index.esm.js +1 -1
- package/dist/components/form-control/form-builder/form-builder-element/table/index.js +1 -1
- package/dist/components/form-control/form-builder/index.esm.js +4 -4
- package/dist/components/form-control/form-builder/index.js +4 -4
- package/dist/components/form-control/form-parser/form-parser/index.esm.js +1 -1
- package/dist/components/form-control/form-parser/form-parser/index.js +1 -1
- package/dist/components/form-control/form-parser/form-section/index.esm.js +1 -1
- package/dist/components/form-control/form-parser/form-section/index.js +1 -1
- package/dist/components/form-control/form-parser/index.esm.js +2 -2
- package/dist/components/form-control/form-parser/index.js +2 -2
- package/dist/components/form-control/index.esm.js +6 -6
- package/dist/components/form-control/index.js +6 -6
- package/dist/components/header/components/global-search/index.esm.js +1 -1
- package/dist/components/header/components/global-search/index.js +1 -1
- package/dist/components/header/components/index.esm.js +1 -1
- package/dist/components/header/components/index.js +1 -1
- package/dist/components/header/components/notification-menu/index.esm.js +1 -1
- package/dist/components/header/components/notification-menu/index.js +1 -1
- package/dist/components/header/components/notification-menu/notification-menu/index.esm.js +1 -1
- package/dist/components/header/components/notification-menu/notification-menu/index.js +1 -1
- package/dist/components/header/header/index.esm.js +1 -1
- package/dist/components/header/header/index.js +1 -1
- package/dist/components/header/header-enhanced/index.esm.js +1 -1
- package/dist/components/header/header-enhanced/index.js +1 -1
- package/dist/components/header/index.esm.js +5 -5
- package/dist/components/header/index.js +5 -5
- package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/header/redux/actionCreator/index.js +1 -1
- package/dist/components/header/redux/index.esm.js +2 -2
- package/dist/components/header/redux/index.js +2 -2
- package/dist/components/header/redux/reducer/index.esm.js +1 -1
- package/dist/components/header/redux/reducer/index.js +1 -1
- package/dist/components/index.esm.js +36 -36
- package/dist/components/index.js +36 -36
- package/dist/components/inventory-reports-title-bar/index.esm.js +3 -3
- package/dist/components/inventory-reports-title-bar/index.js +3 -3
- package/dist/components/inventory-reports-title-bar/inventory-reports-title-bar/index.esm.js +1 -1
- package/dist/components/inventory-reports-title-bar/inventory-reports-title-bar/index.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/index.esm.js +2 -2
- package/dist/components/inventory-reports-title-bar/redux/index.js +2 -2
- package/dist/components/inventory-reports-title-bar/redux/reducer/index.esm.js +1 -1
- package/dist/components/inventory-reports-title-bar/redux/reducer/index.js +1 -1
- package/dist/components/listing/index.esm.js +1 -1
- package/dist/components/listing/index.js +1 -1
- package/dist/components/listing/listing/index.esm.js +1 -1
- package/dist/components/listing/listing/index.js +1 -1
- package/dist/components/location-select/index.esm.js +1 -1
- package/dist/components/location-select/index.js +1 -1
- package/dist/components/material-editable-table/components/index.esm.js +1 -1
- package/dist/components/material-editable-table/components/index.js +1 -1
- package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js +1 -1
- package/dist/components/material-editable-table/components/inline-edit-fields/index.js +1 -1
- package/dist/components/material-editable-table/index.esm.js +2 -2
- package/dist/components/material-editable-table/index.js +2 -2
- package/dist/components/material-editable-table/material-editable-table/index.esm.js +1 -1
- package/dist/components/material-editable-table/material-editable-table/index.js +1 -1
- package/dist/components/material-table/components/index.esm.js +1 -1
- package/dist/components/material-table/components/index.js +1 -1
- package/dist/components/material-table/components/inline-edit-fields/index.esm.js +1 -1
- package/dist/components/material-table/components/inline-edit-fields/index.js +1 -1
- package/dist/components/material-table/index.esm.js +1 -1
- package/dist/components/material-table/index.js +1 -1
- package/dist/components/material-table/material-table/index.esm.js +1 -1
- package/dist/components/material-table/material-table/index.js +1 -1
- package/dist/components/page-navigator/components/index.esm.js +1 -1
- package/dist/components/page-navigator/components/index.js +1 -1
- package/dist/components/page-navigator/components/page-action/index.esm.js +1 -1
- package/dist/components/page-navigator/components/page-action/index.js +1 -1
- package/dist/components/page-navigator/index.esm.js +2 -2
- package/dist/components/page-navigator/index.js +2 -2
- package/dist/components/page-navigator/page-navigator/index.esm.js +1 -1
- package/dist/components/page-navigator/page-navigator/index.js +1 -1
- package/dist/components/parties-modal/index.esm.js +1 -1
- package/dist/components/parties-modal/index.js +1 -1
- package/dist/components/parties-modal/parties-modal/index.esm.js +1 -1
- package/dist/components/parties-modal/parties-modal/index.js +1 -1
- package/dist/components/providers/ERPUIProvider/index.esm.js +1 -1
- package/dist/components/providers/ERPUIProvider/index.js +1 -1
- package/dist/components/providers/index.esm.js +1 -1
- package/dist/components/providers/index.js +1 -1
- package/dist/components/quick-approval-modal/index.esm.js +1 -1
- package/dist/components/quick-approval-modal/index.js +1 -1
- package/dist/components/quick-approval-modal/quick-approval-modal/index.esm.js +1 -1
- package/dist/components/quick-approval-modal/quick-approval-modal/index.js +1 -1
- package/dist/components/reports/dynamic-report/dynamic-report/index.esm.js +1 -1
- package/dist/components/reports/dynamic-report/dynamic-report/index.js +1 -1
- package/dist/components/reports/dynamic-report/dynamic-rows/index.esm.js +1 -1
- package/dist/components/reports/dynamic-report/dynamic-rows/index.js +1 -1
- package/dist/components/reports/dynamic-report/index.esm.js +2 -2
- package/dist/components/reports/dynamic-report/index.js +2 -2
- package/dist/components/reports/index.esm.js +2 -2
- package/dist/components/reports/index.js +2 -2
- package/dist/components/reports-title-bar/index.esm.js +3 -3
- package/dist/components/reports-title-bar/index.js +3 -3
- package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/reports-title-bar/redux/actionCreator/index.js +1 -1
- package/dist/components/reports-title-bar/redux/index.esm.js +2 -2
- package/dist/components/reports-title-bar/redux/index.js +2 -2
- package/dist/components/reports-title-bar/redux/reducer/index.esm.js +1 -1
- package/dist/components/reports-title-bar/redux/reducer/index.js +1 -1
- package/dist/components/reports-title-bar/reports-title-bar/index.esm.js +1 -1
- package/dist/components/reports-title-bar/reports-title-bar/index.js +1 -1
- package/dist/components/rfq-response/index.esm.js +1 -1
- package/dist/components/rfq-response/index.js +1 -1
- package/dist/components/rfq-response/item-response-details/index.esm.js +1 -1
- package/dist/components/rfq-response/item-response-details/index.js +1 -1
- package/dist/components/schedule-report/index.esm.js +2 -2
- package/dist/components/schedule-report/index.js +2 -2
- package/dist/components/schedule-report/schedule-report/index.esm.js +1 -1
- package/dist/components/schedule-report/schedule-report/index.js +1 -1
- package/dist/components/schedule-report/schedule-report-modal/index.esm.js +1 -1
- package/dist/components/schedule-report/schedule-report-modal/index.js +1 -1
- package/dist/components/searchable-select/index.esm.js +1 -1
- package/dist/components/searchable-select/index.js +1 -1
- package/dist/components/share-modal/index.esm.js +4 -4
- package/dist/components/share-modal/index.js +4 -4
- package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
- package/dist/components/share-modal/redux/actionCreator/index.js +1 -1
- package/dist/components/share-modal/redux/index.esm.js +2 -2
- package/dist/components/share-modal/redux/index.js +2 -2
- package/dist/components/share-modal/redux/reducer/index.esm.js +1 -1
- package/dist/components/share-modal/redux/reducer/index.js +1 -1
- package/dist/components/share-modal/share-modal/index.esm.js +1 -1
- package/dist/components/share-modal/share-modal/index.js +1 -1
- package/dist/components/share-modal/share-modal-enhanced/index.esm.js +1 -1
- package/dist/components/share-modal/share-modal-enhanced/index.js +1 -1
- package/dist/components/team-add-modal/index.esm.js +1 -1
- package/dist/components/team-add-modal/index.js +1 -1
- package/dist/components/uom-field-wrapper/index.esm.js +1 -1
- package/dist/components/uom-field-wrapper/index.js +1 -1
- package/dist/components/uom-field-wrapper/uom-field-wrapper/index.esm.js +1 -1
- package/dist/components/uom-field-wrapper/uom-field-wrapper/index.js +1 -1
- package/dist/components/upload-excel/index.esm.js +1 -1
- package/dist/components/upload-excel/index.js +1 -1
- package/dist/components/upload-excel/upload-excel/index.esm.js +1 -1
- package/dist/components/upload-excel/upload-excel/index.js +1 -1
- package/dist/components/vendor-ai-summary/index.esm.js +1 -1
- package/dist/components/vendor-ai-summary/index.js +1 -1
- package/dist/hooks/index.esm.js +6 -6
- package/dist/hooks/index.js +6 -6
- package/dist/hooks/use-translations/index.esm.js +1 -1
- package/dist/hooks/use-translations/index.js +1 -1
- package/dist/hooks/useAccountSetting/index.esm.js +1 -1
- package/dist/hooks/useAccountSetting/index.js +1 -1
- package/dist/hooks/useCheckSkuAndName/index.esm.js +1 -1
- package/dist/hooks/useCheckSkuAndName/index.js +1 -1
- package/dist/hooks/useReduxIntegration/index.esm.js +1 -1
- package/dist/hooks/useReduxIntegration/index.js +1 -1
- package/dist/hooks/useUniquenessCheck/index.esm.js +1 -1
- package/dist/hooks/useUniquenessCheck/index.js +1 -1
- package/dist/index.esm.js +64 -64
- package/dist/index.js +64 -64
- package/dist/layout/fullScreen/index.esm.js +1 -1
- package/dist/layout/fullScreen/index.js +1 -1
- package/dist/layout/index.esm.js +2 -2
- package/dist/layout/index.js +2 -2
- package/dist/layout/sidebarScreen/index.esm.js +1 -1
- package/dist/layout/sidebarScreen/index.js +1 -1
- package/dist/redux/index.esm.js +3 -3
- package/dist/redux/index.js +3 -3
- package/dist/runtime/index.esm.js +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/src/api-client/api.ai-feature/api.d.ts +15 -0
- package/dist/src/components/chat-bot/types.d.ts +1 -1
- package/dist/utils/api/index.esm.js +1 -1
- package/dist/utils/api/index.js +1 -1
- package/dist/utils/common/index.esm.js +1 -1
- package/dist/utils/common/index.js +1 -1
- package/dist/utils/common-utility/index.esm.js +1 -1
- package/dist/utils/common-utility/index.js +1 -1
- package/dist/utils/index.esm.js +5 -5
- package/dist/utils/index.js +4 -4
- package/dist/utils/text-measurement/index.esm.js +1 -1
- package/dist/utils/text-measurement/index.js +1 -1
- package/dist/views/afterAuth/dashboard/index.esm.js +1 -1
- package/dist/views/afterAuth/dashboard/index.js +1 -1
- package/dist/views/afterAuth/index.esm.js +2 -2
- package/dist/views/afterAuth/index.js +2 -2
- package/dist/views/afterAuth/page-view/index.esm.js +1 -1
- package/dist/views/afterAuth/page-view/index.js +1 -1
- package/dist/views/form-builder/custom-form/index.esm.js +1 -1
- package/dist/views/form-builder/custom-form/index.js +1 -1
- package/dist/views/form-builder/element-edit-forms/index.esm.js +1 -1
- package/dist/views/form-builder/element-edit-forms/index.js +1 -1
- package/dist/views/form-builder/form-fields/index.esm.js +1 -1
- package/dist/views/form-builder/form-fields/index.js +1 -1
- package/dist/views/form-builder/index.esm.js +4 -4
- package/dist/views/form-builder/index.js +4 -4
- package/dist/views/form-builder/redux/index.esm.js +1 -1
- package/dist/views/form-builder/redux/index.js +1 -1
- package/dist/views/index.esm.js +13 -13
- package/dist/views/index.js +13 -13
- package/dist/views/template-editor/add-template/index.esm.js +1 -1
- package/dist/views/template-editor/add-template/index.js +1 -1
- package/dist/views/template-editor/components/index.esm.js +1 -1
- package/dist/views/template-editor/components/index.js +1 -1
- package/dist/views/template-editor/edit-section-modal/index.esm.js +1 -1
- package/dist/views/template-editor/edit-section-modal/index.js +1 -1
- package/dist/views/template-editor/index.esm.js +7 -7
- package/dist/views/template-editor/index.js +7 -7
- package/dist/views/template-editor/routes/index.esm.js +1 -1
- package/dist/views/template-editor/routes/index.js +1 -1
- package/dist/views/template-editor/template-modal/index.esm.js +1 -1
- package/dist/views/template-editor/template-modal/index.js +1 -1
- package/dist/views/template-editor/templates/index.esm.js +1 -1
- package/dist/views/template-editor/templates/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/chat-bot-BpNtrZEL.esm.js.map +0 -1
- package/dist/chunks/chat-bot-osiGMG3g.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-utility-CA_Upser.js","sources":["../../src/utils/common-utility.tsx"],"sourcesContent":["\nimport React from 'react';\n\nimport { Box } from '@mui/material';\n/* eslint-disable no-mixed-spaces-and-tabs */\nimport Typography from '../components/typography/typography';\nimport { Document } from '../components/icons';\nimport DocumentPreview from '../components/document-preview/document-preview';\nimport { MaterialTableColumnProps, TypeBooleanLabels } from '../components/material-table/material-table';\nimport { TFunction } from 'i18next';\nimport { formatDate, formatUtcDate } from './dateFormat';\nimport { MRT_Row, MRT_RowData } from 'material-react-table';\nimport { Link } from 'react-router-dom';\nimport DefaultAggregation from '../components/material-table/components/default-aggregation';\nimport Chip from '../components/chip/chip';\nimport _ from 'lodash';\nimport images from '../assets/images';\nimport { defaultCurrencySymbol, formatAmount, formatAmountWithCurrency, toFixedWithNumbers, defaultCurrencyFormat } from \"./common\";\n\nimport ValueField from '../components/value-field/value-field';\nimport { formatLabel } from './format-text';\nimport { generateRouteWithId } from './route-utils';\nimport dayjs from 'dayjs';\nimport { useAuth } from '@/contexts';\nimport { getApiConfigSafe } from './api-config';\nconst downloadFile = async (urlString, fileName) => {\n\ttry {\n\t\t// Fetch the file from the provided URL\n\t\tconst apiConfig = getApiConfigSafe();\n\t\tconst s3BucketUrl = apiConfig?.s3BucketUrl || import.meta.env.VITE_S3_BUCKET_URL || '';\n\t\tconst url = urlString.includes(\"http\") ? urlString : s3BucketUrl + urlString;\n\t\tconst response = await fetch(url);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch file: ${response.statusText}`);\n\t\t}\n\n\t\t// Convert the response to a blob\n\t\tconst blob = await response.blob();\n\n\t\t// Create a temporary URL for the blob\n\t\tconst blobUrl = window.URL.createObjectURL(blob);\n\n\t\t// Create a link element\n\t\tconst link = document.createElement('a');\n\t\tlink.href = blobUrl;\n\t\tlink.download = fileName || 'downloaded-file'; // Fallback filename if none provided\n\n\t\t// Append link to the body, trigger click, and remove it\n\t\tdocument.body.appendChild(link);\n\t\tlink.click();\n\t\tdocument.body.removeChild(link);\n\n\t\t// Revoke the blob URL to free up memory\n\t\twindow.URL.revokeObjectURL(blobUrl);\n\t} catch (error) {\n\t\tconsole.error('Error downloading file:', error);\n\t\tthrow error; // Re-throw to allow caller to handle the error\n\t}\n};\n\nexport const getFileNamesFromUrlsAsLink = (fileUrls: string | string[], mode?: string) => {\n\tconst fUrls = fileUrls\n\t\t? Array.isArray(fileUrls)\n\t\t\t? fileUrls\n\t\t\t: [fileUrls]\n\t\t: [];\n\n\tif (fUrls && fUrls.length) {\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tdisplay='flex'\n\t\t\t\tgap={1}\n\t\t\t\tmb={1}\n\t\t\t\talignItems='center'\n\t\t\t\tflexDirection='column'>\n\t\t\t\t{fUrls.map((url) => {\n\t\t\t\t\tconst fileName = url.substring(url.lastIndexOf('/') + 1);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='#246DFF'\n\t\t\t\t\t\t\tsx={{ textDecoration: 'underline', textUnderlineOffset: '3px', cursor: 'pointer' }}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\tonClick={() => mode === 'add' ? undefined : downloadFile(url, fileName)}>\n\t\t\t\t\t\t\t{fileName}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn null;\n};\n\nexport const getFileNamesFromUrls = (fileUrls: string[]) => {\n\tif (!fileUrls) return null;\n\n\tif (!fileUrls?.filter(Boolean)?.length) return null;\n\n\treturn fileUrls?.filter(Boolean)?.map((url) => {\n\t\tconst fileName = url?.substring(url?.lastIndexOf('/') + 1) || '';\n\t\treturn (\n\t\t\t<Box display='flex' gap={1} mb={1} alignItems='center'>\n\t\t\t\t<Document fontSize='small' />\n\t\t\t\t<Typography\n\t\t\t\t\ttype='s3'\n\t\t\t\t\tweight='medium'\n\t\t\t\t\tcolor={'theme.secondary.1000'}\n\t\t\t\t\tsx={{ cursor: 'pointer' }}\n\t\t\t\t\tnoWrap onClick={() => downloadFile(url, fileName)}>\n\t\t\t\t\t{fileName}\n\t\t\t\t</Typography>\n\t\t\t\t<DocumentPreview fileUrl={url} />\n\t\t\t</Box>\n\t\t);\n\t});\n};\n\nexport type CurrencySymbolFn = (row: MRT_Row<MRT_RowData>) => string;\nexport type StatusClassesFn = (row: MRT_Row<MRT_RowData>) => string;\nexport type RedirectionLinkFn = (row: MRT_Row<MRT_RowData>) => string;\n\nexport interface ITransformTableColumns {\n\tcolumns: MaterialTableColumnProps[];\n\tcurrencySymbol?: string | CurrencySymbolFn;\n\ttranslationFn?: TFunction<'translation', undefined>;\n\tenableFooter?: boolean;\n\tredirectionLink?: string | RedirectionLinkFn;\n\tredirectionLinkState?: (row: MRT_Row<MRT_RowData>) => void;\n\tredirectionPathWithId?: string;\n\tidField?: string;\n\tcustomizeValue?: (row: MRT_Row<MRT_RowData>, columnAccessorKey?: string, value?: any) => any;\n\tstatusClasses?: string | StatusClassesFn;\n\trows: any[];\n\tcurrencyFormat?: boolean;\n\tfraction?: number;\n}\n\nconst jsonArrayToString = (json: any) => {\n\tif (!json) return '';\n\n\ttry {\n\t\treturn JSON.parse(json)?.join(', ');\n\t} catch (error) {\n\t\treturn '';\n\t}\n};\nconst getStatusClass = (status: any) => {\n\tif (typeof status === 'string') {\n\t\tconst s = status?.toLowerCase()?.replaceAll(' ', '');\n\t\treturn s\n\t} else if (typeof status === 'number') {\n\t\treturn status ? 'enabled' : 'disabled';\n\t}\n};\n\nexport const transformTableColumns = ({\n\tcolumns = [],\n\tcurrencySymbol,\n\ttranslationFn = undefined,\n\tenableFooter = false,\n\tredirectionLink = '',\n\tredirectionLinkState = undefined,\n\tredirectionPathWithId = '',\n\tidField = 'id',\n\tstatusClasses = '',\n\trows = [],\n\tcustomizeValue = undefined,\n\tcurrencyFormat,\n\tfraction\n}: ITransformTableColumns) => {\n\tconst currencyFormatData = currencyFormat ? currencyFormat : defaultCurrencyFormat()\n\n\treturn columns.map((column) => ({\n\t\t...column,\n\t\theader: translationFn ? translationFn(column.header) : column.header,\n\t\tCell: column.Cell ? column.Cell : ({ renderedCellValue, row }: any) => {\n\t\t\tlet v = renderedCellValue;\n\t\t\tconst columnType = column.type || (column.header === \"Amount\" || column.header === \"Rate\" ? \"currency\" : undefined);\n\t\t\tconst isAmount = ['currency', 'amount'].includes(columnType);\n\t\t\tif (typeof v === 'number' && v && String(v)?.includes('.')) {\n\t\t\t\treturn v = isAmount ? formatAmount(v, currencyFormatData, 'before', currencySymbol instanceof Function ? currencySymbol(row) : currencySymbol, fraction) : toFixedWithNumbers(v, fraction);\n\t\t\t}\n\t\t\tswitch (columnType) {\n\t\t\t\tcase 'formattedString':\n\t\t\t\t\tv = formatLabel(renderedCellValue) || '-';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':{\n\t\t\t\t\tconsole.log(\"renderedCellValue d.....\", renderedCellValue)\n\t\t\t\t\tv = formatUtcDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'datetime':\n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.log(\"renderedCellValue dt.....\", renderedCellValue)\n\t\t\t\t\t\tv = formatUtcDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY hh:mm A'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'currency':\n\t\t\t\tcase 'amount': {\n\t\t\t\t\tconst cs = column?.showDefaultCurrency ? defaultCurrencySymbol() : currencySymbol instanceof Function ? currencySymbol(row) : (currencySymbol || defaultCurrencySymbol());\n\t\t\t\t\tv = renderedCellValue || renderedCellValue == 0\n\t\t\t\t\t\t? `${formatAmount(renderedCellValue, currencyFormatData, 'before', cs, fraction) || '-'}`\n\t\t\t\t\t\t: null;\n\n\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'status':\n\t\t\t\tcase 'enum':\n\t\t\t\tcase 'array':\n\t\t\t\t\t{\n\t\t\t\t\t\tv = renderedCellValue || renderedCellValue === 0 ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.isArray(renderedCellValue) ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{renderedCellValue?.length ? <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n\t\t\t\t\t\t\t\t\t\t\t{renderedCellValue.map((rcv) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={column.custom_class ? column?.custom_class : (typeof rcv === 'string' ? rcv : '')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof rcv === 'object' ? _.get(rcv, column?.typeArrayAccessorKey || '', '') : rcv}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Box> : '-'}\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\t\tcolumn.custom_class ? column?.custom_class :\n\t\t\t\t\t\t\t\t\t\t\t\t(statusClasses instanceof Function\n\t\t\t\t\t\t\t\t\t\t\t\t\t? statusClasses(row)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `${statusClasses}${getStatusClass(renderedCellValue)}`)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tlabel={\n\n\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderedCellValue}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t'-'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'boolean':\n\t\t\t\t\tv = (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t// active={Boolean(renderedCellValue)}\n\t\t\t\t\t\t\t// inActive={Boolean(!renderedCellValue)}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\t...(renderedCellValue ?\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette?.theme.tertiary4[200],\n\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary4[900]\n\t\t\t\t\t\t\t\t\t} :\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette?.theme.tertiary6[200],\n\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary6[900]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t{column?.typeBooleanLabels?.[renderedCellValue as keyof TypeBooleanLabels] || '-'}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'jsonArray':\n\t\t\t\t\tv = jsonArrayToString(renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\tcase 'custom_link':\n\t\t\t\t\tv = customizeValue?.(row, column.accessorKey, renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'toFixed':\n\t\t\t\t\tv = toFixedWithNumbers(renderedCellValue)\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Allow customizeValue to override any type's default rendering\n\t\t\t// if (customizeValue) {\n\t\t\t// \tconst customResult = customizeValue(row, column.accessorKey, renderedCellValue);\n\t\t\t// \tif (customResult !== undefined) {\n\t\t\t// \t\tv = customResult;\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\t// If redirectionPathWithId is provided, use it for URL parameter-based navigation\n\t\t\tif (redirectionPathWithId && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField || 'id'];\n\t\t\t\tif (id) {\n\t\t\t\t\tconst path = redirectionPathWithId instanceof Function ? generateRouteWithId(redirectionPathWithId(row), id?.toString()) : generateRouteWithId(redirectionPathWithId, id?.toString());\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Link to={path}>\n\t\t\t\t\t\t\t{v}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fall back to the existing redirection logic\n\t\t\telse if (redirectionLink && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField || 'id'];\n\t\t\t\tconst path = redirectionLink instanceof Function ? generateRouteWithId(redirectionLink(row), id?.toString()) : generateRouteWithId(redirectionLink, id?.toString());\n\t\t\t\treturn (\n\t\t\t\t\t<Link to={path}\n\t\t\t\t\t\tstate={redirectionLinkState?.(row)}>\n\t\t\t\t\t\t{v}\n\t\t\t\t\t</Link>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn v;\n\t\t},\n\t\t...(Boolean(enableFooter) && {\n\t\t\tFooter: ({ column }) => (\n\t\t\t\t<DefaultAggregation data={rows} column={String(column.id)} />\n\t\t\t)\n\t\t})\n\t}));\n};\n\nexport const renderEmptyRowsFallback = (text: string) => (\n\t<Box className='no-data'>\n\t\t<img src={images.common.tableNoData} />\n\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t{text}\n\t\t</Typography>\n\t</Box>\n)\n\n/* eslint-disable no-mixed-spaces-and-tabs */\nexport const renderValueField = (label: string, value: any, t: any, formatFn?: (val: any) => string) => {\n\treturn (\n\t\t<ValueField key={label} label={t?.(label)}>\n\t\t\t{formatFn ? formatFn(value) : value ?? '-'}\n\t\t</ValueField>\n\t);\n};\n\nexport const formateValueByType = ({\n\tvalue,\n\ttype,\n\tformat,\n\tweight\n}: {\n\tvalue: any;\n\ttype: string;\n\tformat?: string;\n\tweight?: \"normal\" | \"medium\" | \"bold\";\n}) => {\n\tconst numberTypes = ['number', 'amount', 'toFixed'];\n\tconst valueCheck = [null, undefined, '0'];\n\tif (valueCheck.includes(value)) return <Typography type='s4' weight={weight} color='theme.neutral.1000'>{numberTypes?.includes(type) ? value : (value || '-')}</Typography>;\n\n\tswitch (type) {\n\t\tcase 'date':\n\t\t\treturn dayjs(value).isValid() ? formatDate(value, format) : value;\n\t\tcase 'toFixed':\n\t\t\treturn <Typography type='s4' weight={weight} color='theme.neutral.1000'>{value ? toFixedWithNumbers(Number(value)) : '-'}</Typography>;\n\t\tcase 'amount':\n\t\t\treturn <Typography type='s4' weight={weight} color='theme.neutral.1000'>{value ? formatAmountWithCurrency(Number(value)) : '-'}</Typography>;\n\t\tdefault:\n\t\t\treturn weight ? <Typography type='s4' weight={weight} color='theme.neutral.1000'>{value || '-'}</Typography> : value || '-';\n\t}\n};\n\n\nconst setCompany = (value: any) => {\n\tconst { user } = useAuth();\n\treturn {\n\t\tvalue: user?.company_id,\n\t\toptions: [{\n\t\t\tlabel: user?.company_data?.name,\n\t\t\tvalue: user?.company_id\n\t\t}]\n\t}\n}\nexport const configMapper = {\n\t'company': {\n\t\tcallBack: setCompany,\n\n\t}\n}\n"],"names":["getApiConfigSafe","jsx","Box","Typography","jsxs","Document","DocumentPreview","defaultCurrencyFormat","formatAmount","toFixedWithNumbers","formatLabel","formatUtcDate","defaultCurrencySymbol","Fragment","Chip","_a","_b","_c","_d","generateRouteWithId","Link","column","DefaultAggregation","images","ValueField","formatDate","formatAmountWithCurrency","useAuth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common-utility-TLpddkaa.js","sources":["../../src/utils/common-utility.tsx"],"sourcesContent":["\nimport React from 'react';\n\nimport { Box } from '@mui/material';\n/* eslint-disable no-mixed-spaces-and-tabs */\nimport Typography from '../components/typography/typography';\nimport { Document } from '../components/icons';\nimport DocumentPreview from '../components/document-preview/document-preview';\nimport { MaterialTableColumnProps, TypeBooleanLabels } from '../components/material-table/material-table';\nimport { TFunction } from 'i18next';\nimport { formatDate, formatUtcDate } from './dateFormat';\nimport { MRT_Row, MRT_RowData } from 'material-react-table';\nimport { Link } from 'react-router-dom';\nimport DefaultAggregation from '../components/material-table/components/default-aggregation';\nimport Chip from '../components/chip/chip';\nimport _ from 'lodash';\nimport images from '../assets/images';\nimport { defaultCurrencySymbol, formatAmount, formatAmountWithCurrency, toFixedWithNumbers, defaultCurrencyFormat } from \"./common\";\n\nimport ValueField from '../components/value-field/value-field';\nimport { formatLabel } from './format-text';\nimport { generateRouteWithId } from './route-utils';\nimport dayjs from 'dayjs';\nimport { useAuth } from '@/contexts';\nimport { getApiConfigSafe } from './api-config';\nconst downloadFile = async (urlString, fileName) => {\n\ttry {\n\t\t// Fetch the file from the provided URL\n\t\tconst apiConfig = getApiConfigSafe();\n\t\tconst s3BucketUrl = apiConfig?.s3BucketUrl || import.meta.env.VITE_S3_BUCKET_URL || '';\n\t\tconst url = urlString.includes(\"http\") ? urlString : s3BucketUrl + urlString;\n\t\tconst response = await fetch(url);\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to fetch file: ${response.statusText}`);\n\t\t}\n\n\t\t// Convert the response to a blob\n\t\tconst blob = await response.blob();\n\n\t\t// Create a temporary URL for the blob\n\t\tconst blobUrl = window.URL.createObjectURL(blob);\n\n\t\t// Create a link element\n\t\tconst link = document.createElement('a');\n\t\tlink.href = blobUrl;\n\t\tlink.download = fileName || 'downloaded-file'; // Fallback filename if none provided\n\n\t\t// Append link to the body, trigger click, and remove it\n\t\tdocument.body.appendChild(link);\n\t\tlink.click();\n\t\tdocument.body.removeChild(link);\n\n\t\t// Revoke the blob URL to free up memory\n\t\twindow.URL.revokeObjectURL(blobUrl);\n\t} catch (error) {\n\t\tconsole.error('Error downloading file:', error);\n\t\tthrow error; // Re-throw to allow caller to handle the error\n\t}\n};\n\nexport const getFileNamesFromUrlsAsLink = (fileUrls: string | string[], mode?: string) => {\n\tconst fUrls = fileUrls\n\t\t? Array.isArray(fileUrls)\n\t\t\t? fileUrls\n\t\t\t: [fileUrls]\n\t\t: [];\n\n\tif (fUrls && fUrls.length) {\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tdisplay='flex'\n\t\t\t\tgap={1}\n\t\t\t\tmb={1}\n\t\t\t\talignItems='center'\n\t\t\t\tflexDirection='column'>\n\t\t\t\t{fUrls.map((url) => {\n\t\t\t\t\tconst fileName = url.substring(url.lastIndexOf('/') + 1);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\ttype='s3'\n\t\t\t\t\t\t\tweight='medium'\n\t\t\t\t\t\t\tcolor='#246DFF'\n\t\t\t\t\t\t\tsx={{ textDecoration: 'underline', textUnderlineOffset: '3px', cursor: 'pointer' }}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\tonClick={() => mode === 'add' ? undefined : downloadFile(url, fileName)}>\n\t\t\t\t\t\t\t{fileName}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn null;\n};\n\nexport const getFileNamesFromUrls = (fileUrls: string[]) => {\n\tif (!fileUrls) return null;\n\n\tif (!fileUrls?.filter(Boolean)?.length) return null;\n\n\treturn fileUrls?.filter(Boolean)?.map((url) => {\n\t\tconst fileName = url?.substring(url?.lastIndexOf('/') + 1) || '';\n\t\treturn (\n\t\t\t<Box display='flex' gap={1} mb={1} alignItems='center'>\n\t\t\t\t<Document fontSize='small' />\n\t\t\t\t<Typography\n\t\t\t\t\ttype='s3'\n\t\t\t\t\tweight='medium'\n\t\t\t\t\tcolor={'theme.secondary.1000'}\n\t\t\t\t\tsx={{ cursor: 'pointer' }}\n\t\t\t\t\tnoWrap onClick={() => downloadFile(url, fileName)}>\n\t\t\t\t\t{fileName}\n\t\t\t\t</Typography>\n\t\t\t\t<DocumentPreview fileUrl={url} />\n\t\t\t</Box>\n\t\t);\n\t});\n};\n\nexport type CurrencySymbolFn = (row: MRT_Row<MRT_RowData>) => string;\nexport type StatusClassesFn = (row: MRT_Row<MRT_RowData>) => string;\nexport type RedirectionLinkFn = (row: MRT_Row<MRT_RowData>) => string;\n\nexport interface ITransformTableColumns {\n\tcolumns: MaterialTableColumnProps[];\n\tcurrencySymbol?: string | CurrencySymbolFn;\n\ttranslationFn?: TFunction<'translation', undefined>;\n\tenableFooter?: boolean;\n\tredirectionLink?: string | RedirectionLinkFn;\n\tredirectionLinkState?: (row: MRT_Row<MRT_RowData>) => void;\n\tredirectionPathWithId?: string;\n\tidField?: string;\n\tcustomizeValue?: (row: MRT_Row<MRT_RowData>, columnAccessorKey?: string, value?: any) => any;\n\tstatusClasses?: string | StatusClassesFn;\n\trows: any[];\n\tcurrencyFormat?: boolean;\n\tfraction?: number;\n}\n\nconst jsonArrayToString = (json: any) => {\n\tif (!json) return '';\n\n\ttry {\n\t\treturn JSON.parse(json)?.join(', ');\n\t} catch (error) {\n\t\treturn '';\n\t}\n};\nconst getStatusClass = (status: any) => {\n\tif (typeof status === 'string') {\n\t\tconst s = status?.toLowerCase()?.replaceAll(' ', '');\n\t\treturn s\n\t} else if (typeof status === 'number') {\n\t\treturn status ? 'enabled' : 'disabled';\n\t}\n};\n\nexport const transformTableColumns = ({\n\tcolumns = [],\n\tcurrencySymbol,\n\ttranslationFn = undefined,\n\tenableFooter = false,\n\tredirectionLink = '',\n\tredirectionLinkState = undefined,\n\tredirectionPathWithId = '',\n\tidField = 'id',\n\tstatusClasses = '',\n\trows = [],\n\tcustomizeValue = undefined,\n\tcurrencyFormat,\n\tfraction\n}: ITransformTableColumns) => {\n\tconst currencyFormatData = currencyFormat ? currencyFormat : defaultCurrencyFormat()\n\n\treturn columns.map((column) => ({\n\t\t...column,\n\t\theader: translationFn ? translationFn(column.header) : column.header,\n\t\tCell: column.Cell ? column.Cell : ({ renderedCellValue, row }: any) => {\n\t\t\tlet v = renderedCellValue;\n\t\t\tconst columnType = column.type || (column.header === \"Amount\" || column.header === \"Rate\" ? \"currency\" : undefined);\n\t\t\tconst isAmount = ['currency', 'amount'].includes(columnType);\n\t\t\tif (typeof v === 'number' && v && String(v)?.includes('.')) {\n\t\t\t\treturn v = isAmount ? formatAmount(v, currencyFormatData, 'before', currencySymbol instanceof Function ? currencySymbol(row) : currencySymbol, fraction) : toFixedWithNumbers(v, fraction);\n\t\t\t}\n\t\t\tswitch (columnType) {\n\t\t\t\tcase 'formattedString':\n\t\t\t\t\tv = formatLabel(renderedCellValue) || '-';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':{\n\t\t\t\t\tconsole.log(\"renderedCellValue d.....\", renderedCellValue)\n\t\t\t\t\tv = formatUtcDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'datetime':\n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.log(\"renderedCellValue dt.....\", renderedCellValue)\n\t\t\t\t\t\tv = formatUtcDate(\n\t\t\t\t\t\trenderedCellValue,\n\t\t\t\t\t\tcolumn.editProperties?.dateFormat || 'DD-MM-YYYY hh:mm A'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'currency':\n\t\t\t\tcase 'amount': {\n\t\t\t\t\tconst cs = column?.showDefaultCurrency ? defaultCurrencySymbol() : currencySymbol instanceof Function ? currencySymbol(row) : (currencySymbol || defaultCurrencySymbol());\n\t\t\t\t\tv = renderedCellValue || renderedCellValue == 0\n\t\t\t\t\t\t? `${formatAmount(renderedCellValue, currencyFormatData, 'before', cs, fraction) || '-'}`\n\t\t\t\t\t\t: null;\n\n\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'status':\n\t\t\t\tcase 'enum':\n\t\t\t\tcase 'array':\n\t\t\t\t\t{\n\t\t\t\t\t\tv = renderedCellValue || renderedCellValue === 0 ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.isArray(renderedCellValue) ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{renderedCellValue?.length ? <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n\t\t\t\t\t\t\t\t\t\t\t{renderedCellValue.map((rcv) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={column.custom_class ? column?.custom_class : (typeof rcv === 'string' ? rcv : '')}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{typeof rcv === 'object' ? _.get(rcv, column?.typeArrayAccessorKey || '', '') : rcv}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Box> : '-'}\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\t\t\tcolumn.custom_class ? column?.custom_class :\n\t\t\t\t\t\t\t\t\t\t\t\t(statusClasses instanceof Function\n\t\t\t\t\t\t\t\t\t\t\t\t\t? statusClasses(row)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: `${statusClasses}${getStatusClass(renderedCellValue)}`)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tlabel={\n\n\t\t\t\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderedCellValue}\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t'-'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'boolean':\n\t\t\t\t\tv = (\n\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\ttype='normal'\n\t\t\t\t\t\t\t// active={Boolean(renderedCellValue)}\n\t\t\t\t\t\t\t// inActive={Boolean(!renderedCellValue)}\n\t\t\t\t\t\t\tsx={(theme) => ({\n\t\t\t\t\t\t\t\t...(renderedCellValue ?\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette?.theme.tertiary4[200],\n\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary4[900]\n\t\t\t\t\t\t\t\t\t} :\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: theme.palette?.theme.tertiary6[200],\n\t\t\t\t\t\t\t\t\t\tcolor: theme.palette?.theme.tertiary6[900]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t<Typography type='s4' weight='medium' color={'inherit'}>\n\t\t\t\t\t\t\t\t\t{column?.typeBooleanLabels?.[renderedCellValue as keyof TypeBooleanLabels] || '-'}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'jsonArray':\n\t\t\t\t\tv = jsonArrayToString(renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\tcase 'custom_link':\n\t\t\t\t\tv = customizeValue?.(row, column.accessorKey, renderedCellValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'toFixed':\n\t\t\t\t\tv = toFixedWithNumbers(renderedCellValue)\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Allow customizeValue to override any type's default rendering\n\t\t\t// if (customizeValue) {\n\t\t\t// \tconst customResult = customizeValue(row, column.accessorKey, renderedCellValue);\n\t\t\t// \tif (customResult !== undefined) {\n\t\t\t// \t\tv = customResult;\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\t// If redirectionPathWithId is provided, use it for URL parameter-based navigation\n\t\t\tif (redirectionPathWithId && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField || 'id'];\n\t\t\t\tif (id) {\n\t\t\t\t\tconst path = redirectionPathWithId instanceof Function ? generateRouteWithId(redirectionPathWithId(row), id?.toString()) : generateRouteWithId(redirectionPathWithId, id?.toString());\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Link to={path}>\n\t\t\t\t\t\t\t{v}\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fall back to the existing redirection logic\n\t\t\telse if (redirectionLink && column.type != 'custom_link') {\n\t\t\t\tconst id = row.original[idField || 'id'];\n\t\t\t\tconst path = redirectionLink instanceof Function ? generateRouteWithId(redirectionLink(row), id?.toString()) : generateRouteWithId(redirectionLink, id?.toString());\n\t\t\t\treturn (\n\t\t\t\t\t<Link to={path}\n\t\t\t\t\t\tstate={redirectionLinkState?.(row)}>\n\t\t\t\t\t\t{v}\n\t\t\t\t\t</Link>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn v;\n\t\t},\n\t\t...(Boolean(enableFooter) && {\n\t\t\tFooter: ({ column }) => (\n\t\t\t\t<DefaultAggregation data={rows} column={String(column.id)} />\n\t\t\t)\n\t\t})\n\t}));\n};\n\nexport const renderEmptyRowsFallback = (text: string) => (\n\t<Box className='no-data'>\n\t\t<img src={images.common.tableNoData} />\n\t\t<Typography type='s3' weight='medium' color='theme.secondary.1000'>\n\t\t\t{text}\n\t\t</Typography>\n\t</Box>\n)\n\n/* eslint-disable no-mixed-spaces-and-tabs */\nexport const renderValueField = (label: string, value: any, t: any, formatFn?: (val: any) => string) => {\n\treturn (\n\t\t<ValueField key={label} label={t?.(label)}>\n\t\t\t{formatFn ? formatFn(value) : value ?? '-'}\n\t\t</ValueField>\n\t);\n};\n\nexport const formateValueByType = ({\n\tvalue,\n\ttype,\n\tformat,\n\tweight\n}: {\n\tvalue: any;\n\ttype: string;\n\tformat?: string;\n\tweight?: \"normal\" | \"medium\" | \"bold\";\n}) => {\n\tconst numberTypes = ['number', 'amount', 'toFixed'];\n\tconst valueCheck = [null, undefined, '0'];\n\tif (valueCheck.includes(value)) return <Typography type='s4' weight={weight} color='theme.neutral.1000'>{numberTypes?.includes(type) ? value : (value || '-')}</Typography>;\n\n\tswitch (type) {\n\t\tcase 'date':\n\t\t\treturn dayjs(value).isValid() ? formatDate(value, format) : value;\n\t\tcase 'toFixed':\n\t\t\treturn <Typography type='s4' weight={weight} color='theme.neutral.1000'>{value ? toFixedWithNumbers(Number(value)) : '-'}</Typography>;\n\t\tcase 'amount':\n\t\t\treturn <Typography type='s4' weight={weight} color='theme.neutral.1000'>{value ? formatAmountWithCurrency(Number(value)) : '-'}</Typography>;\n\t\tdefault:\n\t\t\treturn weight ? <Typography type='s4' weight={weight} color='theme.neutral.1000'>{value || '-'}</Typography> : value || '-';\n\t}\n};\n\n\nconst setCompany = (value: any) => {\n\tconst { user } = useAuth();\n\treturn {\n\t\tvalue: user?.company_id,\n\t\toptions: [{\n\t\t\tlabel: user?.company_data?.name,\n\t\t\tvalue: user?.company_id\n\t\t}]\n\t}\n}\nexport const configMapper = {\n\t'company': {\n\t\tcallBack: setCompany,\n\n\t}\n}\n"],"names":["getApiConfigSafe","jsx","Box","Typography","jsxs","Document","DocumentPreview","defaultCurrencyFormat","formatAmount","toFixedWithNumbers","formatLabel","formatUtcDate","defaultCurrencySymbol","Fragment","Chip","_a","_b","_c","_d","generateRouteWithId","Link","column","DefaultAggregation","images","ValueField","formatDate","formatAmountWithCurrency","useAuth"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef, useState, useRef, useEffect, useCallback, useImperativeHandle } from "react";
|
|
3
3
|
import { Undo, Redo, FormatBold, FormatItalic, FormatUnderlined, FormatStrikethrough, Subscript, Superscript, FormatAlignLeft, FormatAlignCenter, FormatAlignRight, FormatAlignJustify, FormatListBulleted, FormatListNumbered, Link, Image, TableChart, Code, SwapHoriz, AddCircleOutline, RemoveCircleOutline, Close } from "@mui/icons-material";
|
|
4
4
|
import { Box, Tooltip, Divider, IconButton, Select, MenuItem, Popover } from "@mui/material";
|
|
5
|
-
import { ay as uploadFiles, ab as getToken } from "./api-
|
|
5
|
+
import { ay as uploadFiles, ab as getToken } from "./api-COFUx2RW.esm.js";
|
|
6
6
|
import { p as postV1Drive } from "./index-ALqg8b5U.esm.js";
|
|
7
7
|
import { getApiConfig } from "../utils/api-config/index.esm.js";
|
|
8
8
|
import { prepareForEditing, prepareForSaving } from "../components/editor/utils/index.esm.js";
|
|
@@ -1254,4 +1254,4 @@ export {
|
|
|
1254
1254
|
CustomEditor,
|
|
1255
1255
|
CustomEditor as default
|
|
1256
1256
|
};
|
|
1257
|
-
//# sourceMappingURL=custom-editor-
|
|
1257
|
+
//# sourceMappingURL=custom-editor-BjUUIs4F.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-editor-6-xqhKz6.esm.js","sources":["../../src/components/editor/custom-editor.tsx"],"sourcesContent":["/**\n * Custom Rich Text Editor (CKEditor-like)\n * \n * Features:\n * - CKEditor-style menu bar and toolbar\n * - Full formatting toolbar (bold, italic, underline, etc.)\n * - Font family, size, color, background color\n * - Alignment, lists, links\n * - Image upload with resize handles\n * - Table insertion and editing\n * - Selection handles for images and elements\n * - Preserves exact HTML structure (no normalization)\n * - Maintains all attributes, styles, and scoped CSS\n * \n * Fix: Source View no longer clears content on toggle.\n * Root cause was sourceCodeRef being shared between visual-mode (handleInput)\n * and source-mode (textarea). Introduced sourceViewContentRef to exclusively\n * own source-mode textarea content so handleInput never corrupts it.\n */\nimport React, { useState, useEffect, useRef, useImperativeHandle, forwardRef, useCallback } from 'react';\nimport { \n\tFormatBold, \n\tFormatItalic, \n\tFormatUnderlined, \n\tFormatStrikethrough,\n\tFormatAlignLeft,\n\tFormatAlignCenter,\n\tFormatAlignRight,\n\tFormatAlignJustify,\n\tFormatListBulleted,\n\tFormatListNumbered,\n\tLink as LinkIcon,\n\tImage as ImageIcon,\n\tTableChart,\n\tCode,\n\tUndo,\n\tRedo,\n\tSubscript,\n\tSuperscript,\n\tClose,\n\tSwapHoriz,\n\tAddCircleOutline,\n\tRemoveCircleOutline,\n} from '@mui/icons-material';\nimport { IconButton, Divider, Select, MenuItem, Tooltip, Box, Button, Popover } from '@mui/material';\nimport { uploadFiles } from '../../utils/common';\nimport { getToken } from '../../utils/common';\nimport { postV1Drive } from '../../api-client/api.drive/api';\nimport { getApiConfig } from '../../utils/api-config';\nimport { CellProperties } from './table/types';\nimport { prepareForEditing, prepareForSaving } from './utils/handlebars-protection';\nimport './custom-editor.css';\n\nexport interface CustomEditorProps {\n\teditorRef?: React.RefObject<any>;\n\tdata: string;\n\thandleEditorReady: (editor: any) => void;\n\tonError?: (error: Error) => void;\n\tconfig?: any;\n\t[key: string]: any;\n}\n\nconst FONT_FAMILIES = [\n\t'Arial', 'Courier New', 'Georgia', 'Times New Roman', 'Trebuchet MS', 'Verdana'\n];\n\nconst FONT_SIZES = ['10px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px'];\n\nconst HEADING_FORMATS = [\n\t{ value: 'p', label: 'Paragraph' },\n\t{ value: 'h1', label: 'Heading 1' },\n\t{ value: 'h2', label: 'Heading 2' },\n\t{ value: 'h3', label: 'Heading 3' },\n\t{ value: 'h4', label: 'Heading 4' },\n\t{ value: 'h5', label: 'Heading 5' },\n\t{ value: 'h6', label: 'Heading 6' }\n];\n\nconst PRESET_COLORS = [\n\t'#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#ffffff',\n\t'#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#9900ff', '#ff00ff',\n\t'#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#9fc5e8', '#b4a7d6', '#d5a6bd',\n\t'#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6fa8dc', '#8e7cc3', '#c27ba0',\n\t'#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3d85c8', '#674ea7', '#85200c',\n];\n\nexport const CustomEditor = forwardRef<any, CustomEditorProps>((props, ref) => {\n\tconst {\n\t\teditorRef: editorRefProp,\n\t\tdata = '',\n\t\thandleEditorReady,\n\t\tonError,\n\t\tconfig = {},\n\t\t...rest\n\t} = props;\n\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [fontFamily, setFontFamily] = useState('Arial');\n\tconst [fontSize, setFontSize] = useState('14px');\n\tconst [headingFormat, setHeadingFormat] = useState('p');\n\tconst [showSourceMode, setShowSourceMode] = useState(false);\n\tconst [sourceCode, setSourceCode] = useState(data);\n\tconst [history, setHistory] = useState<string[]>([data]);\n\tconst [historyIndex, setHistoryIndex] = useState(0);\n\tconst [selectedElement, setSelectedElement] = useState<HTMLElement | null>(null);\n\tconst [resizeHandles, setResizeHandles] = useState<{ x: number; y: number; width: number; height: number } | null>(null);\n\tconst [showTablePicker, setShowTablePicker] = useState(false);\n\tconst [tablePickerAnchor, setTablePickerAnchor] = useState<HTMLElement | null>(null);\n\tconst [textSelectionAnchor, setTextSelectionAnchor] = useState<{ x: number; y: number } | null>(null);\n\tconst [showTextToolbar, setShowTextToolbar] = useState(false);\n\tconst [colorPickerState, setColorPickerState] = useState<{ anchor: HTMLElement; type: 'text' | 'bg' } | null>(null);\n\t\n\t// Table editing state\n\tconst [selectedCell, setSelectedCell] = useState<HTMLTableCellElement | null>(null);\n\tconst [showTableToolbar, setShowTableToolbar] = useState(false);\n\tconst [tableToolbarPosition, setTableToolbarPosition] = useState<{ x: number; y: number } | null>(null);\n\tconst [cellProperties, setCellProperties] = useState<CellProperties>({\n\t\tborderStyle: 'solid',\n\t\tborderColor: '#ddd',\n\t\tborderWidth: '1px',\n\t\tbackgroundColor: 'transparent',\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tpadding: '8px',\n\t\ttextAlign: 'left',\n\t\tverticalAlign: 'middle'\n\t});\n\t\n\tconst contentEditableRef = useRef<HTMLDivElement>(null);\n\tconst sourceCodeRef = useRef<string>(data);\n\tconst onEditorChangeRef = useRef(props.onEditorChange);\n\tconst handleEditorReadyRef = useRef(handleEditorReady);\n\tuseEffect(() => { onEditorChangeRef.current = props.onEditorChange; });\n\tuseEffect(() => { handleEditorReadyRef.current = handleEditorReady; });\n\n\t// FIX: Dedicated ref for source-mode textarea content.\n\t// sourceCodeRef is shared with visual-mode (handleInput overwrites it on every\n\t// keystroke). sourceViewContentRef is ONLY written by source-mode handlers\n\t// (handleSourceCodeChange, handleHtmlFileUpload, handleToggleSource entering\n\t// source mode) so it is never corrupted by visual-mode activity.\n\tconst sourceViewContentRef = useRef<string>(data);\n\n\tconst fileInputRef = useRef<HTMLInputElement>(null);\n\tconst htmlFileInputRef = useRef<HTMLInputElement>(null);\n\tconst replaceImageInputRef = useRef<HTMLInputElement>(null);\n\tconst resizeStartRef = useRef<{ x: number; y: number; width: number; height: number; handle: string } | null>(null);\n\tconst handlebarsMapRef = useRef<{ [key: string]: string }>({});\n\tconst apiConfig = getApiConfig();\n\n\t// Update source code when data prop changes\n\tuseEffect(() => {\n\t\tif(!data)return\n\t\tconst { html: protectedHtml, map } = prepareForEditing(data);\n\t\thandlebarsMapRef.current = map;\n\t\tsourceCodeRef.current = data; // Store original with Handlebars\n\t\t\n\t\tif (contentEditableRef.current && contentEditableRef.current.innerHTML !== protectedHtml) {\n\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t}\n\t}, [data]);\n\n\t// Initialize editor\n\tuseEffect(() => {\n\t\tif (contentEditableRef.current) {\n\t\t\ttry {\n\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(data || '');\n\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\tconst adapter = {\n\t\t\t\t\tgetData: () => {\n\t\t\t\t\t\t// Restore Handlebars syntax before returning\n\t\t\t\t\t\treturn prepareForSaving(sourceCodeRef.current, handlebarsMapRef.current);\n\t\t\t\t\t},\n\t\t\t\t\tsetData: (newData: string) => {\n\t\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(newData);\n\t\t\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\t\t\tsourceCodeRef.current = newData;\n\t\t\t\t\t\tif (contentEditableRef.current) {\n\t\t\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tmodel: {\n\t\t\t\t\t\tinsertContent: (fragment: string) => {\n\t\t\t\t\t\t\texecCommand('insertHTML', fragment);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tprocessor: {\n\t\t\t\t\t\t\ttoView: (html: string) => html\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttoModel: (html: string) => html\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\thandleEditorReadyRef.current?.(adapter);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('[CustomEditor] init effect error:', e);\n\t\t\t}\n\t\t}\n\t}, []);\n\n\t// Execute formatting command\n\tconst execCommand = useCallback((command: string, value?: string) => {\n\t\tdocument.execCommand(command, false, value);\n\t\tif (contentEditableRef.current) {\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t}\n\t}, []);\n\n\t// Save to history for undo/redo\n\tconst saveToHistory = useCallback(() => {\n\t\tif (contentEditableRef.current) {\n\t\t\tconst newHistory = history.slice(0, historyIndex + 1);\n\t\t\tnewHistory.push(contentEditableRef.current.innerHTML);\n\t\t\tsetHistory(newHistory.slice(-50)); // Keep last 50 states\n\t\t\tsetHistoryIndex(newHistory.length - 1);\n\t\t}\n\t}, [history, historyIndex]);\n\n\t// Undo\n\tconst handleUndo = useCallback(() => {\n\t\tif (historyIndex > 0) {\n\t\t\tconst newIndex = historyIndex - 1;\n\t\t\tsetHistoryIndex(newIndex);\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tcontentEditableRef.current.innerHTML = history[newIndex];\n\t\t\t\tsourceCodeRef.current = history[newIndex];\n\t\t\t}\n\t\t}\n\t}, [history, historyIndex]);\n\n\t// Redo\n\tconst handleRedo = useCallback(() => {\n\t\tif (historyIndex < history.length - 1) {\n\t\t\tconst newIndex = historyIndex + 1;\n\t\t\tsetHistoryIndex(newIndex);\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tcontentEditableRef.current.innerHTML = history[newIndex];\n\t\t\t\tsourceCodeRef.current = history[newIndex];\n\t\t\t}\n\t\t}\n\t}, [history, historyIndex]);\n\n\t// Handle content changes in visual mode.\n\t// IMPORTANT: only updates sourceCodeRef (visual-mode ref).\n\t// Must NOT touch sourceViewContentRef — that ref belongs exclusively to source mode.\n\tconst handleInput = useCallback(() => {\n\t\tif (contentEditableRef.current) {\n\t\t\tconst visualHtml = contentEditableRef.current.innerHTML;\n\t\t\t// Restore Handlebars before saving to sourceCodeRef\n\t\t\tsourceCodeRef.current = prepareForSaving(visualHtml, handlebarsMapRef.current);\n\t\t\tonEditorChangeRef.current?.(sourceCodeRef.current);\n\t\t}\n\t}, []);\n\n\t// Strip external formatting from pasted HTML.\n\tconst sanitizePastedHtml = useCallback((html: string): string => {\n\t\tconst doc = new DOMParser().parseFromString(html, 'text/html');\n\n\t\t// Unwrap <span> elements — they carry font/color styles from external sources\n\t\tdoc.querySelectorAll('span').forEach(span => {\n\t\t\tconst frag = document.createDocumentFragment();\n\t\t\twhile (span.firstChild) frag.appendChild(span.firstChild);\n\t\t\tspan.parentNode?.replaceChild(frag, span);\n\t\t});\n\n\t\t// Convert <a> links to plain text\n\t\tdoc.querySelectorAll('a').forEach(a => {\n\t\t\tconst text = document.createTextNode(a.textContent || '');\n\t\t\ta.parentNode?.replaceChild(text, a);\n\t\t});\n\n\t\t// Strip style and class from every remaining element\n\t\tdoc.querySelectorAll('[style], [class], [color], [bgcolor], [face]').forEach(el => {\n\t\t\tel.removeAttribute('style');\n\t\t\tel.removeAttribute('class');\n\t\t\tel.removeAttribute('color');\n\t\t\tel.removeAttribute('bgcolor');\n\t\t\tel.removeAttribute('face');\n\t\t});\n\n\t\treturn doc.body.innerHTML;\n\t}, []);\n\n\t// Handle paste — sanitize external HTML before inserting\n\tconst handlePaste = useCallback((e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst html = e.clipboardData.getData('text/html');\n\t\tconst text = e.clipboardData.getData('text/plain');\n\n\t\tif (html) {\n\t\t\texecCommand('insertHTML', sanitizePastedHtml(html));\n\t\t} else {\n\t\t\texecCommand('insertText', text);\n\t\t}\n\t}, [execCommand, sanitizePastedHtml]);\n\n\t// Handle image upload\n\tconst handleImageUpload = useCallback(async (file: File) => {\n\t\ttry {\n\t\t\tconst uFiles = await uploadFiles([file], 'document');\n\t\t\tconst token = getToken();\n\t\t\tconst payload = {\n\t\t\t\t...token,\n\t\t\t\t'x-timezone': token['x-timezone']?.toString() || '',\n\t\t\t\ttitle: file?.name.split('.')[0],\n\t\t\t\tpath: '/',\n\t\t\t\tis_private: true,\n\t\t\t\tis_directory: false,\n\t\t\t\tfile_size: file.size,\n\t\t\t\tis_child: false,\n\t\t\t\tfile_extension: file?.name.split('.')[1],\n\t\t\t\ttype: 'image',\n\t\t\t\tmime_type: file.type,\n\t\t\t\turl: `${apiConfig?.s3BucketUrl}${uFiles[0]}`\n\t\t\t};\n\t\t\t\n\t\t\tawait postV1Drive(payload);\n\t\t\texecCommand('insertHTML', `<img src=\"${payload.url}\" alt=\"${file.name}\" style=\"max-width: 100%;\" />`);\n\t\t} catch (error) {\n\t\t\tconsole.error('Image upload failed:', error);\n\t\t\tonError?.(error as Error);\n\t\t}\n\t}, [apiConfig, execCommand, onError]);\n\n\t// Handle file input change\n\tconst handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (file) {\n\t\t\thandleImageUpload(file);\n\t\t}\n\t}, [handleImageUpload]);\n\n\t// Insert link\n\tconst handleInsertLink = useCallback(() => {\n\t\tconst url = prompt('Enter URL:');\n\t\tif (url) {\n\t\t\texecCommand('createLink', url);\n\t\t}\n\t}, [execCommand]);\n\n\t// Insert table\n\tconst handleInsertTable = useCallback(() => {\n\t\tconst rows = prompt('Number of rows:', '3');\n\t\tconst cols = prompt('Number of columns:', '3');\n\t\t\n\t\tif (rows && cols) {\n\t\t\tlet tableHTML = '<table border=\"1\" style=\"border-collapse: collapse; width: 100%;\">';\n\t\t\ttableHTML += '<thead><tr>';\n\t\t\tfor (let i = 0; i < parseInt(cols); i++) {\n\t\t\t\ttableHTML += '<th style=\"border: 1px solid #ddd; padding: 8px;\">Header</th>';\n\t\t\t}\n\t\t\ttableHTML += '</tr></thead><tbody>';\n\t\t\tfor (let i = 0; i < parseInt(rows); i++) {\n\t\t\t\ttableHTML += '<tr>';\n\t\t\t\tfor (let j = 0; j < parseInt(cols); j++) {\n\t\t\t\t\ttableHTML += '<td style=\"border: 1px solid #ddd; padding: 8px;\"></td>';\n\t\t\t\t}\n\t\t\t\ttableHTML += '</tr>';\n\t\t\t}\n\t\t\ttableHTML += '</tbody></table>';\n\t\t\t\n\t\t\texecCommand('insertHTML', tableHTML);\n\t\t}\n\t}, [execCommand]);\n\n\t// Table picker component\n\tconst TablePicker = () => {\n\t\tconst [hoverCell, setHoverCell] = useState<{ row: number; col: number } | null>(null);\n\t\tconst maxRows = 10;\n\t\tconst maxCols = 10;\n\t\t\n\t\t// Calculate position relative to button\n\t\tconst buttonRect = tablePickerAnchor?.getBoundingClientRect();\n\t\tconst editorContainer = document.querySelector('.custom-editor-container');\n\t\tconst containerRect = editorContainer?.getBoundingClientRect();\n\t\t\n\t\tlet top = 0;\n\t\tlet left = 0;\n\t\t\n\t\tif (buttonRect && containerRect) {\n\t\t\ttop = buttonRect.bottom - containerRect.top + 5;\n\t\t\tleft = buttonRect.left - containerRect.left;\n\t\t}\n\t\t\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: `${top}px`,\n\t\t\t\t\tleft: `${left}px`,\n\t\t\t\t\tbgcolor: 'white',\n\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\tp: 2,\n\t\t\t\t\tboxShadow: 3,\n\t\t\t\t\tzIndex: 9999\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Box sx={{ display: 'grid', gridTemplateColumns: `repeat(${maxCols}, 20px)`, gap: '2px', mb: 1 }}>\n\t\t\t\t\t{Array.from({ length: maxRows }).map((_, rowIndex) =>\n\t\t\t\t\t\tArray.from({ length: maxCols }).map((_, colIndex) => (\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tkey={`${rowIndex}-${colIndex}`}\n\t\t\t\t\t\t\t\tonMouseEnter={() => setHoverCell({ row: rowIndex + 1, col: colIndex + 1 })}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\thandleInsertTableFromPicker(rowIndex + 1, colIndex + 1);\n\t\t\t\t\t\t\t\t\tsetHoverCell(null);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\twidth: 20,\n\t\t\t\t\t\t\t\t\theight: 20,\n\t\t\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\t\t\tbgcolor: hoverCell && rowIndex < hoverCell.row && colIndex < hoverCell.col ? '#1976d2' : 'white',\n\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\t\t\t\tbgcolor: '#1976d2'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ textAlign: 'center', fontSize: '12px', color: '#666' }}>\n\t\t\t\t\t{hoverCell ? `${hoverCell.row} × ${hoverCell.col}` : '1 × 1'}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t};\n\n\t// Font family change\n\tconst handleFontFamilyChange = useCallback((e: any) => {\n\t\tconst family = e.target.value;\n\t\tsetFontFamily(family);\n\t\texecCommand('fontName', family);\n\t}, [execCommand]);\n\n\t// Font size change\n\tconst handleFontSizeChange = useCallback((e: any) => {\n\t\tconst size = e.target.value;\n\t\tsetFontSize(size);\n\t\tdocument.execCommand('fontSize', false, '7');\n\t\tif (contentEditableRef.current) {\n\t\t\tconst fontTags = Array.from(\n\t\t\t\tcontentEditableRef.current.querySelectorAll('font[size=\"7\"]')\n\t\t\t);\n\t\t\tfontTags.forEach(tag => {\n\t\t\t\tconst span = document.createElement('span');\n\t\t\t\tspan.style.fontSize = size;\n\t\t\t\twhile (tag.firstChild) span.appendChild(tag.firstChild);\n\t\t\t\ttag.parentNode?.replaceChild(span, tag);\n\t\t\t});\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t\tonEditorChangeRef.current?.(sourceCodeRef.current);\n\t\t}\n\t}, [saveToHistory]);\n\n\t// Heading format change\n\tconst handleHeadingFormatChange = useCallback((e: any) => {\n\t\tconst format = e.target.value;\n\t\tsetHeadingFormat(format);\n\t\texecCommand('formatBlock', `<${format}>`);\n\t}, [execCommand]);\n\n\t// Toggle source mode\n\t// FIX: Use sourceViewContentRef (not sourceCodeRef) as the single source of\n\t// truth for the textarea. This prevents handleInput (visual mode) from ever\n\t// overwriting content the user typed/pasted into the source textarea.\n\tconst handleToggleSource = useCallback(() => {\n\t\tif (!showSourceMode) {\n\t\t\t// Entering source mode: MUST capture content BEFORE state change\n\t\t\t// because contentEditableRef.current becomes null after re-render\n\t\t\tconst visualHtml = contentEditableRef.current?.innerHTML || sourceCodeRef.current || data;\n\t\t\tconst restoredHtml = prepareForSaving(visualHtml, handlebarsMapRef.current);\n\t\t\t\n\t\t\t// Update all refs and state\n\t\t\tsetSourceCode(restoredHtml);\n\t\t\tsourceViewContentRef.current = restoredHtml;\n\t\t\tsourceCodeRef.current = restoredHtml;\n\t\t\t\n\t\t\t// Now switch mode (this will unmount contentEditable and mount textarea)\n\t\t\tsetShowSourceMode(true);\n\t\t} else {\n\t\t\t// Leaving source mode: read from sourceViewContentRef\n\t\t\t// State change will mount contentEditable, then we update it in useEffect\n\t\t\tconst currentSource = sourceViewContentRef.current.trim();\n\t\t\t\n\t\t\tif (!currentSource) {\n\t\t\t\t// Empty source — use default\n\t\t\t\tconst defaultHtml = '<p><br></p>';\n\t\t\t\tsourceCodeRef.current = defaultHtml;\n\t\t\t\tsourceViewContentRef.current = defaultHtml;\n\t\t\t\tsetSourceCode(defaultHtml);\n\t\t\t} else {\n\t\t\t\tsourceCodeRef.current = currentSource;\n\t\t\t}\n\t\t\t\n\t\t\t// Switch mode first\n\t\t\tsetShowSourceMode(false);\n\t\t}\n\t}, [showSourceMode, data]);\n\n\t// Effect to update contentEditable when switching from source to visual mode\n\t// Use a ref to track if we've already processed this mode switch\n\tconst hasProcessedModeSwitch = useRef(false);\n\t\n\tuseEffect(() => {\n\t\t// Only run when switching TO visual mode (showSourceMode becomes false)\n\t\t// and we haven't already processed this switch\n\t\tif (!showSourceMode && contentEditableRef.current && !hasProcessedModeSwitch.current) {\n\t\t\thasProcessedModeSwitch.current = true;\n\t\t\t\n\t\t\ttry {\n\t\t\t\tconst currentSource = sourceCodeRef.current.trim();\n\t\t\t\t\n\t\t\t\tif (!currentSource) {\n\t\t\t\t\tconst defaultHtml = '<p><br></p>';\n\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(defaultHtml);\n\t\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t} else {\n\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(currentSource);\n\t\t\t\t\thandlebarsMapRef.current = map;\n\n\t\t\t\t\tif (!protectedHtml || protectedHtml.trim() === '') {\n\t\t\t\t\t\tconsole.warn('Protected HTML is empty, using original source');\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = currentSource;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Save to history without triggering re-render loop\n\t\t\t\tconst newHistory = history.slice(0, historyIndex + 1);\n\t\t\t\tnewHistory.push(contentEditableRef.current.innerHTML);\n\t\t\t\tsetHistory(newHistory.slice(-50));\n\t\t\t\tsetHistoryIndex(newHistory.length - 1);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error updating visual mode:', error);\n\t\t\t\t// Fallback: use raw HTML\n\t\t\t\tif (contentEditableRef.current && sourceCodeRef.current) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = sourceCodeRef.current;\n\t\t\t\t\t} catch (innerError) {\n\t\t\t\t\t\tconsole.error('Failed to render HTML:', innerError);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Reset the flag when entering source mode\n\t\tif (showSourceMode) {\n\t\t\thasProcessedModeSwitch.current = false;\n\t\t}\n\t}, [showSourceMode, history, historyIndex]);\n\n\t// Handle HTML file upload\n\t// FIX: also write to sourceViewContentRef so the uploaded content is not\n\t// lost when the user toggles to visual mode.\n\tconst handleHtmlFileUpload = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (!file) return;\n\n\t\tconst reader = new FileReader();\n\t\t\n\t\treader.onload = (event) => {\n\t\t\tconst htmlContent = event.target?.result as string;\n\t\t\tif (htmlContent) {\n\t\t\t\t// Update both textarea state and the dedicated source-mode ref\n\t\t\t\tsetSourceCode(htmlContent);\n\t\t\t\tsourceViewContentRef.current = htmlContent; // FIX: was sourceCodeRef.current\n\t\t\t\tsourceCodeRef.current = htmlContent;\n\t\t\t\t\n\t\t\t\t// If in visual mode, update the visual editor immediately\n\t\t\t\tif (!showSourceMode && contentEditableRef.current) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(htmlContent);\n\t\t\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t\t\tsaveToHistory();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('Error processing uploaded HTML:', error);\n\t\t\t\t\t\talert('There was an error processing the HTML file. Please check the file and try again.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treader.onerror = () => {\n\t\t\talert('Failed to read HTML file. Please try again.');\n\t\t};\n\n\t\treader.readAsText(file);\n\t\t\n\t\t// Reset input so the same file can be uploaded again\n\t\te.target.value = '';\n\t}, [showSourceMode, saveToHistory]);\n\n\t// Handle source code textarea change.\n\t// FIX: write to sourceViewContentRef (not sourceCodeRef) so visual-mode\n\t// handleInput can never overwrite what the user is typing in the textarea.\n\tconst handleSourceCodeChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\tconst newCode = e.target.value;\n\t\tsetSourceCode(newCode);\n\t\tsourceViewContentRef.current = newCode; // FIX: was sourceCodeRef.current\n\t}, []);\n\n\t// Handle click on images/elements for selection\n\tconst handleContentClick = useCallback((e: React.MouseEvent) => {\n\t\tconst target = e.target as HTMLElement;\n\t\t\n\t\t// Check if clicked on image or table\n\t\tlet elementToSelect: HTMLElement | null = null;\n\t\t\n\t\tif (target.tagName === 'IMG') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\telementToSelect = target;\n\t\t} else if (target.tagName === 'TABLE') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\telementToSelect = target;\n\t\t} else if (target.tagName === 'TD' || target.tagName === 'TH' || target.tagName === 'TR' || target.tagName === 'TBODY' || target.tagName === 'THEAD') {\n\t\t\t// If clicked inside table, find the parent table\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\telementToSelect = target.closest('table');\n\t\t}\n\t\t\n\t\tif (elementToSelect) {\n\t\t\tsetSelectedElement(elementToSelect);\n\t\t\t\n\t\t\tconst rect = elementToSelect.getBoundingClientRect();\n\t\t\tconst containerRect = contentEditableRef.current?.getBoundingClientRect();\n\t\t\t\n\t\t\tif (containerRect) {\n\t\t\t\tsetResizeHandles({\n\t\t\t\t\tx: rect.left - containerRect.left,\n\t\t\t\t\ty: rect.top - containerRect.top,\n\t\t\t\t\twidth: rect.width,\n\t\t\t\t\theight: rect.height\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tsetSelectedElement(null);\n\t\t\tsetResizeHandles(null);\n\t\t}\n\t}, []);\n\n\t// Delete selected element\n\tconst handleDeleteSelected = useCallback(() => {\n\t\tif (selectedElement) {\n\t\t\tselectedElement.remove();\n\t\t\tsetSelectedElement(null);\n\t\t\tsetResizeHandles(null);\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\tsaveToHistory();\n\t\t\t}\n\t\t}\n\t}, [selectedElement, saveToHistory]);\n\n\t// Replace image\n\tconst handleReplaceImage = useCallback(async (file: File) => {\n\t\tif (!selectedElement || selectedElement.tagName !== 'IMG') return;\n\t\t\n\t\ttry {\n\t\t\tconst uFiles = await uploadFiles([file], 'document');\n\t\t\tconst token = getToken();\n\t\t\tconst payload = {\n\t\t\t\t...token,\n\t\t\t\t'x-timezone': token['x-timezone']?.toString() || '',\n\t\t\t\ttitle: file?.name.split('.')[0],\n\t\t\t\tpath: '/',\n\t\t\t\tis_private: true,\n\t\t\t\tis_directory: false,\n\t\t\t\tfile_size: file.size,\n\t\t\t\tis_child: false,\n\t\t\t\tfile_extension: file?.name.split('.')[1],\n\t\t\t\ttype: 'image',\n\t\t\t\tmime_type: file.type,\n\t\t\t\turl: `${apiConfig?.s3BucketUrl}${uFiles[0]}`\n\t\t\t};\n\t\t\t\n\t\t\tawait postV1Drive(payload);\n\t\t\t(selectedElement as HTMLImageElement).src = payload.url;\n\t\t\t\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\tsaveToHistory();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Image upload failed:', error);\n\t\t\tonError?.(error as Error);\n\t\t}\n\t}, [selectedElement, apiConfig, onError, saveToHistory]);\n\n\t// Handle replace image file input\n\tconst handleReplaceImageChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (file) {\n\t\t\thandleReplaceImage(file);\n\t\t}\n\t}, [handleReplaceImage]);\n\n\t// Handle text selection\n\tconst handleTextSelection = useCallback(() => {\n\t\tconst selection = window.getSelection();\n\t\tif (selection && !selection.isCollapsed && selection.rangeCount > 0) {\n\t\t\tconst range = selection.getRangeAt(0);\n\t\t\tconst rect = range.getBoundingClientRect();\n\t\t\tconst containerRect = contentEditableRef.current?.getBoundingClientRect();\n\t\t\t\n\t\t\tif (containerRect && rect.width > 0) {\n\t\t\t\tsetTextSelectionAnchor({\n\t\t\t\t\tx: rect.left + rect.width / 2,\n\t\t\t\t\ty: rect.top - 10\n\t\t\t\t});\n\t\t\t\tsetShowTextToolbar(true);\n\t\t\t}\n\n\t\t\t// Sync font size dropdown to the selected text's actual font size.\n\t\t\t// Walk up from the anchor node looking for an explicit inline font-size.\n\t\t\tlet node: Node | null = selection.anchorNode;\n\t\t\tif (node?.nodeType === Node.TEXT_NODE) node = node.parentElement;\n\t\t\tlet detectedSize: string | null = null;\n\t\t\tlet current = node instanceof HTMLElement ? node : null;\n\t\t\twhile (current && current !== contentEditableRef.current) {\n\t\t\t\tif (current.style.fontSize) {\n\t\t\t\t\tdetectedSize = current.style.fontSize;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcurrent = current.parentElement;\n\t\t\t}\n\t\t\tsetFontSize(detectedSize ?? '14px');\n\t\t} else {\n\t\t\tsetShowTextToolbar(false);\n\t\t\tsetTextSelectionAnchor(null);\n\t\t}\n\t}, []);\n\n\t// Handle resize start\n\tconst handleResizeStart = useCallback((e: React.MouseEvent, handle: string) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t\n\t\tif (selectedElement && resizeHandles) {\n\t\t\tresizeStartRef.current = {\n\t\t\t\tx: e.clientX,\n\t\t\t\ty: e.clientY,\n\t\t\t\twidth: resizeHandles.width,\n\t\t\t\theight: resizeHandles.height,\n\t\t\t\thandle\n\t\t\t};\n\t\t\t\n\t\t\t// Add event listeners\n\t\t\tdocument.addEventListener('mousemove', handleResizeMove as any);\n\t\t\tdocument.addEventListener('mouseup', handleResizeEnd);\n\t\t}\n\t}, [selectedElement, resizeHandles]);\n\n\t// Handle resize move\n\tconst handleResizeMove = useCallback((e: MouseEvent) => {\n\t\tif (!resizeStartRef.current || !selectedElement || !resizeHandles) return;\n\t\t\n\t\tconst { x, y, width, height, handle } = resizeStartRef.current;\n\t\tconst deltaX = e.clientX - x;\n\t\tconst deltaY = e.clientY - y;\n\t\t\n\t\tlet newWidth = width;\n\t\tlet newHeight = height;\n\t\t\n\t\tif (handle.includes('e')) {\n\t\t\tnewWidth = Math.max(50, width + deltaX);\n\t\t}\n\t\tif (handle.includes('w')) {\n\t\t\t// West handle: shrink/grow from the left — invert delta\n\t\t\tnewWidth = Math.max(50, width - deltaX);\n\t\t}\n\t\tif (handle.includes('s')) {\n\t\t\tnewHeight = Math.max(50, height + deltaY);\n\t\t}\n\t\tif (handle.includes('n')) {\n\t\t\tnewHeight = Math.max(50, height - deltaY);\n\t\t}\n\t\t\n\t\t// Maintain aspect ratio for corner handles on images\n\t\tif (handle.length === 2 && selectedElement.tagName === 'IMG') {\n\t\t\tconst aspectRatio = width / height;\n\t\t\tnewHeight = newWidth / aspectRatio;\n\t\t}\n\t\t\n\t\tselectedElement.style.width = `${newWidth}px`;\n\t\tif (selectedElement.tagName === 'IMG' || selectedElement.tagName === 'TABLE') {\n\t\t\tselectedElement.style.height = `${newHeight}px`;\n\t\t}\n\t\t\n\t\t// Update resize handles position\n\t\tconst rect = selectedElement.getBoundingClientRect();\n\t\tconst containerRect = contentEditableRef.current?.getBoundingClientRect();\n\t\t\n\t\tif (containerRect) {\n\t\t\tsetResizeHandles({\n\t\t\t\tx: rect.left - containerRect.left,\n\t\t\t\ty: rect.top - containerRect.top,\n\t\t\t\twidth: rect.width,\n\t\t\t\theight: rect.height\n\t\t\t});\n\t\t}\n\t}, [selectedElement, resizeHandles]);\n\n\t// Handle resize end\n\tconst handleResizeEnd = useCallback(() => {\n\t\tdocument.removeEventListener('mousemove', handleResizeMove as any);\n\t\tdocument.removeEventListener('mouseup', handleResizeEnd);\n\t\t\n\t\tresizeStartRef.current = null;\n\t\tif (contentEditableRef.current) {\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t}\n\t}, [handleResizeMove, saveToHistory]);\n\n\t// Show table picker\n\tconst handleShowTablePicker = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n\t\tsetTablePickerAnchor(e.currentTarget);\n\t\tsetShowTablePicker(true);\n\t}, []);\n\n\t// Insert table with visual picker\n\tconst handleInsertTableFromPicker = useCallback((rows: number, cols: number) => {\n\t\t// Focus the editor first\n\t\tif (contentEditableRef.current) {\n\t\t\tcontentEditableRef.current.focus();\n\t\t}\n\t\t\n\t\t// Create table HTML\n\t\tlet tableHTML = '<table border=\"1\" style=\"border-collapse: collapse; width: 100%; margin: 10px 0;\">';\n\t\ttableHTML += '<tbody>';\n\t\tfor (let i = 0; i < rows; i++) {\n\t\t\ttableHTML += '<tr>';\n\t\t\tfor (let j = 0; j < cols; j++) {\n\t\t\t\ttableHTML += '<td style=\"border: 1px solid #ddd; padding: 8px; min-width: 50px;\"></td>';\n\t\t\t}\n\t\t\ttableHTML += '</tr>';\n\t\t}\n\t\ttableHTML += '</tbody></table><p><br></p>';\n\t\t\n\t\t// Insert using execCommand\n\t\tdocument.execCommand('insertHTML', false, tableHTML);\n\t\t\n\t\t// Update refs and history\n\t\tif (contentEditableRef.current) {\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t}\n\t\t\n\t\t// Close picker\n\t\tsetShowTablePicker(false);\n\t\tsetTablePickerAnchor(null);\n\t}, [saveToHistory]);\n\n\t// Create adapter object for ref\n\tconst adapter = {\n\t\tgetData: () => {\n\t\t\t// Always restore Handlebars syntax when getting data\n\t\t\treturn prepareForSaving(sourceCodeRef.current, handlebarsMapRef.current);\n\t\t},\n\t\tsetData: (newData: string) => {\n\t\t\tconst { html: protectedHtml, map } = prepareForEditing(newData);\n\t\t\thandlebarsMapRef.current = map;\n\t\t\tsourceCodeRef.current = newData;\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t}\n\t\t},\n\t\tmodel: {\n\t\t\tinsertContent: (fragment: string) => {\n\t\t\t\texecCommand('insertHTML', fragment);\n\t\t\t}\n\t\t},\n\t\tdata: {\n\t\t\tprocessor: {\n\t\t\t\ttoView: (html: string) => html\n\t\t\t},\n\t\t\ttoModel: (html: string) => html\n\t\t}\n\t};\n\n\tuseImperativeHandle(ref, () => adapter, []);\n\t\n\tuseEffect(() => {\n\t\tif (editorRefProp) {\n\t\t\t(editorRefProp as any).current = adapter;\n\t\t}\n\t}, [editorRefProp]);\n\n\t// Prevents focus loss when toolbar buttons are pressed, keeping the editor\n\tconst toolbarCmd = (command: string, value?: string) => (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\texecCommand(command, value);\n\t};\n\n\tif (error) {\n\t\treturn (\n\t\t\t<div className=\"editor-error-container\">\n\t\t\t\t<div className=\"editor-error-message\">Editor Error: {error.message}</div>\n\t\t\t\t<button onClick={() => setError(null)} className=\"editor-retry-button\">\n\t\t\t\t\tRetry\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className='custom-editor-container'>\n\t\t\t{/* Menu Bar */}\n\t\t\t<Box sx={{ \n\t\t\t\tdisplay: 'flex', \n\t\t\t\talignItems: 'center',\n\t\t\t\tgap: 2,\n\t\t\t\tpx: 2,\n\t\t\t\tpy: 0.5,\n\t\t\t\tborderBottom: '1px solid #ddd',\n\t\t\t\tbgcolor: '#f8f9fa',\n\t\t\t\tfontSize: '13px'\n\t\t\t}}>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Edit</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>View</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Insert</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Format</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Help</span>\n\t\t\t</Box>\n\n\t\t\t{/* Toolbar */}\n\t\t\t<Box sx={{ \n\t\t\t\tdisplay: 'flex', \n\t\t\t\tflexWrap: 'wrap', \n\t\t\t\tgap: 0.5, \n\t\t\t\tp: 1, \n\t\t\t\tborderBottom: '1px solid #ddd',\n\t\t\t\tbgcolor: '#f5f5f5',\n\t\t\t\talignItems: 'center'\n\t\t\t}}>\n\t\t\t\t{/* Source Button - icon + label style matching the design */}\n\t\t\t\t<Tooltip title={showSourceMode ? 'Switch to Visual' : 'Switch to Source'}>\n\t\t\t\t\t<Box\n\t\t\t\t\t\tonClick={handleToggleSource}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\tpx: 1,\n\t\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\tborder: '1px solid',\n\t\t\t\t\t\t\tborderColor: showSourceMode ? 'primary.main' : 'transparent',\n\t\t\t\t\t\t\tbgcolor: showSourceMode ? 'primary.50' : 'transparent',\n\t\t\t\t\t\t\tcolor: showSourceMode ? 'primary.main' : 'text.secondary',\n\t\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\t\tbgcolor: showSourceMode ? 'primary.100' : 'grey.200',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttransition: 'all 0.15s ease',\n\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Code-file-with-edit icon, matching the screenshot */}\n\t\t\t\t\t\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<path d=\"M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V8L14 2Z\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\"/>\n\t\t\t\t\t\t\t<polyline points=\"14,2 14,8 20,8\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\"/>\n\t\t\t\t\t\t\t<path d=\"M9 13L7 15L9 17\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n\t\t\t\t\t\t\t<path d=\"M15 13L17 15L15 17\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n\t\t\t\t\t\t\t<line x1=\"13\" y1=\"12\" x2=\"11\" y2=\"18\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span style={{ fontSize: '13px', fontWeight: 500 }}>Source</span>\n\t\t\t\t\t</Box>\n\t\t\t\t</Tooltip>\n\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Undo/Redo */}\n\t\t\t\t<Tooltip title=\"Undo\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleUndo} disabled={historyIndex === 0}>\n\t\t\t\t\t\t<Undo fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Redo\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleRedo} disabled={historyIndex === history.length - 1}>\n\t\t\t\t\t\t<Redo fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Heading Format */}\n\t\t\t\t<Select\n\t\t\t\t\tvalue={headingFormat}\n\t\t\t\t\tonChange={handleHeadingFormatChange}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tsx={{ minWidth: 100, height: 28, fontSize: '12px' }}\n\t\t\t\t>\n\t\t\t\t\t{HEADING_FORMATS.map(format => (\n\t\t\t\t\t\t<MenuItem key={format.value} value={format.value}>\n\t\t\t\t\t\t\t{format.label}\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Select>\n\t\t\t\t\n\t\t\t\t{/* Font Family */}\n\t\t\t\t<Select\n\t\t\t\t\tvalue={fontFamily}\n\t\t\t\t\tonChange={handleFontFamilyChange}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tsx={{ minWidth: 120, height: 28, fontSize: '12px' }}\n\t\t\t\t>\n\t\t\t\t\t{FONT_FAMILIES.map(font => (\n\t\t\t\t\t\t<MenuItem key={font} value={font} style={{ fontFamily: font }}>\n\t\t\t\t\t\t\t{font}\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Select>\n\t\t\t\t\n\t\t\t\t{/* Font Size */}\n\t\t\t\t<Select\n\t\t\t\t\tvalue={fontSize}\n\t\t\t\t\tonChange={handleFontSizeChange}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tsx={{ minWidth: 70, height: 28, fontSize: '12px' }}\n\t\t\t\t>\n\t\t\t\t\t{FONT_SIZES.map(size => (\n\t\t\t\t\t\t<MenuItem key={size} value={size}>{size}</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Select>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Text Formatting */}\n\t\t\t\t<Tooltip title=\"Bold\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('bold')}>\n\t\t\t\t\t\t<FormatBold fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Italic\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('italic')}>\n\t\t\t\t\t\t<FormatItalic fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Underline\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('underline')}>\n\t\t\t\t\t\t<FormatUnderlined fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Strikethrough\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('strikeThrough')}>\n\t\t\t\t\t\t<FormatStrikethrough fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Subscript\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('subscript')}>\n\t\t\t\t\t\t<Subscript fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Superscript\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('superscript')}>\n\t\t\t\t\t\t<Superscript fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Colors */}\n\t\t\t\t<Tooltip title=\"Text Color\">\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tsetColorPickerState({ anchor: e.currentTarget, type: 'text' });\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tstyle={{ width: 32, height: 28, border: '1px solid #ddd', borderRadius: '4px', backgroundColor: 'white' }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ fontSize: '16px', fontWeight: 'bold', color: '#000' }}>A</span>\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Background Color\">\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tsetColorPickerState({ anchor: e.currentTarget, type: 'bg' });\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tstyle={{ width: 32, height: 28, border: '1px solid #ddd', borderRadius: '4px', backgroundColor: '#fffde7' }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ fontSize: '16px', fontWeight: 'bold', color: '#000' }}>A</span>\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Alignment */}\n\t\t\t\t<Tooltip title=\"Align Left\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyLeft')}>\n\t\t\t\t\t\t<FormatAlignLeft fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Align Center\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyCenter')}>\n\t\t\t\t\t\t<FormatAlignCenter fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Align Right\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyRight')}>\n\t\t\t\t\t\t<FormatAlignRight fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Justify\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyFull')}>\n\t\t\t\t\t\t<FormatAlignJustify fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Lists */}\n\t\t\t\t<Tooltip title=\"Bullet List\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('insertUnorderedList')}>\n\t\t\t\t\t\t<FormatListBulleted fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Numbered List\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('insertOrderedList')}>\n\t\t\t\t\t\t<FormatListNumbered fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Insert */}\n\t\t\t\t<Tooltip title=\"Insert Link\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleInsertLink}>\n\t\t\t\t\t\t<LinkIcon fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Insert Image\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={() => fileInputRef.current?.click()}>\n\t\t\t\t\t\t<ImageIcon fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Insert Table\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleShowTablePicker}>\n\t\t\t\t\t\t<TableChart fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Code\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('formatBlock', '<pre>')}>\n\t\t\t\t\t\t<Code fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t</Box>\n\t\t\t\n\t\t\t{/* Hidden file input */}\n\t\t\t<input\n\t\t\t\tref={fileInputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={handleFileChange}\n\t\t\t/>\n\t\t\t\n\t\t\t{/* Hidden HTML file input */}\n\t\t\t<input\n\t\t\t\tref={htmlFileInputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\".html,.htm,text/html\"\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={handleHtmlFileUpload}\n\t\t\t/>\n\t\t\t\n\t\t\t{/* Hidden file input for replace image */}\n\t\t\t<input\n\t\t\t\tref={replaceImageInputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={handleReplaceImageChange}\n\t\t\t/>\n\t\t\t\n\t\t\t{/* Content Area */}\n\t\t\t{showSourceMode ? (\n\t\t\t\t<textarea\n\t\t\t\t\tvalue={sourceCode}\n\t\t\t\t\tonChange={handleSourceCodeChange}\n\t\t\t\t\tclassName=\"custom-editor-source\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tminHeight: '300px',\n\t\t\t\t\t\tpadding: '16px',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\tfontFamily: 'Courier New, monospace',\n\t\t\t\t\t\tfontSize: '13px',\n\t\t\t\t\t\tlineHeight: '1.5',\n\t\t\t\t\t\tresize: 'vertical'\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div style={{ position: 'relative' }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={contentEditableRef}\n\t\t\t\t\t\tcontentEditable\n\t\t\t\t\t\tclassName=\"editor-content\"\n\t\t\t\t\t\tonInput={handleInput}\n\t\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\t\tonClick={handleContentClick}\n\t\t\t\t\t\tonMouseUp={handleTextSelection}\n\t\t\t\t\t\tonKeyUp={handleTextSelection}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tminHeight: '300px',\n\t\t\t\t\t\t\tpadding: '16px',\n\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\tborderTop: 'none',\n\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\tfontFamily: 'inherit',\n\t\t\t\t\t\t\tfontSize: 'inherit',\n\t\t\t\t\t\t\tlineHeight: '1.6',\n\t\t\t\t\t\t\tbackgroundColor: 'white'\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t{/* Resize Handles */}\n\t\t\t\t\t{selectedElement && resizeHandles && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\tleft: resizeHandles.x,\n\t\t\t\t\t\t\t\ttop: resizeHandles.y,\n\t\t\t\t\t\t\t\twidth: resizeHandles.width,\n\t\t\t\t\t\t\t\theight: resizeHandles.height,\n\t\t\t\t\t\t\t\tborder: '2px solid #1976d2',\n\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\tzIndex: 1000\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Toolbar for selected element */}\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\ttop: -36,\n\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\t\t\tbgcolor: 'white',\n\t\t\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\t\tp: 0.25,\n\t\t\t\t\t\t\t\t\tboxShadow: 2,\n\t\t\t\t\t\t\t\t\tpointerEvents: 'auto'\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{selectedElement.tagName === 'IMG' && (\n\t\t\t\t\t\t\t\t\t<Tooltip title=\"Replace Image\">\n\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => replaceImageInputRef.current?.click()}\n\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SwapHoriz sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{selectedElement.tagName === 'TABLE' && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Add Row\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst tbody = selectedElement.querySelector('tbody');\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (tbody) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst colCount = selectedElement.querySelectorAll('tr:first-child td, tr:first-child th').length || 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst tr = document.createElement('tr');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < colCount; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst td = document.createElement('td');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttd.style.cssText = 'border: 1px solid #ddd; padding: 8px; min-width: 50px;';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttr.appendChild(td);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttbody.appendChild(tr);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<AddCircleOutline sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Delete Row\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst rows = selectedElement.querySelectorAll('tbody tr');\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (rows.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trows[rows.length - 1].remove();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RemoveCircleOutline sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Add Column\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedElement.querySelectorAll('tr').forEach(tr => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isHeader = tr.closest('thead') !== null;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst cell = document.createElement(isHeader ? 'th' : 'td');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcell.style.cssText = 'border: 1px solid #ddd; padding: 8px; min-width: 50px;';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttr.appendChild(cell);\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<AddCircleOutline sx={{ fontSize: 14, transform: 'rotate(90deg)' }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Delete Column\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst allRows = selectedElement.querySelectorAll('tr');\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst colCount = allRows[0]?.children.length || 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (colCount > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tallRows.forEach(tr => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (tr.lastElementChild) tr.removeChild(tr.lastElementChild);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RemoveCircleOutline sx={{ fontSize: 14, transform: 'rotate(90deg)' }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<Tooltip title=\"Delete\">\n\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleDeleteSelected}\n\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\twidth: 22,\n\t\t\t\t\t\t\t\t\t\t\theight: 22,\n\t\t\t\t\t\t\t\t\t\t\tcolor: '#f44336',\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: '#ffebee' }\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Close sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* Corner and edge handles */}\n\t\t\t\t\t\t\t{['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'].map(handle => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={handle}\n\t\t\t\t\t\t\t\t\tonMouseDown={(e) => handleResizeStart(e, handle)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\twidth: 8,\n\t\t\t\t\t\t\t\t\t\theight: 8,\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: '#1976d2',\n\t\t\t\t\t\t\t\t\t\tborder: '1px solid white',\n\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\tcursor: `${handle}-resize`,\n\t\t\t\t\t\t\t\t\t\t...(handle === 'nw' && { top: -4, left: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'n' && { top: -4, left: '50%', transform: 'translateX(-50%)' }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'ne' && { top: -4, right: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'e' && { top: '50%', right: -4, transform: 'translateY(-50%)' }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'se' && { bottom: -4, right: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 's' && { bottom: -4, left: '50%', transform: 'translateX(-50%)' }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'sw' && { bottom: -4, left: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'w' && { top: '50%', left: -4, transform: 'translateY(-50%)' })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{/* Text Selection Toolbar */}\n\t\t\t\t\t{showTextToolbar && textSelectionAnchor && (\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\t\tleft: textSelectionAnchor.x,\n\t\t\t\t\t\t\t\ttop: textSelectionAnchor.y,\n\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -100%)',\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\t\tbgcolor: '#333',\n\t\t\t\t\t\t\t\tcolor: 'white',\n\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\tp: 0.5,\n\t\t\t\t\t\t\t\tboxShadow: 3,\n\t\t\t\t\t\t\t\tzIndex: 10000\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip title=\"Bold\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonMouseDown={toolbarCmd('bold')}\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FormatBold fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Tooltip title=\"Italic\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonMouseDown={toolbarCmd('italic')}\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FormatItalic fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Tooltip title=\"Underline\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonMouseDown={toolbarCmd('underline')}\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FormatUnderlined fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ bgcolor: 'rgba(255,255,255,0.2)', mx: 0.5 }} />\n\t\t\t\t\t\t\t<Tooltip title=\"Text Color\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tsetColorPickerState({ anchor: e.currentTarget, type: 'text' });\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: '14px', fontWeight: 'bold' }}>A</span>\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Tooltip title=\"Font Size\">\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tdefaultValue=\"14px\"\n\t\t\t\t\t\t\t\t\tonChange={handleFontSizeChange}\n\t\t\t\t\t\t\t\t\tsx={{ \n\t\t\t\t\t\t\t\t\t\tcolor: 'white',\n\t\t\t\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t\t\t\t\tminWidth: 70,\n\t\t\t\t\t\t\t\t\t\t'& .MuiOutlinedInput-notchedOutline': { border: 'none' },\n\t\t\t\t\t\t\t\t\t\t'& .MuiSvgIcon-root': { color: 'white' }\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{FONT_SIZES.map(size => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem key={size} value={size}>{size}</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t\n\t\t\t{/* Color Picker Popover */}\n\t\t\t{colorPickerState && (\n\t\t\t\t<Popover\n\t\t\t\t\topen\n\t\t\t\t\tanchorEl={colorPickerState.anchor}\n\t\t\t\t\tonClose={() => setColorPickerState(null)}\n\t\t\t\t\tdisableAutoFocus\n\t\t\t\t\tdisableEnforceFocus\n\t\t\t\t\tanchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n\t\t\t\t\ttransformOrigin={{ vertical: 'top', horizontal: 'left' }}\n\t\t\t\t>\n\t\t\t\t\t<Box sx={{ p: 1 }}>\n\t\t\t\t\t\t<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(8, 20px)', gap: '3px' }}>\n\t\t\t\t\t\t\t{PRESET_COLORS.map((color) => (\n\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\tkey={color}\n\t\t\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tif (colorPickerState.type === 'text') {\n\t\t\t\t\t\t\t\t\t\t\texecCommand('foreColor', color);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\texecCommand('hiliteColor', color);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsetColorPickerState(null);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\twidth: 20,\n\t\t\t\t\t\t\t\t\t\theight: 20,\n\t\t\t\t\t\t\t\t\t\tbgcolor: color,\n\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\tborder: '1px solid rgba(0,0,0,0.15)',\n\t\t\t\t\t\t\t\t\t\tborderRadius: '2px',\n\t\t\t\t\t\t\t\t\t\t'&:hover': { transform: 'scale(1.3)', zIndex: 1, position: 'relative' },\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t</Popover>\n\t\t\t)}\n\n\t\t\t{/* Table Picker Popover */}\n\t\t\t{showTablePicker && tablePickerAnchor && (\n\t\t\t\t<>\n\t\t\t\t\t<Box\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetShowTablePicker(false);\n\t\t\t\t\t\t\tsetTablePickerAnchor(null);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\t\tzIndex: 9998\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<TablePicker />\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n\nCustomEditor.displayName = 'CustomEditor';\nexport default CustomEditor;"],"names":["adapter","protectedHtml","map","error","_","_a","LinkIcon","ImageIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"custom-editor-BjUUIs4F.esm.js","sources":["../../src/components/editor/custom-editor.tsx"],"sourcesContent":["/**\n * Custom Rich Text Editor (CKEditor-like)\n * \n * Features:\n * - CKEditor-style menu bar and toolbar\n * - Full formatting toolbar (bold, italic, underline, etc.)\n * - Font family, size, color, background color\n * - Alignment, lists, links\n * - Image upload with resize handles\n * - Table insertion and editing\n * - Selection handles for images and elements\n * - Preserves exact HTML structure (no normalization)\n * - Maintains all attributes, styles, and scoped CSS\n * \n * Fix: Source View no longer clears content on toggle.\n * Root cause was sourceCodeRef being shared between visual-mode (handleInput)\n * and source-mode (textarea). Introduced sourceViewContentRef to exclusively\n * own source-mode textarea content so handleInput never corrupts it.\n */\nimport React, { useState, useEffect, useRef, useImperativeHandle, forwardRef, useCallback } from 'react';\nimport { \n\tFormatBold, \n\tFormatItalic, \n\tFormatUnderlined, \n\tFormatStrikethrough,\n\tFormatAlignLeft,\n\tFormatAlignCenter,\n\tFormatAlignRight,\n\tFormatAlignJustify,\n\tFormatListBulleted,\n\tFormatListNumbered,\n\tLink as LinkIcon,\n\tImage as ImageIcon,\n\tTableChart,\n\tCode,\n\tUndo,\n\tRedo,\n\tSubscript,\n\tSuperscript,\n\tClose,\n\tSwapHoriz,\n\tAddCircleOutline,\n\tRemoveCircleOutline,\n} from '@mui/icons-material';\nimport { IconButton, Divider, Select, MenuItem, Tooltip, Box, Button, Popover } from '@mui/material';\nimport { uploadFiles } from '../../utils/common';\nimport { getToken } from '../../utils/common';\nimport { postV1Drive } from '../../api-client/api.drive/api';\nimport { getApiConfig } from '../../utils/api-config';\nimport { CellProperties } from './table/types';\nimport { prepareForEditing, prepareForSaving } from './utils/handlebars-protection';\nimport './custom-editor.css';\n\nexport interface CustomEditorProps {\n\teditorRef?: React.RefObject<any>;\n\tdata: string;\n\thandleEditorReady: (editor: any) => void;\n\tonError?: (error: Error) => void;\n\tconfig?: any;\n\t[key: string]: any;\n}\n\nconst FONT_FAMILIES = [\n\t'Arial', 'Courier New', 'Georgia', 'Times New Roman', 'Trebuchet MS', 'Verdana'\n];\n\nconst FONT_SIZES = ['10px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px'];\n\nconst HEADING_FORMATS = [\n\t{ value: 'p', label: 'Paragraph' },\n\t{ value: 'h1', label: 'Heading 1' },\n\t{ value: 'h2', label: 'Heading 2' },\n\t{ value: 'h3', label: 'Heading 3' },\n\t{ value: 'h4', label: 'Heading 4' },\n\t{ value: 'h5', label: 'Heading 5' },\n\t{ value: 'h6', label: 'Heading 6' }\n];\n\nconst PRESET_COLORS = [\n\t'#000000', '#434343', '#666666', '#999999', '#b7b7b7', '#cccccc', '#d9d9d9', '#ffffff',\n\t'#ff0000', '#ff9900', '#ffff00', '#00ff00', '#00ffff', '#4a86e8', '#9900ff', '#ff00ff',\n\t'#ea9999', '#f9cb9c', '#ffe599', '#b6d7a8', '#a2c4c9', '#9fc5e8', '#b4a7d6', '#d5a6bd',\n\t'#e06666', '#f6b26b', '#ffd966', '#93c47d', '#76a5af', '#6fa8dc', '#8e7cc3', '#c27ba0',\n\t'#cc0000', '#e69138', '#f1c232', '#6aa84f', '#45818e', '#3d85c8', '#674ea7', '#85200c',\n];\n\nexport const CustomEditor = forwardRef<any, CustomEditorProps>((props, ref) => {\n\tconst {\n\t\teditorRef: editorRefProp,\n\t\tdata = '',\n\t\thandleEditorReady,\n\t\tonError,\n\t\tconfig = {},\n\t\t...rest\n\t} = props;\n\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [fontFamily, setFontFamily] = useState('Arial');\n\tconst [fontSize, setFontSize] = useState('14px');\n\tconst [headingFormat, setHeadingFormat] = useState('p');\n\tconst [showSourceMode, setShowSourceMode] = useState(false);\n\tconst [sourceCode, setSourceCode] = useState(data);\n\tconst [history, setHistory] = useState<string[]>([data]);\n\tconst [historyIndex, setHistoryIndex] = useState(0);\n\tconst [selectedElement, setSelectedElement] = useState<HTMLElement | null>(null);\n\tconst [resizeHandles, setResizeHandles] = useState<{ x: number; y: number; width: number; height: number } | null>(null);\n\tconst [showTablePicker, setShowTablePicker] = useState(false);\n\tconst [tablePickerAnchor, setTablePickerAnchor] = useState<HTMLElement | null>(null);\n\tconst [textSelectionAnchor, setTextSelectionAnchor] = useState<{ x: number; y: number } | null>(null);\n\tconst [showTextToolbar, setShowTextToolbar] = useState(false);\n\tconst [colorPickerState, setColorPickerState] = useState<{ anchor: HTMLElement; type: 'text' | 'bg' } | null>(null);\n\t\n\t// Table editing state\n\tconst [selectedCell, setSelectedCell] = useState<HTMLTableCellElement | null>(null);\n\tconst [showTableToolbar, setShowTableToolbar] = useState(false);\n\tconst [tableToolbarPosition, setTableToolbarPosition] = useState<{ x: number; y: number } | null>(null);\n\tconst [cellProperties, setCellProperties] = useState<CellProperties>({\n\t\tborderStyle: 'solid',\n\t\tborderColor: '#ddd',\n\t\tborderWidth: '1px',\n\t\tbackgroundColor: 'transparent',\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tpadding: '8px',\n\t\ttextAlign: 'left',\n\t\tverticalAlign: 'middle'\n\t});\n\t\n\tconst contentEditableRef = useRef<HTMLDivElement>(null);\n\tconst sourceCodeRef = useRef<string>(data);\n\tconst onEditorChangeRef = useRef(props.onEditorChange);\n\tconst handleEditorReadyRef = useRef(handleEditorReady);\n\tuseEffect(() => { onEditorChangeRef.current = props.onEditorChange; });\n\tuseEffect(() => { handleEditorReadyRef.current = handleEditorReady; });\n\n\t// FIX: Dedicated ref for source-mode textarea content.\n\t// sourceCodeRef is shared with visual-mode (handleInput overwrites it on every\n\t// keystroke). sourceViewContentRef is ONLY written by source-mode handlers\n\t// (handleSourceCodeChange, handleHtmlFileUpload, handleToggleSource entering\n\t// source mode) so it is never corrupted by visual-mode activity.\n\tconst sourceViewContentRef = useRef<string>(data);\n\n\tconst fileInputRef = useRef<HTMLInputElement>(null);\n\tconst htmlFileInputRef = useRef<HTMLInputElement>(null);\n\tconst replaceImageInputRef = useRef<HTMLInputElement>(null);\n\tconst resizeStartRef = useRef<{ x: number; y: number; width: number; height: number; handle: string } | null>(null);\n\tconst handlebarsMapRef = useRef<{ [key: string]: string }>({});\n\tconst apiConfig = getApiConfig();\n\n\t// Update source code when data prop changes\n\tuseEffect(() => {\n\t\tif(!data)return\n\t\tconst { html: protectedHtml, map } = prepareForEditing(data);\n\t\thandlebarsMapRef.current = map;\n\t\tsourceCodeRef.current = data; // Store original with Handlebars\n\t\t\n\t\tif (contentEditableRef.current && contentEditableRef.current.innerHTML !== protectedHtml) {\n\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t}\n\t}, [data]);\n\n\t// Initialize editor\n\tuseEffect(() => {\n\t\tif (contentEditableRef.current) {\n\t\t\ttry {\n\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(data || '');\n\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\tconst adapter = {\n\t\t\t\t\tgetData: () => {\n\t\t\t\t\t\t// Restore Handlebars syntax before returning\n\t\t\t\t\t\treturn prepareForSaving(sourceCodeRef.current, handlebarsMapRef.current);\n\t\t\t\t\t},\n\t\t\t\t\tsetData: (newData: string) => {\n\t\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(newData);\n\t\t\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\t\t\tsourceCodeRef.current = newData;\n\t\t\t\t\t\tif (contentEditableRef.current) {\n\t\t\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tmodel: {\n\t\t\t\t\t\tinsertContent: (fragment: string) => {\n\t\t\t\t\t\t\texecCommand('insertHTML', fragment);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tprocessor: {\n\t\t\t\t\t\t\ttoView: (html: string) => html\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttoModel: (html: string) => html\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\thandleEditorReadyRef.current?.(adapter);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error('[CustomEditor] init effect error:', e);\n\t\t\t}\n\t\t}\n\t}, []);\n\n\t// Execute formatting command\n\tconst execCommand = useCallback((command: string, value?: string) => {\n\t\tdocument.execCommand(command, false, value);\n\t\tif (contentEditableRef.current) {\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t}\n\t}, []);\n\n\t// Save to history for undo/redo\n\tconst saveToHistory = useCallback(() => {\n\t\tif (contentEditableRef.current) {\n\t\t\tconst newHistory = history.slice(0, historyIndex + 1);\n\t\t\tnewHistory.push(contentEditableRef.current.innerHTML);\n\t\t\tsetHistory(newHistory.slice(-50)); // Keep last 50 states\n\t\t\tsetHistoryIndex(newHistory.length - 1);\n\t\t}\n\t}, [history, historyIndex]);\n\n\t// Undo\n\tconst handleUndo = useCallback(() => {\n\t\tif (historyIndex > 0) {\n\t\t\tconst newIndex = historyIndex - 1;\n\t\t\tsetHistoryIndex(newIndex);\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tcontentEditableRef.current.innerHTML = history[newIndex];\n\t\t\t\tsourceCodeRef.current = history[newIndex];\n\t\t\t}\n\t\t}\n\t}, [history, historyIndex]);\n\n\t// Redo\n\tconst handleRedo = useCallback(() => {\n\t\tif (historyIndex < history.length - 1) {\n\t\t\tconst newIndex = historyIndex + 1;\n\t\t\tsetHistoryIndex(newIndex);\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tcontentEditableRef.current.innerHTML = history[newIndex];\n\t\t\t\tsourceCodeRef.current = history[newIndex];\n\t\t\t}\n\t\t}\n\t}, [history, historyIndex]);\n\n\t// Handle content changes in visual mode.\n\t// IMPORTANT: only updates sourceCodeRef (visual-mode ref).\n\t// Must NOT touch sourceViewContentRef — that ref belongs exclusively to source mode.\n\tconst handleInput = useCallback(() => {\n\t\tif (contentEditableRef.current) {\n\t\t\tconst visualHtml = contentEditableRef.current.innerHTML;\n\t\t\t// Restore Handlebars before saving to sourceCodeRef\n\t\t\tsourceCodeRef.current = prepareForSaving(visualHtml, handlebarsMapRef.current);\n\t\t\tonEditorChangeRef.current?.(sourceCodeRef.current);\n\t\t}\n\t}, []);\n\n\t// Strip external formatting from pasted HTML.\n\tconst sanitizePastedHtml = useCallback((html: string): string => {\n\t\tconst doc = new DOMParser().parseFromString(html, 'text/html');\n\n\t\t// Unwrap <span> elements — they carry font/color styles from external sources\n\t\tdoc.querySelectorAll('span').forEach(span => {\n\t\t\tconst frag = document.createDocumentFragment();\n\t\t\twhile (span.firstChild) frag.appendChild(span.firstChild);\n\t\t\tspan.parentNode?.replaceChild(frag, span);\n\t\t});\n\n\t\t// Convert <a> links to plain text\n\t\tdoc.querySelectorAll('a').forEach(a => {\n\t\t\tconst text = document.createTextNode(a.textContent || '');\n\t\t\ta.parentNode?.replaceChild(text, a);\n\t\t});\n\n\t\t// Strip style and class from every remaining element\n\t\tdoc.querySelectorAll('[style], [class], [color], [bgcolor], [face]').forEach(el => {\n\t\t\tel.removeAttribute('style');\n\t\t\tel.removeAttribute('class');\n\t\t\tel.removeAttribute('color');\n\t\t\tel.removeAttribute('bgcolor');\n\t\t\tel.removeAttribute('face');\n\t\t});\n\n\t\treturn doc.body.innerHTML;\n\t}, []);\n\n\t// Handle paste — sanitize external HTML before inserting\n\tconst handlePaste = useCallback((e: React.ClipboardEvent) => {\n\t\te.preventDefault();\n\t\tconst html = e.clipboardData.getData('text/html');\n\t\tconst text = e.clipboardData.getData('text/plain');\n\n\t\tif (html) {\n\t\t\texecCommand('insertHTML', sanitizePastedHtml(html));\n\t\t} else {\n\t\t\texecCommand('insertText', text);\n\t\t}\n\t}, [execCommand, sanitizePastedHtml]);\n\n\t// Handle image upload\n\tconst handleImageUpload = useCallback(async (file: File) => {\n\t\ttry {\n\t\t\tconst uFiles = await uploadFiles([file], 'document');\n\t\t\tconst token = getToken();\n\t\t\tconst payload = {\n\t\t\t\t...token,\n\t\t\t\t'x-timezone': token['x-timezone']?.toString() || '',\n\t\t\t\ttitle: file?.name.split('.')[0],\n\t\t\t\tpath: '/',\n\t\t\t\tis_private: true,\n\t\t\t\tis_directory: false,\n\t\t\t\tfile_size: file.size,\n\t\t\t\tis_child: false,\n\t\t\t\tfile_extension: file?.name.split('.')[1],\n\t\t\t\ttype: 'image',\n\t\t\t\tmime_type: file.type,\n\t\t\t\turl: `${apiConfig?.s3BucketUrl}${uFiles[0]}`\n\t\t\t};\n\t\t\t\n\t\t\tawait postV1Drive(payload);\n\t\t\texecCommand('insertHTML', `<img src=\"${payload.url}\" alt=\"${file.name}\" style=\"max-width: 100%;\" />`);\n\t\t} catch (error) {\n\t\t\tconsole.error('Image upload failed:', error);\n\t\t\tonError?.(error as Error);\n\t\t}\n\t}, [apiConfig, execCommand, onError]);\n\n\t// Handle file input change\n\tconst handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (file) {\n\t\t\thandleImageUpload(file);\n\t\t}\n\t}, [handleImageUpload]);\n\n\t// Insert link\n\tconst handleInsertLink = useCallback(() => {\n\t\tconst url = prompt('Enter URL:');\n\t\tif (url) {\n\t\t\texecCommand('createLink', url);\n\t\t}\n\t}, [execCommand]);\n\n\t// Insert table\n\tconst handleInsertTable = useCallback(() => {\n\t\tconst rows = prompt('Number of rows:', '3');\n\t\tconst cols = prompt('Number of columns:', '3');\n\t\t\n\t\tif (rows && cols) {\n\t\t\tlet tableHTML = '<table border=\"1\" style=\"border-collapse: collapse; width: 100%;\">';\n\t\t\ttableHTML += '<thead><tr>';\n\t\t\tfor (let i = 0; i < parseInt(cols); i++) {\n\t\t\t\ttableHTML += '<th style=\"border: 1px solid #ddd; padding: 8px;\">Header</th>';\n\t\t\t}\n\t\t\ttableHTML += '</tr></thead><tbody>';\n\t\t\tfor (let i = 0; i < parseInt(rows); i++) {\n\t\t\t\ttableHTML += '<tr>';\n\t\t\t\tfor (let j = 0; j < parseInt(cols); j++) {\n\t\t\t\t\ttableHTML += '<td style=\"border: 1px solid #ddd; padding: 8px;\"></td>';\n\t\t\t\t}\n\t\t\t\ttableHTML += '</tr>';\n\t\t\t}\n\t\t\ttableHTML += '</tbody></table>';\n\t\t\t\n\t\t\texecCommand('insertHTML', tableHTML);\n\t\t}\n\t}, [execCommand]);\n\n\t// Table picker component\n\tconst TablePicker = () => {\n\t\tconst [hoverCell, setHoverCell] = useState<{ row: number; col: number } | null>(null);\n\t\tconst maxRows = 10;\n\t\tconst maxCols = 10;\n\t\t\n\t\t// Calculate position relative to button\n\t\tconst buttonRect = tablePickerAnchor?.getBoundingClientRect();\n\t\tconst editorContainer = document.querySelector('.custom-editor-container');\n\t\tconst containerRect = editorContainer?.getBoundingClientRect();\n\t\t\n\t\tlet top = 0;\n\t\tlet left = 0;\n\t\t\n\t\tif (buttonRect && containerRect) {\n\t\t\ttop = buttonRect.bottom - containerRect.top + 5;\n\t\t\tleft = buttonRect.left - containerRect.left;\n\t\t}\n\t\t\n\t\treturn (\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: `${top}px`,\n\t\t\t\t\tleft: `${left}px`,\n\t\t\t\t\tbgcolor: 'white',\n\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\tp: 2,\n\t\t\t\t\tboxShadow: 3,\n\t\t\t\t\tzIndex: 9999\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Box sx={{ display: 'grid', gridTemplateColumns: `repeat(${maxCols}, 20px)`, gap: '2px', mb: 1 }}>\n\t\t\t\t\t{Array.from({ length: maxRows }).map((_, rowIndex) =>\n\t\t\t\t\t\tArray.from({ length: maxCols }).map((_, colIndex) => (\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tkey={`${rowIndex}-${colIndex}`}\n\t\t\t\t\t\t\t\tonMouseEnter={() => setHoverCell({ row: rowIndex + 1, col: colIndex + 1 })}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\thandleInsertTableFromPicker(rowIndex + 1, colIndex + 1);\n\t\t\t\t\t\t\t\t\tsetHoverCell(null);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\twidth: 20,\n\t\t\t\t\t\t\t\t\theight: 20,\n\t\t\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\t\t\tbgcolor: hoverCell && rowIndex < hoverCell.row && colIndex < hoverCell.col ? '#1976d2' : 'white',\n\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\t\t\t\tbgcolor: '#1976d2'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t\t<Box sx={{ textAlign: 'center', fontSize: '12px', color: '#666' }}>\n\t\t\t\t\t{hoverCell ? `${hoverCell.row} × ${hoverCell.col}` : '1 × 1'}\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t);\n\t};\n\n\t// Font family change\n\tconst handleFontFamilyChange = useCallback((e: any) => {\n\t\tconst family = e.target.value;\n\t\tsetFontFamily(family);\n\t\texecCommand('fontName', family);\n\t}, [execCommand]);\n\n\t// Font size change\n\tconst handleFontSizeChange = useCallback((e: any) => {\n\t\tconst size = e.target.value;\n\t\tsetFontSize(size);\n\t\tdocument.execCommand('fontSize', false, '7');\n\t\tif (contentEditableRef.current) {\n\t\t\tconst fontTags = Array.from(\n\t\t\t\tcontentEditableRef.current.querySelectorAll('font[size=\"7\"]')\n\t\t\t);\n\t\t\tfontTags.forEach(tag => {\n\t\t\t\tconst span = document.createElement('span');\n\t\t\t\tspan.style.fontSize = size;\n\t\t\t\twhile (tag.firstChild) span.appendChild(tag.firstChild);\n\t\t\t\ttag.parentNode?.replaceChild(span, tag);\n\t\t\t});\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t\tonEditorChangeRef.current?.(sourceCodeRef.current);\n\t\t}\n\t}, [saveToHistory]);\n\n\t// Heading format change\n\tconst handleHeadingFormatChange = useCallback((e: any) => {\n\t\tconst format = e.target.value;\n\t\tsetHeadingFormat(format);\n\t\texecCommand('formatBlock', `<${format}>`);\n\t}, [execCommand]);\n\n\t// Toggle source mode\n\t// FIX: Use sourceViewContentRef (not sourceCodeRef) as the single source of\n\t// truth for the textarea. This prevents handleInput (visual mode) from ever\n\t// overwriting content the user typed/pasted into the source textarea.\n\tconst handleToggleSource = useCallback(() => {\n\t\tif (!showSourceMode) {\n\t\t\t// Entering source mode: MUST capture content BEFORE state change\n\t\t\t// because contentEditableRef.current becomes null after re-render\n\t\t\tconst visualHtml = contentEditableRef.current?.innerHTML || sourceCodeRef.current || data;\n\t\t\tconst restoredHtml = prepareForSaving(visualHtml, handlebarsMapRef.current);\n\t\t\t\n\t\t\t// Update all refs and state\n\t\t\tsetSourceCode(restoredHtml);\n\t\t\tsourceViewContentRef.current = restoredHtml;\n\t\t\tsourceCodeRef.current = restoredHtml;\n\t\t\t\n\t\t\t// Now switch mode (this will unmount contentEditable and mount textarea)\n\t\t\tsetShowSourceMode(true);\n\t\t} else {\n\t\t\t// Leaving source mode: read from sourceViewContentRef\n\t\t\t// State change will mount contentEditable, then we update it in useEffect\n\t\t\tconst currentSource = sourceViewContentRef.current.trim();\n\t\t\t\n\t\t\tif (!currentSource) {\n\t\t\t\t// Empty source — use default\n\t\t\t\tconst defaultHtml = '<p><br></p>';\n\t\t\t\tsourceCodeRef.current = defaultHtml;\n\t\t\t\tsourceViewContentRef.current = defaultHtml;\n\t\t\t\tsetSourceCode(defaultHtml);\n\t\t\t} else {\n\t\t\t\tsourceCodeRef.current = currentSource;\n\t\t\t}\n\t\t\t\n\t\t\t// Switch mode first\n\t\t\tsetShowSourceMode(false);\n\t\t}\n\t}, [showSourceMode, data]);\n\n\t// Effect to update contentEditable when switching from source to visual mode\n\t// Use a ref to track if we've already processed this mode switch\n\tconst hasProcessedModeSwitch = useRef(false);\n\t\n\tuseEffect(() => {\n\t\t// Only run when switching TO visual mode (showSourceMode becomes false)\n\t\t// and we haven't already processed this switch\n\t\tif (!showSourceMode && contentEditableRef.current && !hasProcessedModeSwitch.current) {\n\t\t\thasProcessedModeSwitch.current = true;\n\t\t\t\n\t\t\ttry {\n\t\t\t\tconst currentSource = sourceCodeRef.current.trim();\n\t\t\t\t\n\t\t\t\tif (!currentSource) {\n\t\t\t\t\tconst defaultHtml = '<p><br></p>';\n\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(defaultHtml);\n\t\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t} else {\n\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(currentSource);\n\t\t\t\t\thandlebarsMapRef.current = map;\n\n\t\t\t\t\tif (!protectedHtml || protectedHtml.trim() === '') {\n\t\t\t\t\t\tconsole.warn('Protected HTML is empty, using original source');\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = currentSource;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Save to history without triggering re-render loop\n\t\t\t\tconst newHistory = history.slice(0, historyIndex + 1);\n\t\t\t\tnewHistory.push(contentEditableRef.current.innerHTML);\n\t\t\t\tsetHistory(newHistory.slice(-50));\n\t\t\t\tsetHistoryIndex(newHistory.length - 1);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error updating visual mode:', error);\n\t\t\t\t// Fallback: use raw HTML\n\t\t\t\tif (contentEditableRef.current && sourceCodeRef.current) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = sourceCodeRef.current;\n\t\t\t\t\t} catch (innerError) {\n\t\t\t\t\t\tconsole.error('Failed to render HTML:', innerError);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Reset the flag when entering source mode\n\t\tif (showSourceMode) {\n\t\t\thasProcessedModeSwitch.current = false;\n\t\t}\n\t}, [showSourceMode, history, historyIndex]);\n\n\t// Handle HTML file upload\n\t// FIX: also write to sourceViewContentRef so the uploaded content is not\n\t// lost when the user toggles to visual mode.\n\tconst handleHtmlFileUpload = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (!file) return;\n\n\t\tconst reader = new FileReader();\n\t\t\n\t\treader.onload = (event) => {\n\t\t\tconst htmlContent = event.target?.result as string;\n\t\t\tif (htmlContent) {\n\t\t\t\t// Update both textarea state and the dedicated source-mode ref\n\t\t\t\tsetSourceCode(htmlContent);\n\t\t\t\tsourceViewContentRef.current = htmlContent; // FIX: was sourceCodeRef.current\n\t\t\t\tsourceCodeRef.current = htmlContent;\n\t\t\t\t\n\t\t\t\t// If in visual mode, update the visual editor immediately\n\t\t\t\tif (!showSourceMode && contentEditableRef.current) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { html: protectedHtml, map } = prepareForEditing(htmlContent);\n\t\t\t\t\t\thandlebarsMapRef.current = map;\n\t\t\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t\t\t\tsaveToHistory();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('Error processing uploaded HTML:', error);\n\t\t\t\t\t\talert('There was an error processing the HTML file. Please check the file and try again.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treader.onerror = () => {\n\t\t\talert('Failed to read HTML file. Please try again.');\n\t\t};\n\n\t\treader.readAsText(file);\n\t\t\n\t\t// Reset input so the same file can be uploaded again\n\t\te.target.value = '';\n\t}, [showSourceMode, saveToHistory]);\n\n\t// Handle source code textarea change.\n\t// FIX: write to sourceViewContentRef (not sourceCodeRef) so visual-mode\n\t// handleInput can never overwrite what the user is typing in the textarea.\n\tconst handleSourceCodeChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\tconst newCode = e.target.value;\n\t\tsetSourceCode(newCode);\n\t\tsourceViewContentRef.current = newCode; // FIX: was sourceCodeRef.current\n\t}, []);\n\n\t// Handle click on images/elements for selection\n\tconst handleContentClick = useCallback((e: React.MouseEvent) => {\n\t\tconst target = e.target as HTMLElement;\n\t\t\n\t\t// Check if clicked on image or table\n\t\tlet elementToSelect: HTMLElement | null = null;\n\t\t\n\t\tif (target.tagName === 'IMG') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\telementToSelect = target;\n\t\t} else if (target.tagName === 'TABLE') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\telementToSelect = target;\n\t\t} else if (target.tagName === 'TD' || target.tagName === 'TH' || target.tagName === 'TR' || target.tagName === 'TBODY' || target.tagName === 'THEAD') {\n\t\t\t// If clicked inside table, find the parent table\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\telementToSelect = target.closest('table');\n\t\t}\n\t\t\n\t\tif (elementToSelect) {\n\t\t\tsetSelectedElement(elementToSelect);\n\t\t\t\n\t\t\tconst rect = elementToSelect.getBoundingClientRect();\n\t\t\tconst containerRect = contentEditableRef.current?.getBoundingClientRect();\n\t\t\t\n\t\t\tif (containerRect) {\n\t\t\t\tsetResizeHandles({\n\t\t\t\t\tx: rect.left - containerRect.left,\n\t\t\t\t\ty: rect.top - containerRect.top,\n\t\t\t\t\twidth: rect.width,\n\t\t\t\t\theight: rect.height\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tsetSelectedElement(null);\n\t\t\tsetResizeHandles(null);\n\t\t}\n\t}, []);\n\n\t// Delete selected element\n\tconst handleDeleteSelected = useCallback(() => {\n\t\tif (selectedElement) {\n\t\t\tselectedElement.remove();\n\t\t\tsetSelectedElement(null);\n\t\t\tsetResizeHandles(null);\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\tsaveToHistory();\n\t\t\t}\n\t\t}\n\t}, [selectedElement, saveToHistory]);\n\n\t// Replace image\n\tconst handleReplaceImage = useCallback(async (file: File) => {\n\t\tif (!selectedElement || selectedElement.tagName !== 'IMG') return;\n\t\t\n\t\ttry {\n\t\t\tconst uFiles = await uploadFiles([file], 'document');\n\t\t\tconst token = getToken();\n\t\t\tconst payload = {\n\t\t\t\t...token,\n\t\t\t\t'x-timezone': token['x-timezone']?.toString() || '',\n\t\t\t\ttitle: file?.name.split('.')[0],\n\t\t\t\tpath: '/',\n\t\t\t\tis_private: true,\n\t\t\t\tis_directory: false,\n\t\t\t\tfile_size: file.size,\n\t\t\t\tis_child: false,\n\t\t\t\tfile_extension: file?.name.split('.')[1],\n\t\t\t\ttype: 'image',\n\t\t\t\tmime_type: file.type,\n\t\t\t\turl: `${apiConfig?.s3BucketUrl}${uFiles[0]}`\n\t\t\t};\n\t\t\t\n\t\t\tawait postV1Drive(payload);\n\t\t\t(selectedElement as HTMLImageElement).src = payload.url;\n\t\t\t\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\tsaveToHistory();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Image upload failed:', error);\n\t\t\tonError?.(error as Error);\n\t\t}\n\t}, [selectedElement, apiConfig, onError, saveToHistory]);\n\n\t// Handle replace image file input\n\tconst handleReplaceImageChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (file) {\n\t\t\thandleReplaceImage(file);\n\t\t}\n\t}, [handleReplaceImage]);\n\n\t// Handle text selection\n\tconst handleTextSelection = useCallback(() => {\n\t\tconst selection = window.getSelection();\n\t\tif (selection && !selection.isCollapsed && selection.rangeCount > 0) {\n\t\t\tconst range = selection.getRangeAt(0);\n\t\t\tconst rect = range.getBoundingClientRect();\n\t\t\tconst containerRect = contentEditableRef.current?.getBoundingClientRect();\n\t\t\t\n\t\t\tif (containerRect && rect.width > 0) {\n\t\t\t\tsetTextSelectionAnchor({\n\t\t\t\t\tx: rect.left + rect.width / 2,\n\t\t\t\t\ty: rect.top - 10\n\t\t\t\t});\n\t\t\t\tsetShowTextToolbar(true);\n\t\t\t}\n\n\t\t\t// Sync font size dropdown to the selected text's actual font size.\n\t\t\t// Walk up from the anchor node looking for an explicit inline font-size.\n\t\t\tlet node: Node | null = selection.anchorNode;\n\t\t\tif (node?.nodeType === Node.TEXT_NODE) node = node.parentElement;\n\t\t\tlet detectedSize: string | null = null;\n\t\t\tlet current = node instanceof HTMLElement ? node : null;\n\t\t\twhile (current && current !== contentEditableRef.current) {\n\t\t\t\tif (current.style.fontSize) {\n\t\t\t\t\tdetectedSize = current.style.fontSize;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcurrent = current.parentElement;\n\t\t\t}\n\t\t\tsetFontSize(detectedSize ?? '14px');\n\t\t} else {\n\t\t\tsetShowTextToolbar(false);\n\t\t\tsetTextSelectionAnchor(null);\n\t\t}\n\t}, []);\n\n\t// Handle resize start\n\tconst handleResizeStart = useCallback((e: React.MouseEvent, handle: string) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t\n\t\tif (selectedElement && resizeHandles) {\n\t\t\tresizeStartRef.current = {\n\t\t\t\tx: e.clientX,\n\t\t\t\ty: e.clientY,\n\t\t\t\twidth: resizeHandles.width,\n\t\t\t\theight: resizeHandles.height,\n\t\t\t\thandle\n\t\t\t};\n\t\t\t\n\t\t\t// Add event listeners\n\t\t\tdocument.addEventListener('mousemove', handleResizeMove as any);\n\t\t\tdocument.addEventListener('mouseup', handleResizeEnd);\n\t\t}\n\t}, [selectedElement, resizeHandles]);\n\n\t// Handle resize move\n\tconst handleResizeMove = useCallback((e: MouseEvent) => {\n\t\tif (!resizeStartRef.current || !selectedElement || !resizeHandles) return;\n\t\t\n\t\tconst { x, y, width, height, handle } = resizeStartRef.current;\n\t\tconst deltaX = e.clientX - x;\n\t\tconst deltaY = e.clientY - y;\n\t\t\n\t\tlet newWidth = width;\n\t\tlet newHeight = height;\n\t\t\n\t\tif (handle.includes('e')) {\n\t\t\tnewWidth = Math.max(50, width + deltaX);\n\t\t}\n\t\tif (handle.includes('w')) {\n\t\t\t// West handle: shrink/grow from the left — invert delta\n\t\t\tnewWidth = Math.max(50, width - deltaX);\n\t\t}\n\t\tif (handle.includes('s')) {\n\t\t\tnewHeight = Math.max(50, height + deltaY);\n\t\t}\n\t\tif (handle.includes('n')) {\n\t\t\tnewHeight = Math.max(50, height - deltaY);\n\t\t}\n\t\t\n\t\t// Maintain aspect ratio for corner handles on images\n\t\tif (handle.length === 2 && selectedElement.tagName === 'IMG') {\n\t\t\tconst aspectRatio = width / height;\n\t\t\tnewHeight = newWidth / aspectRatio;\n\t\t}\n\t\t\n\t\tselectedElement.style.width = `${newWidth}px`;\n\t\tif (selectedElement.tagName === 'IMG' || selectedElement.tagName === 'TABLE') {\n\t\t\tselectedElement.style.height = `${newHeight}px`;\n\t\t}\n\t\t\n\t\t// Update resize handles position\n\t\tconst rect = selectedElement.getBoundingClientRect();\n\t\tconst containerRect = contentEditableRef.current?.getBoundingClientRect();\n\t\t\n\t\tif (containerRect) {\n\t\t\tsetResizeHandles({\n\t\t\t\tx: rect.left - containerRect.left,\n\t\t\t\ty: rect.top - containerRect.top,\n\t\t\t\twidth: rect.width,\n\t\t\t\theight: rect.height\n\t\t\t});\n\t\t}\n\t}, [selectedElement, resizeHandles]);\n\n\t// Handle resize end\n\tconst handleResizeEnd = useCallback(() => {\n\t\tdocument.removeEventListener('mousemove', handleResizeMove as any);\n\t\tdocument.removeEventListener('mouseup', handleResizeEnd);\n\t\t\n\t\tresizeStartRef.current = null;\n\t\tif (contentEditableRef.current) {\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t}\n\t}, [handleResizeMove, saveToHistory]);\n\n\t// Show table picker\n\tconst handleShowTablePicker = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n\t\tsetTablePickerAnchor(e.currentTarget);\n\t\tsetShowTablePicker(true);\n\t}, []);\n\n\t// Insert table with visual picker\n\tconst handleInsertTableFromPicker = useCallback((rows: number, cols: number) => {\n\t\t// Focus the editor first\n\t\tif (contentEditableRef.current) {\n\t\t\tcontentEditableRef.current.focus();\n\t\t}\n\t\t\n\t\t// Create table HTML\n\t\tlet tableHTML = '<table border=\"1\" style=\"border-collapse: collapse; width: 100%; margin: 10px 0;\">';\n\t\ttableHTML += '<tbody>';\n\t\tfor (let i = 0; i < rows; i++) {\n\t\t\ttableHTML += '<tr>';\n\t\t\tfor (let j = 0; j < cols; j++) {\n\t\t\t\ttableHTML += '<td style=\"border: 1px solid #ddd; padding: 8px; min-width: 50px;\"></td>';\n\t\t\t}\n\t\t\ttableHTML += '</tr>';\n\t\t}\n\t\ttableHTML += '</tbody></table><p><br></p>';\n\t\t\n\t\t// Insert using execCommand\n\t\tdocument.execCommand('insertHTML', false, tableHTML);\n\t\t\n\t\t// Update refs and history\n\t\tif (contentEditableRef.current) {\n\t\t\tsourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\tsaveToHistory();\n\t\t}\n\t\t\n\t\t// Close picker\n\t\tsetShowTablePicker(false);\n\t\tsetTablePickerAnchor(null);\n\t}, [saveToHistory]);\n\n\t// Create adapter object for ref\n\tconst adapter = {\n\t\tgetData: () => {\n\t\t\t// Always restore Handlebars syntax when getting data\n\t\t\treturn prepareForSaving(sourceCodeRef.current, handlebarsMapRef.current);\n\t\t},\n\t\tsetData: (newData: string) => {\n\t\t\tconst { html: protectedHtml, map } = prepareForEditing(newData);\n\t\t\thandlebarsMapRef.current = map;\n\t\t\tsourceCodeRef.current = newData;\n\t\t\tif (contentEditableRef.current) {\n\t\t\t\tcontentEditableRef.current.innerHTML = protectedHtml;\n\t\t\t}\n\t\t},\n\t\tmodel: {\n\t\t\tinsertContent: (fragment: string) => {\n\t\t\t\texecCommand('insertHTML', fragment);\n\t\t\t}\n\t\t},\n\t\tdata: {\n\t\t\tprocessor: {\n\t\t\t\ttoView: (html: string) => html\n\t\t\t},\n\t\t\ttoModel: (html: string) => html\n\t\t}\n\t};\n\n\tuseImperativeHandle(ref, () => adapter, []);\n\t\n\tuseEffect(() => {\n\t\tif (editorRefProp) {\n\t\t\t(editorRefProp as any).current = adapter;\n\t\t}\n\t}, [editorRefProp]);\n\n\t// Prevents focus loss when toolbar buttons are pressed, keeping the editor\n\tconst toolbarCmd = (command: string, value?: string) => (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\texecCommand(command, value);\n\t};\n\n\tif (error) {\n\t\treturn (\n\t\t\t<div className=\"editor-error-container\">\n\t\t\t\t<div className=\"editor-error-message\">Editor Error: {error.message}</div>\n\t\t\t\t<button onClick={() => setError(null)} className=\"editor-retry-button\">\n\t\t\t\t\tRetry\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className='custom-editor-container'>\n\t\t\t{/* Menu Bar */}\n\t\t\t<Box sx={{ \n\t\t\t\tdisplay: 'flex', \n\t\t\t\talignItems: 'center',\n\t\t\t\tgap: 2,\n\t\t\t\tpx: 2,\n\t\t\t\tpy: 0.5,\n\t\t\t\tborderBottom: '1px solid #ddd',\n\t\t\t\tbgcolor: '#f8f9fa',\n\t\t\t\tfontSize: '13px'\n\t\t\t}}>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Edit</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>View</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Insert</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Format</span>\n\t\t\t\t<span style={{ cursor: 'pointer', color: '#333' }}>Help</span>\n\t\t\t</Box>\n\n\t\t\t{/* Toolbar */}\n\t\t\t<Box sx={{ \n\t\t\t\tdisplay: 'flex', \n\t\t\t\tflexWrap: 'wrap', \n\t\t\t\tgap: 0.5, \n\t\t\t\tp: 1, \n\t\t\t\tborderBottom: '1px solid #ddd',\n\t\t\t\tbgcolor: '#f5f5f5',\n\t\t\t\talignItems: 'center'\n\t\t\t}}>\n\t\t\t\t{/* Source Button - icon + label style matching the design */}\n\t\t\t\t<Tooltip title={showSourceMode ? 'Switch to Visual' : 'Switch to Source'}>\n\t\t\t\t\t<Box\n\t\t\t\t\t\tonClick={handleToggleSource}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\tpx: 1,\n\t\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\tborder: '1px solid',\n\t\t\t\t\t\t\tborderColor: showSourceMode ? 'primary.main' : 'transparent',\n\t\t\t\t\t\t\tbgcolor: showSourceMode ? 'primary.50' : 'transparent',\n\t\t\t\t\t\t\tcolor: showSourceMode ? 'primary.main' : 'text.secondary',\n\t\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\t\tbgcolor: showSourceMode ? 'primary.100' : 'grey.200',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttransition: 'all 0.15s ease',\n\t\t\t\t\t\t\tuserSelect: 'none',\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Code-file-with-edit icon, matching the screenshot */}\n\t\t\t\t\t\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t\t\t<path d=\"M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V8L14 2Z\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\"/>\n\t\t\t\t\t\t\t<polyline points=\"14,2 14,8 20,8\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\"/>\n\t\t\t\t\t\t\t<path d=\"M9 13L7 15L9 17\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n\t\t\t\t\t\t\t<path d=\"M15 13L17 15L15 17\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n\t\t\t\t\t\t\t<line x1=\"13\" y1=\"12\" x2=\"11\" y2=\"18\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span style={{ fontSize: '13px', fontWeight: 500 }}>Source</span>\n\t\t\t\t\t</Box>\n\t\t\t\t</Tooltip>\n\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Undo/Redo */}\n\t\t\t\t<Tooltip title=\"Undo\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleUndo} disabled={historyIndex === 0}>\n\t\t\t\t\t\t<Undo fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Redo\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleRedo} disabled={historyIndex === history.length - 1}>\n\t\t\t\t\t\t<Redo fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Heading Format */}\n\t\t\t\t<Select\n\t\t\t\t\tvalue={headingFormat}\n\t\t\t\t\tonChange={handleHeadingFormatChange}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tsx={{ minWidth: 100, height: 28, fontSize: '12px' }}\n\t\t\t\t>\n\t\t\t\t\t{HEADING_FORMATS.map(format => (\n\t\t\t\t\t\t<MenuItem key={format.value} value={format.value}>\n\t\t\t\t\t\t\t{format.label}\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Select>\n\t\t\t\t\n\t\t\t\t{/* Font Family */}\n\t\t\t\t<Select\n\t\t\t\t\tvalue={fontFamily}\n\t\t\t\t\tonChange={handleFontFamilyChange}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tsx={{ minWidth: 120, height: 28, fontSize: '12px' }}\n\t\t\t\t>\n\t\t\t\t\t{FONT_FAMILIES.map(font => (\n\t\t\t\t\t\t<MenuItem key={font} value={font} style={{ fontFamily: font }}>\n\t\t\t\t\t\t\t{font}\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Select>\n\t\t\t\t\n\t\t\t\t{/* Font Size */}\n\t\t\t\t<Select\n\t\t\t\t\tvalue={fontSize}\n\t\t\t\t\tonChange={handleFontSizeChange}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tsx={{ minWidth: 70, height: 28, fontSize: '12px' }}\n\t\t\t\t>\n\t\t\t\t\t{FONT_SIZES.map(size => (\n\t\t\t\t\t\t<MenuItem key={size} value={size}>{size}</MenuItem>\n\t\t\t\t\t))}\n\t\t\t\t</Select>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Text Formatting */}\n\t\t\t\t<Tooltip title=\"Bold\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('bold')}>\n\t\t\t\t\t\t<FormatBold fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Italic\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('italic')}>\n\t\t\t\t\t\t<FormatItalic fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Underline\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('underline')}>\n\t\t\t\t\t\t<FormatUnderlined fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Strikethrough\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('strikeThrough')}>\n\t\t\t\t\t\t<FormatStrikethrough fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Subscript\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('subscript')}>\n\t\t\t\t\t\t<Subscript fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Superscript\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('superscript')}>\n\t\t\t\t\t\t<Superscript fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Colors */}\n\t\t\t\t<Tooltip title=\"Text Color\">\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tsetColorPickerState({ anchor: e.currentTarget, type: 'text' });\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tstyle={{ width: 32, height: 28, border: '1px solid #ddd', borderRadius: '4px', backgroundColor: 'white' }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ fontSize: '16px', fontWeight: 'bold', color: '#000' }}>A</span>\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Background Color\">\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tsetColorPickerState({ anchor: e.currentTarget, type: 'bg' });\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tstyle={{ width: 32, height: 28, border: '1px solid #ddd', borderRadius: '4px', backgroundColor: '#fffde7' }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ fontSize: '16px', fontWeight: 'bold', color: '#000' }}>A</span>\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Alignment */}\n\t\t\t\t<Tooltip title=\"Align Left\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyLeft')}>\n\t\t\t\t\t\t<FormatAlignLeft fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Align Center\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyCenter')}>\n\t\t\t\t\t\t<FormatAlignCenter fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Align Right\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyRight')}>\n\t\t\t\t\t\t<FormatAlignRight fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Justify\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('justifyFull')}>\n\t\t\t\t\t\t<FormatAlignJustify fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Lists */}\n\t\t\t\t<Tooltip title=\"Bullet List\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('insertUnorderedList')}>\n\t\t\t\t\t\t<FormatListBulleted fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Numbered List\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('insertOrderedList')}>\n\t\t\t\t\t\t<FormatListNumbered fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t\n\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ mx: 0.5 }} />\n\t\t\t\t\n\t\t\t\t{/* Insert */}\n\t\t\t\t<Tooltip title=\"Insert Link\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleInsertLink}>\n\t\t\t\t\t\t<LinkIcon fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Insert Image\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={() => fileInputRef.current?.click()}>\n\t\t\t\t\t\t<ImageIcon fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Insert Table\">\n\t\t\t\t\t<IconButton size=\"small\" onClick={handleShowTablePicker}>\n\t\t\t\t\t\t<TableChart fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t\t<Tooltip title=\"Code\">\n\t\t\t\t\t<IconButton size=\"small\" onMouseDown={toolbarCmd('formatBlock', '<pre>')}>\n\t\t\t\t\t\t<Code fontSize=\"small\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t</Box>\n\t\t\t\n\t\t\t{/* Hidden file input */}\n\t\t\t<input\n\t\t\t\tref={fileInputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={handleFileChange}\n\t\t\t/>\n\t\t\t\n\t\t\t{/* Hidden HTML file input */}\n\t\t\t<input\n\t\t\t\tref={htmlFileInputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\".html,.htm,text/html\"\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={handleHtmlFileUpload}\n\t\t\t/>\n\t\t\t\n\t\t\t{/* Hidden file input for replace image */}\n\t\t\t<input\n\t\t\t\tref={replaceImageInputRef}\n\t\t\t\ttype=\"file\"\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tstyle={{ display: 'none' }}\n\t\t\t\tonChange={handleReplaceImageChange}\n\t\t\t/>\n\t\t\t\n\t\t\t{/* Content Area */}\n\t\t\t{showSourceMode ? (\n\t\t\t\t<textarea\n\t\t\t\t\tvalue={sourceCode}\n\t\t\t\t\tonChange={handleSourceCodeChange}\n\t\t\t\t\tclassName=\"custom-editor-source\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tminHeight: '300px',\n\t\t\t\t\t\tpadding: '16px',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\tfontFamily: 'Courier New, monospace',\n\t\t\t\t\t\tfontSize: '13px',\n\t\t\t\t\t\tlineHeight: '1.5',\n\t\t\t\t\t\tresize: 'vertical'\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div style={{ position: 'relative' }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={contentEditableRef}\n\t\t\t\t\t\tcontentEditable\n\t\t\t\t\t\tclassName=\"editor-content\"\n\t\t\t\t\t\tonInput={handleInput}\n\t\t\t\t\t\tonPaste={handlePaste}\n\t\t\t\t\t\tonClick={handleContentClick}\n\t\t\t\t\t\tonMouseUp={handleTextSelection}\n\t\t\t\t\t\tonKeyUp={handleTextSelection}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tminHeight: '300px',\n\t\t\t\t\t\t\tpadding: '16px',\n\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\tborderTop: 'none',\n\t\t\t\t\t\t\toutline: 'none',\n\t\t\t\t\t\t\tfontFamily: 'inherit',\n\t\t\t\t\t\t\tfontSize: 'inherit',\n\t\t\t\t\t\t\tlineHeight: '1.6',\n\t\t\t\t\t\t\tbackgroundColor: 'white'\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t\t{/* Resize Handles */}\n\t\t\t\t\t{selectedElement && resizeHandles && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\tleft: resizeHandles.x,\n\t\t\t\t\t\t\t\ttop: resizeHandles.y,\n\t\t\t\t\t\t\t\twidth: resizeHandles.width,\n\t\t\t\t\t\t\t\theight: resizeHandles.height,\n\t\t\t\t\t\t\t\tborder: '2px solid #1976d2',\n\t\t\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t\t\t\tzIndex: 1000\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Toolbar for selected element */}\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\ttop: -36,\n\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\t\t\tbgcolor: 'white',\n\t\t\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\t\tp: 0.25,\n\t\t\t\t\t\t\t\t\tboxShadow: 2,\n\t\t\t\t\t\t\t\t\tpointerEvents: 'auto'\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{selectedElement.tagName === 'IMG' && (\n\t\t\t\t\t\t\t\t\t<Tooltip title=\"Replace Image\">\n\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => replaceImageInputRef.current?.click()}\n\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SwapHoriz sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{selectedElement.tagName === 'TABLE' && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Add Row\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst tbody = selectedElement.querySelector('tbody');\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (tbody) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst colCount = selectedElement.querySelectorAll('tr:first-child td, tr:first-child th').length || 1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst tr = document.createElement('tr');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < colCount; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst td = document.createElement('td');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttd.style.cssText = 'border: 1px solid #ddd; padding: 8px; min-width: 50px;';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttr.appendChild(td);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttbody.appendChild(tr);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<AddCircleOutline sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Delete Row\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst rows = selectedElement.querySelectorAll('tbody tr');\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (rows.length > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trows[rows.length - 1].remove();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RemoveCircleOutline sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Add Column\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedElement.querySelectorAll('tr').forEach(tr => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isHeader = tr.closest('thead') !== null;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst cell = document.createElement(isHeader ? 'th' : 'td');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcell.style.cssText = 'border: 1px solid #ddd; padding: 8px; min-width: 50px;';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttr.appendChild(cell);\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<AddCircleOutline sx={{ fontSize: 14, transform: 'rotate(90deg)' }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t<Tooltip title=\"Delete Column\">\n\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst allRows = selectedElement.querySelectorAll('tr');\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst colCount = allRows[0]?.children.length || 0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (colCount > 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tallRows.forEach(tr => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (tr.lastElementChild) tr.removeChild(tr.lastElementChild);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (contentEditableRef.current) sourceCodeRef.current = contentEditableRef.current.innerHTML;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tsx={{ width: 22, height: 22 }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<RemoveCircleOutline sx={{ fontSize: 14, transform: 'rotate(90deg)' }} />\n\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<Tooltip title=\"Delete\">\n\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tonClick={handleDeleteSelected}\n\t\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\t\twidth: 22,\n\t\t\t\t\t\t\t\t\t\t\theight: 22,\n\t\t\t\t\t\t\t\t\t\t\tcolor: '#f44336',\n\t\t\t\t\t\t\t\t\t\t\t'&:hover': { bgcolor: '#ffebee' }\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Close sx={{ fontSize: 14 }} />\n\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* Corner and edge handles */}\n\t\t\t\t\t\t\t{['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'].map(handle => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={handle}\n\t\t\t\t\t\t\t\t\tonMouseDown={(e) => handleResizeStart(e, handle)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\t\t\t\twidth: 8,\n\t\t\t\t\t\t\t\t\t\theight: 8,\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: '#1976d2',\n\t\t\t\t\t\t\t\t\t\tborder: '1px solid white',\n\t\t\t\t\t\t\t\t\t\tpointerEvents: 'auto',\n\t\t\t\t\t\t\t\t\t\tcursor: `${handle}-resize`,\n\t\t\t\t\t\t\t\t\t\t...(handle === 'nw' && { top: -4, left: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'n' && { top: -4, left: '50%', transform: 'translateX(-50%)' }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'ne' && { top: -4, right: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'e' && { top: '50%', right: -4, transform: 'translateY(-50%)' }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'se' && { bottom: -4, right: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 's' && { bottom: -4, left: '50%', transform: 'translateX(-50%)' }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'sw' && { bottom: -4, left: -4 }),\n\t\t\t\t\t\t\t\t\t\t...(handle === 'w' && { top: '50%', left: -4, transform: 'translateY(-50%)' })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{/* Text Selection Toolbar */}\n\t\t\t\t\t{showTextToolbar && textSelectionAnchor && (\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\t\tleft: textSelectionAnchor.x,\n\t\t\t\t\t\t\t\ttop: textSelectionAnchor.y,\n\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -100%)',\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tgap: 0.5,\n\t\t\t\t\t\t\t\tbgcolor: '#333',\n\t\t\t\t\t\t\t\tcolor: 'white',\n\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\tp: 0.5,\n\t\t\t\t\t\t\t\tboxShadow: 3,\n\t\t\t\t\t\t\t\tzIndex: 10000\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip title=\"Bold\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonMouseDown={toolbarCmd('bold')}\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FormatBold fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Tooltip title=\"Italic\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonMouseDown={toolbarCmd('italic')}\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FormatItalic fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Tooltip title=\"Underline\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tonMouseDown={toolbarCmd('underline')}\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<FormatUnderlined fontSize=\"small\" />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Divider orientation=\"vertical\" flexItem sx={{ bgcolor: 'rgba(255,255,255,0.2)', mx: 0.5 }} />\n\t\t\t\t\t\t\t<Tooltip title=\"Text Color\">\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tsx={{ color: 'white', width: 28, height: 28 }}\n\t\t\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tsetColorPickerState({ anchor: e.currentTarget, type: 'text' });\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span style={{ fontSize: '14px', fontWeight: 'bold' }}>A</span>\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t<Tooltip title=\"Font Size\">\n\t\t\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tdefaultValue=\"14px\"\n\t\t\t\t\t\t\t\t\tonChange={handleFontSizeChange}\n\t\t\t\t\t\t\t\t\tsx={{ \n\t\t\t\t\t\t\t\t\t\tcolor: 'white',\n\t\t\t\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t\t\t\t\tminWidth: 70,\n\t\t\t\t\t\t\t\t\t\t'& .MuiOutlinedInput-notchedOutline': { border: 'none' },\n\t\t\t\t\t\t\t\t\t\t'& .MuiSvgIcon-root': { color: 'white' }\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{FONT_SIZES.map(size => (\n\t\t\t\t\t\t\t\t\t\t<MenuItem key={size} value={size}>{size}</MenuItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</Select>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t\n\t\t\t{/* Color Picker Popover */}\n\t\t\t{colorPickerState && (\n\t\t\t\t<Popover\n\t\t\t\t\topen\n\t\t\t\t\tanchorEl={colorPickerState.anchor}\n\t\t\t\t\tonClose={() => setColorPickerState(null)}\n\t\t\t\t\tdisableAutoFocus\n\t\t\t\t\tdisableEnforceFocus\n\t\t\t\t\tanchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n\t\t\t\t\ttransformOrigin={{ vertical: 'top', horizontal: 'left' }}\n\t\t\t\t>\n\t\t\t\t\t<Box sx={{ p: 1 }}>\n\t\t\t\t\t\t<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(8, 20px)', gap: '3px' }}>\n\t\t\t\t\t\t\t{PRESET_COLORS.map((color) => (\n\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\tkey={color}\n\t\t\t\t\t\t\t\t\tonMouseDown={(e) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tif (colorPickerState.type === 'text') {\n\t\t\t\t\t\t\t\t\t\t\texecCommand('foreColor', color);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\texecCommand('hiliteColor', color);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsetColorPickerState(null);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\t\t\twidth: 20,\n\t\t\t\t\t\t\t\t\t\theight: 20,\n\t\t\t\t\t\t\t\t\t\tbgcolor: color,\n\t\t\t\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\t\t\t\tborder: '1px solid rgba(0,0,0,0.15)',\n\t\t\t\t\t\t\t\t\t\tborderRadius: '2px',\n\t\t\t\t\t\t\t\t\t\t'&:hover': { transform: 'scale(1.3)', zIndex: 1, position: 'relative' },\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t</Popover>\n\t\t\t)}\n\n\t\t\t{/* Table Picker Popover */}\n\t\t\t{showTablePicker && tablePickerAnchor && (\n\t\t\t\t<>\n\t\t\t\t\t<Box\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetShowTablePicker(false);\n\t\t\t\t\t\t\tsetTablePickerAnchor(null);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\t\tzIndex: 9998\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<TablePicker />\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n\nCustomEditor.displayName = 'CustomEditor';\nexport default CustomEditor;"],"names":["adapter","protectedHtml","map","error","_","_a","LinkIcon","ImageIcon"],"mappings":";;;;;;;;;AA8DA,MAAM,gBAAgB;AAAA,EACrB;AAAA,EAAS;AAAA,EAAe;AAAA,EAAW;AAAA,EAAmB;AAAA,EAAgB;AACvE;AAEA,MAAM,aAAa,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAE1F,MAAM,kBAAkB;AAAA,EACvB,EAAE,OAAO,KAAK,OAAO,YAAA;AAAA,EACrB,EAAE,OAAO,MAAM,OAAO,YAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,YAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,YAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,YAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,YAAA;AAAA,EACtB,EAAE,OAAO,MAAM,OAAO,YAAA;AACvB;AAEA,MAAM,gBAAgB;AAAA,EACrB;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAC7E;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAC7E;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAC7E;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAC7E;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAC9E;AAEO,MAAM,eAAe,WAAmC,CAAC,OAAO,QAAQ;AAC9E,QAAM;AAAA,IACL,WAAW;AAAA,IACX,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,SAAS,CAAA;AAAA,IACT,GAAG;AAAA,EAAA,IACA;AAEJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AACrD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,OAAO;AACpD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,MAAM;AAC/C,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,GAAG;AACtD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAC1D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,IAAI;AACjD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAmB,CAAC,IAAI,CAAC;AACvD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAClD,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAA6B,IAAI;AAC/E,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAyE,IAAI;AACvH,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAC5D,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAA6B,IAAI;AACnF,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,SAA0C,IAAI;AACpG,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,KAAK;AAC5D,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAA8D,IAAI;AAGlH,QAAM,CAAC,cAAc,eAAe,IAAI,SAAsC,IAAI;AAClF,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAC9D,QAAM,CAAC,sBAAsB,uBAAuB,IAAI,SAA0C,IAAI;AACtG,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAyB;AAAA,IACpE,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,eAAe;AAAA,EAAA,CACf;AAED,QAAM,qBAAqB,OAAuB,IAAI;AACtD,QAAM,gBAAgB,OAAe,IAAI;AACzC,QAAM,oBAAoB,OAAO,MAAM,cAAc;AACrD,QAAM,uBAAuB,OAAO,iBAAiB;AACrD,YAAU,MAAM;AAAE,sBAAkB,UAAU,MAAM;AAAA,EAAgB,CAAC;AACrE,YAAU,MAAM;AAAE,yBAAqB,UAAU;AAAA,EAAmB,CAAC;AAOrE,QAAM,uBAAuB,OAAe,IAAI;AAEhD,QAAM,eAAe,OAAyB,IAAI;AAClD,QAAM,mBAAmB,OAAyB,IAAI;AACtD,QAAM,uBAAuB,OAAyB,IAAI;AAC1D,QAAM,iBAAiB,OAAuF,IAAI;AAClH,QAAM,mBAAmB,OAAkC,EAAE;AAC7D,QAAM,YAAY,aAAA;AAGlB,YAAU,MAAM;AACf,QAAG,CAAC,KAAK;AACT,UAAM,EAAE,MAAM,eAAe,IAAA,IAAQ,kBAAkB,IAAI;AAC3D,qBAAiB,UAAU;AAC3B,kBAAc,UAAU;AAExB,QAAI,mBAAmB,WAAW,mBAAmB,QAAQ,cAAc,eAAe;AACzF,yBAAmB,QAAQ,YAAY;AAAA,IACxC;AAAA,EACD,GAAG,CAAC,IAAI,CAAC;AAGT,YAAU,MAAM;;AACf,QAAI,mBAAmB,SAAS;AAC/B,UAAI;AACH,cAAM,EAAE,MAAM,eAAe,QAAQ,kBAAkB,QAAQ,EAAE;AACjE,yBAAiB,UAAU;AAC3B,2BAAmB,QAAQ,YAAY;AACvC,cAAMA,WAAU;AAAA,UACf,SAAS,MAAM;AAEd,mBAAO,iBAAiB,cAAc,SAAS,iBAAiB,OAAO;AAAA,UACxE;AAAA,UACA,SAAS,CAAC,YAAoB;AAC7B,kBAAM,EAAE,MAAMC,gBAAe,KAAAC,KAAAA,IAAQ,kBAAkB,OAAO;AAC9D,6BAAiB,UAAUA;AAC3B,0BAAc,UAAU;AACxB,gBAAI,mBAAmB,SAAS;AAC/B,iCAAmB,QAAQ,YAAYD;AAAAA,YACxC;AAAA,UACD;AAAA,UACA,OAAO;AAAA,YACN,eAAe,CAAC,aAAqB;AACpC,0BAAY,cAAc,QAAQ;AAAA,YACnC;AAAA,UAAA;AAAA,UAED,MAAM;AAAA,YACL,WAAW;AAAA,cACV,QAAQ,CAAC,SAAiB;AAAA,YAAA;AAAA,YAE3B,SAAS,CAAC,SAAiB;AAAA,UAAA;AAAA,QAC5B;AAGD,mCAAqB,YAArB,8CAA+BD;AAAAA,MAChC,SAAS,GAAG;AACX,gBAAQ,MAAM,qCAAqC,CAAC;AAAA,MACrD;AAAA,IACD;AAAA,EACD,GAAG,CAAA,CAAE;AAGL,QAAM,cAAc,YAAY,CAAC,SAAiB,UAAmB;AACpE,aAAS,YAAY,SAAS,OAAO,KAAK;AAC1C,QAAI,mBAAmB,SAAS;AAC/B,oBAAc,UAAU,mBAAmB,QAAQ;AACnD,oBAAA;AAAA,IACD;AAAA,EACD,GAAG,CAAA,CAAE;AAGL,QAAM,gBAAgB,YAAY,MAAM;AACvC,QAAI,mBAAmB,SAAS;AAC/B,YAAM,aAAa,QAAQ,MAAM,GAAG,eAAe,CAAC;AACpD,iBAAW,KAAK,mBAAmB,QAAQ,SAAS;AACpD,iBAAW,WAAW,MAAM,GAAG,CAAC;AAChC,sBAAgB,WAAW,SAAS,CAAC;AAAA,IACtC;AAAA,EACD,GAAG,CAAC,SAAS,YAAY,CAAC;AAG1B,QAAM,aAAa,YAAY,MAAM;AACpC,QAAI,eAAe,GAAG;AACrB,YAAM,WAAW,eAAe;AAChC,sBAAgB,QAAQ;AACxB,UAAI,mBAAmB,SAAS;AAC/B,2BAAmB,QAAQ,YAAY,QAAQ,QAAQ;AACvD,sBAAc,UAAU,QAAQ,QAAQ;AAAA,MACzC;AAAA,IACD;AAAA,EACD,GAAG,CAAC,SAAS,YAAY,CAAC;AAG1B,QAAM,aAAa,YAAY,MAAM;AACpC,QAAI,eAAe,QAAQ,SAAS,GAAG;AACtC,YAAM,WAAW,eAAe;AAChC,sBAAgB,QAAQ;AACxB,UAAI,mBAAmB,SAAS;AAC/B,2BAAmB,QAAQ,YAAY,QAAQ,QAAQ;AACvD,sBAAc,UAAU,QAAQ,QAAQ;AAAA,MACzC;AAAA,IACD;AAAA,EACD,GAAG,CAAC,SAAS,YAAY,CAAC;AAK1B,QAAM,cAAc,YAAY,MAAM;;AACrC,QAAI,mBAAmB,SAAS;AAC/B,YAAM,aAAa,mBAAmB,QAAQ;AAE9C,oBAAc,UAAU,iBAAiB,YAAY,iBAAiB,OAAO;AAC7E,8BAAkB,YAAlB,2CAA4B,cAAc;AAAA,IAC3C;AAAA,EACD,GAAG,CAAA,CAAE;AAGL,QAAM,qBAAqB,YAAY,CAAC,SAAyB;AAChE,UAAM,MAAM,IAAI,UAAA,EAAY,gBAAgB,MAAM,WAAW;AAG7D,QAAI,iBAAiB,MAAM,EAAE,QAAQ,CAAA,SAAQ;;AAC5C,YAAM,OAAO,SAAS,uBAAA;AACtB,aAAO,KAAK,WAAY,MAAK,YAAY,KAAK,UAAU;AACxD,iBAAK,eAAL,mBAAiB,aAAa,MAAM;AAAA,IACrC,CAAC;AAGD,QAAI,iBAAiB,GAAG,EAAE,QAAQ,CAAA,MAAK;;AACtC,YAAM,OAAO,SAAS,eAAe,EAAE,eAAe,EAAE;AACxD,cAAE,eAAF,mBAAc,aAAa,MAAM;AAAA,IAClC,CAAC;AAGD,QAAI,iBAAiB,8CAA8C,EAAE,QAAQ,CAAA,OAAM;AAClF,SAAG,gBAAgB,OAAO;AAC1B,SAAG,gBAAgB,OAAO;AAC1B,SAAG,gBAAgB,OAAO;AAC1B,SAAG,gBAAgB,SAAS;AAC5B,SAAG,gBAAgB,MAAM;AAAA,IAC1B,CAAC;AAED,WAAO,IAAI,KAAK;AAAA,EACjB,GAAG,CAAA,CAAE;AAGL,QAAM,cAAc,YAAY,CAAC,MAA4B;AAC5D,MAAE,eAAA;AACF,UAAM,OAAO,EAAE,cAAc,QAAQ,WAAW;AAChD,UAAM,OAAO,EAAE,cAAc,QAAQ,YAAY;AAEjD,QAAI,MAAM;AACT,kBAAY,cAAc,mBAAmB,IAAI,CAAC;AAAA,IACnD,OAAO;AACN,kBAAY,cAAc,IAAI;AAAA,IAC/B;AAAA,EACD,GAAG,CAAC,aAAa,kBAAkB,CAAC;AAGpC,QAAM,oBAAoB,YAAY,OAAO,SAAe;;AAC3D,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,CAAC,IAAI,GAAG,UAAU;AACnD,YAAM,QAAQ,SAAA;AACd,YAAM,UAAU;AAAA,QACf,GAAG;AAAA,QACH,gBAAc,WAAM,YAAY,MAAlB,mBAAqB,eAAc;AAAA,QACjD,OAAO,6BAAM,KAAK,MAAM,KAAK;AAAA,QAC7B,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,gBAAgB,6BAAM,KAAK,MAAM,KAAK;AAAA,QACtC,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,KAAK,GAAG,uCAAW,WAAW,GAAG,OAAO,CAAC,CAAC;AAAA,MAAA;AAG3C,YAAM,YAAY,OAAO;AACzB,kBAAY,cAAc,aAAa,QAAQ,GAAG,UAAU,KAAK,IAAI,+BAA+B;AAAA,IACrG,SAASG,QAAO;AACf,cAAQ,MAAM,wBAAwBA,MAAK;AAC3C,yCAAUA;AAAAA,IACX;AAAA,EACD,GAAG,CAAC,WAAW,aAAa,OAAO,CAAC;AAGpC,QAAM,mBAAmB,YAAY,CAAC,MAA2C;;AAChF,UAAM,QAAO,OAAE,OAAO,UAAT,mBAAiB;AAC9B,QAAI,MAAM;AACT,wBAAkB,IAAI;AAAA,IACvB;AAAA,EACD,GAAG,CAAC,iBAAiB,CAAC;AAGtB,QAAM,mBAAmB,YAAY,MAAM;AAC1C,UAAM,MAAM,OAAO,YAAY;AAC/B,QAAI,KAAK;AACR,kBAAY,cAAc,GAAG;AAAA,IAC9B;AAAA,EACD,GAAG,CAAC,WAAW,CAAC;AAGU,cAAY,MAAM;AAC3C,UAAM,OAAO,OAAO,mBAAmB,GAAG;AAC1C,UAAM,OAAO,OAAO,sBAAsB,GAAG;AAE7C,QAAI,QAAQ,MAAM;AACjB,UAAI,YAAY;AAChB,mBAAa;AACb,eAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,KAAK;AACxC,qBAAa;AAAA,MACd;AACA,mBAAa;AACb,eAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,KAAK;AACxC,qBAAa;AACb,iBAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,KAAK;AACxC,uBAAa;AAAA,QACd;AACA,qBAAa;AAAA,MACd;AACA,mBAAa;AAEb,kBAAY,cAAc,SAAS;AAAA,IACpC;AAAA,EACD,GAAG,CAAC,WAAW,CAAC;AAGhB,QAAM,cAAc,MAAM;AACzB,UAAM,CAAC,WAAW,YAAY,IAAI,SAA8C,IAAI;AACpF,UAAM,UAAU;AAChB,UAAM,UAAU;AAGhB,UAAM,aAAa,uDAAmB;AACtC,UAAM,kBAAkB,SAAS,cAAc,0BAA0B;AACzE,UAAM,gBAAgB,mDAAiB;AAEvC,QAAI,MAAM;AACV,QAAI,OAAO;AAEX,QAAI,cAAc,eAAe;AAChC,YAAM,WAAW,SAAS,cAAc,MAAM;AAC9C,aAAO,WAAW,OAAO,cAAc;AAAA,IACxC;AAEA,WACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,IAAI;AAAA,UACH,UAAU;AAAA,UACV,KAAK,GAAG,GAAG;AAAA,UACX,MAAM,GAAG,IAAI;AAAA,UACb,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,GAAG;AAAA,UACH,WAAW;AAAA,UACX,QAAQ;AAAA,QAAA;AAAA,QAGT,UAAA;AAAA,UAAA,oBAAC,KAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,UAAU,OAAO,WAAW,KAAK,OAAO,IAAI,EAAA,GAC3F,UAAA,MAAM,KAAK,EAAE,QAAQ,QAAA,CAAS,EAAE;AAAA,YAAI,CAAC,GAAG,aACxC,MAAM,KAAK,EAAE,QAAQ,QAAA,CAAS,EAAE,IAAI,CAACC,IAAG,aACvC;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEA,cAAc,MAAM,aAAa,EAAE,KAAK,WAAW,GAAG,KAAK,WAAW,GAAG;AAAA,gBACzE,SAAS,MAAM;AACd,8CAA4B,WAAW,GAAG,WAAW,CAAC;AACtD,+BAAa,IAAI;AAAA,gBAClB;AAAA,gBACA,IAAI;AAAA,kBACH,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,QAAQ;AAAA,kBACR,SAAS,aAAa,WAAW,UAAU,OAAO,WAAW,UAAU,MAAM,YAAY;AAAA,kBACzF,QAAQ;AAAA,kBACR,WAAW;AAAA,oBACV,SAAS;AAAA,kBAAA;AAAA,gBACV;AAAA,cACD;AAAA,cAfK,GAAG,QAAQ,IAAI,QAAQ;AAAA,YAAA,CAiB7B;AAAA,UAAA,GAEH;AAAA,8BACC,KAAA,EAAI,IAAI,EAAE,WAAW,UAAU,UAAU,QAAQ,OAAO,UACvD,UAAA,YAAY,GAAG,UAAU,GAAG,MAAM,UAAU,GAAG,KAAK,QAAA,CACtD;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGH;AAGA,QAAM,yBAAyB,YAAY,CAAC,MAAW;AACtD,UAAM,SAAS,EAAE,OAAO;AACxB,kBAAc,MAAM;AACpB,gBAAY,YAAY,MAAM;AAAA,EAC/B,GAAG,CAAC,WAAW,CAAC;AAGhB,QAAM,uBAAuB,YAAY,CAAC,MAAW;;AACpD,UAAM,OAAO,EAAE,OAAO;AACtB,gBAAY,IAAI;AAChB,aAAS,YAAY,YAAY,OAAO,GAAG;AAC3C,QAAI,mBAAmB,SAAS;AAC/B,YAAM,WAAW,MAAM;AAAA,QACtB,mBAAmB,QAAQ,iBAAiB,gBAAgB;AAAA,MAAA;AAE7D,eAAS,QAAQ,CAAA,QAAO;;AACvB,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,MAAM,WAAW;AACtB,eAAO,IAAI,WAAY,MAAK,YAAY,IAAI,UAAU;AACtD,SAAAC,MAAA,IAAI,eAAJ,gBAAAA,IAAgB,aAAa,MAAM;AAAA,MACpC,CAAC;AACD,oBAAc,UAAU,mBAAmB,QAAQ;AACnD,oBAAA;AACA,8BAAkB,YAAlB,2CAA4B,cAAc;AAAA,IAC3C;AAAA,EACD,GAAG,CAAC,aAAa,CAAC;AAGlB,QAAM,4BAA4B,YAAY,CAAC,MAAW;AACzD,UAAM,SAAS,EAAE,OAAO;AACxB,qBAAiB,MAAM;AACvB,gBAAY,eAAe,IAAI,MAAM,GAAG;AAAA,EACzC,GAAG,CAAC,WAAW,CAAC;AAMhB,QAAM,qBAAqB,YAAY,MAAM;;AAC5C,QAAI,CAAC,gBAAgB;AAGpB,YAAM,eAAa,wBAAmB,YAAnB,mBAA4B,cAAa,cAAc,WAAW;AACrF,YAAM,eAAe,iBAAiB,YAAY,iBAAiB,OAAO;AAG1E,oBAAc,YAAY;AAC1B,2BAAqB,UAAU;AAC/B,oBAAc,UAAU;AAGxB,wBAAkB,IAAI;AAAA,IACvB,OAAO;AAGN,YAAM,gBAAgB,qBAAqB,QAAQ,KAAA;AAEnD,UAAI,CAAC,eAAe;AAEnB,cAAM,cAAc;AACpB,sBAAc,UAAU;AACxB,6BAAqB,UAAU;AAC/B,sBAAc,WAAW;AAAA,MAC1B,OAAO;AACN,sBAAc,UAAU;AAAA,MACzB;AAGA,wBAAkB,KAAK;AAAA,IACxB;AAAA,EACD,GAAG,CAAC,gBAAgB,IAAI,CAAC;AAIzB,QAAM,yBAAyB,OAAO,KAAK;AAE3C,YAAU,MAAM;AAGf,QAAI,CAAC,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,SAAS;AACrF,6BAAuB,UAAU;AAEjC,UAAI;AACH,cAAM,gBAAgB,cAAc,QAAQ,KAAA;AAE5C,YAAI,CAAC,eAAe;AACnB,gBAAM,cAAc;AACpB,gBAAM,EAAE,MAAM,eAAe,IAAA,IAAQ,kBAAkB,WAAW;AAClE,2BAAiB,UAAU;AAC3B,6BAAmB,QAAQ,YAAY;AAAA,QACxC,OAAO;AACN,gBAAM,EAAE,MAAM,eAAe,IAAA,IAAQ,kBAAkB,aAAa;AACpE,2BAAiB,UAAU;AAE3B,cAAI,CAAC,iBAAiB,cAAc,KAAA,MAAW,IAAI;AAClD,oBAAQ,KAAK,gDAAgD;AAC7D,+BAAmB,QAAQ,YAAY;AAAA,UACxC,OAAO;AACN,+BAAmB,QAAQ,YAAY;AAAA,UACxC;AAAA,QACD;AAGA,cAAM,aAAa,QAAQ,MAAM,GAAG,eAAe,CAAC;AACpD,mBAAW,KAAK,mBAAmB,QAAQ,SAAS;AACpD,mBAAW,WAAW,MAAM,GAAG,CAAC;AAChC,wBAAgB,WAAW,SAAS,CAAC;AAAA,MACtC,SAASF,QAAO;AACf,gBAAQ,MAAM,+BAA+BA,MAAK;AAElD,YAAI,mBAAmB,WAAW,cAAc,SAAS;AACxD,cAAI;AACH,+BAAmB,QAAQ,YAAY,cAAc;AAAA,UACtD,SAAS,YAAY;AACpB,oBAAQ,MAAM,0BAA0B,UAAU;AAAA,UACnD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAGA,QAAI,gBAAgB;AACnB,6BAAuB,UAAU;AAAA,IAClC;AAAA,EACD,GAAG,CAAC,gBAAgB,SAAS,YAAY,CAAC;AAK1C,QAAM,uBAAuB,YAAY,CAAC,MAA2C;;AACpF,UAAM,QAAO,OAAE,OAAO,UAAT,mBAAiB;AAC9B,QAAI,CAAC,KAAM;AAEX,UAAM,SAAS,IAAI,WAAA;AAEnB,WAAO,SAAS,CAAC,UAAU;;AAC1B,YAAM,eAAcE,MAAA,MAAM,WAAN,gBAAAA,IAAc;AAClC,UAAI,aAAa;AAEhB,sBAAc,WAAW;AACzB,6BAAqB,UAAU;AAC/B,sBAAc,UAAU;AAGxB,YAAI,CAAC,kBAAkB,mBAAmB,SAAS;AAClD,cAAI;AACH,kBAAM,EAAE,MAAM,eAAe,IAAA,IAAQ,kBAAkB,WAAW;AAClE,6BAAiB,UAAU;AAC3B,+BAAmB,QAAQ,YAAY;AACvC,0BAAA;AAAA,UACD,SAASF,QAAO;AACf,oBAAQ,MAAM,mCAAmCA,MAAK;AACtD,kBAAM,mFAAmF;AAAA,UAC1F;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,UAAU,MAAM;AACtB,YAAM,6CAA6C;AAAA,IACpD;AAEA,WAAO,WAAW,IAAI;AAGtB,MAAE,OAAO,QAAQ;AAAA,EAClB,GAAG,CAAC,gBAAgB,aAAa,CAAC;AAKlC,QAAM,yBAAyB,YAAY,CAAC,MAA8C;AACzF,UAAM,UAAU,EAAE,OAAO;AACzB,kBAAc,OAAO;AACrB,yBAAqB,UAAU;AAAA,EAChC,GAAG,CAAA,CAAE;AAGL,QAAM,qBAAqB,YAAY,CAAC,MAAwB;;AAC/D,UAAM,SAAS,EAAE;AAGjB,QAAI,kBAAsC;AAE1C,QAAI,OAAO,YAAY,OAAO;AAC7B,QAAE,eAAA;AACF,QAAE,gBAAA;AACF,wBAAkB;AAAA,IACnB,WAAW,OAAO,YAAY,SAAS;AACtC,QAAE,eAAA;AACF,QAAE,gBAAA;AACF,wBAAkB;AAAA,IACnB,WAAW,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,QAAQ,OAAO,YAAY,WAAW,OAAO,YAAY,SAAS;AAErJ,QAAE,eAAA;AACF,QAAE,gBAAA;AACF,wBAAkB,OAAO,QAAQ,OAAO;AAAA,IACzC;AAEA,QAAI,iBAAiB;AACpB,yBAAmB,eAAe;AAElC,YAAM,OAAO,gBAAgB,sBAAA;AAC7B,YAAM,iBAAgB,wBAAmB,YAAnB,mBAA4B;AAElD,UAAI,eAAe;AAClB,yBAAiB;AAAA,UAChB,GAAG,KAAK,OAAO,cAAc;AAAA,UAC7B,GAAG,KAAK,MAAM,cAAc;AAAA,UAC5B,OAAO,KAAK;AAAA,UACZ,QAAQ,KAAK;AAAA,QAAA,CACb;AAAA,MACF;AAAA,IACD,OAAO;AACN,yBAAmB,IAAI;AACvB,uBAAiB,IAAI;AAAA,IACtB;AAAA,EACD,GAAG,CAAA,CAAE;AAGL,QAAM,uBAAuB,YAAY,MAAM;AAC9C,QAAI,iBAAiB;AACpB,sBAAgB,OAAA;AAChB,yBAAmB,IAAI;AACvB,uBAAiB,IAAI;AACrB,UAAI,mBAAmB,SAAS;AAC/B,sBAAc,UAAU,mBAAmB,QAAQ;AACnD,sBAAA;AAAA,MACD;AAAA,IACD;AAAA,EACD,GAAG,CAAC,iBAAiB,aAAa,CAAC;AAGnC,QAAM,qBAAqB,YAAY,OAAO,SAAe;;AAC5D,QAAI,CAAC,mBAAmB,gBAAgB,YAAY,MAAO;AAE3D,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,CAAC,IAAI,GAAG,UAAU;AACnD,YAAM,QAAQ,SAAA;AACd,YAAM,UAAU;AAAA,QACf,GAAG;AAAA,QACH,gBAAc,WAAM,YAAY,MAAlB,mBAAqB,eAAc;AAAA,QACjD,OAAO,6BAAM,KAAK,MAAM,KAAK;AAAA,QAC7B,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,gBAAgB,6BAAM,KAAK,MAAM,KAAK;AAAA,QACtC,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,KAAK,GAAG,uCAAW,WAAW,GAAG,OAAO,CAAC,CAAC;AAAA,MAAA;AAG3C,YAAM,YAAY,OAAO;AACxB,sBAAqC,MAAM,QAAQ;AAEpD,UAAI,mBAAmB,SAAS;AAC/B,sBAAc,UAAU,mBAAmB,QAAQ;AACnD,sBAAA;AAAA,MACD;AAAA,IACD,SAASA,QAAO;AACf,cAAQ,MAAM,wBAAwBA,MAAK;AAC3C,yCAAUA;AAAAA,IACX;AAAA,EACD,GAAG,CAAC,iBAAiB,WAAW,SAAS,aAAa,CAAC;AAGvD,QAAM,2BAA2B,YAAY,CAAC,MAA2C;;AACxF,UAAM,QAAO,OAAE,OAAO,UAAT,mBAAiB;AAC9B,QAAI,MAAM;AACT,yBAAmB,IAAI;AAAA,IACxB;AAAA,EACD,GAAG,CAAC,kBAAkB,CAAC;AAGvB,QAAM,sBAAsB,YAAY,MAAM;;AAC7C,UAAM,YAAY,OAAO,aAAA;AACzB,QAAI,aAAa,CAAC,UAAU,eAAe,UAAU,aAAa,GAAG;AACpE,YAAM,QAAQ,UAAU,WAAW,CAAC;AACpC,YAAM,OAAO,MAAM,sBAAA;AACnB,YAAM,iBAAgB,wBAAmB,YAAnB,mBAA4B;AAElD,UAAI,iBAAiB,KAAK,QAAQ,GAAG;AACpC,+BAAuB;AAAA,UACtB,GAAG,KAAK,OAAO,KAAK,QAAQ;AAAA,UAC5B,GAAG,KAAK,MAAM;AAAA,QAAA,CACd;AACD,2BAAmB,IAAI;AAAA,MACxB;AAIA,UAAI,OAAoB,UAAU;AAClC,WAAI,6BAAM,cAAa,KAAK,kBAAkB,KAAK;AACnD,UAAI,eAA8B;AAClC,UAAI,UAAU,gBAAgB,cAAc,OAAO;AACnD,aAAO,WAAW,YAAY,mBAAmB,SAAS;AACzD,YAAI,QAAQ,MAAM,UAAU;AAC3B,yBAAe,QAAQ,MAAM;AAC7B;AAAA,QACD;AACA,kBAAU,QAAQ;AAAA,MACnB;AACA,kBAAY,gBAAgB,MAAM;AAAA,IACnC,OAAO;AACN,yBAAmB,KAAK;AACxB,6BAAuB,IAAI;AAAA,IAC5B;AAAA,EACD,GAAG,CAAA,CAAE;AAGL,QAAM,oBAAoB,YAAY,CAAC,GAAqB,WAAmB;AAC9E,MAAE,eAAA;AACF,MAAE,gBAAA;AAEF,QAAI,mBAAmB,eAAe;AACrC,qBAAe,UAAU;AAAA,QACxB,GAAG,EAAE;AAAA,QACL,GAAG,EAAE;AAAA,QACL,OAAO,cAAc;AAAA,QACrB,QAAQ,cAAc;AAAA,QACtB;AAAA,MAAA;AAID,eAAS,iBAAiB,aAAa,gBAAuB;AAC9D,eAAS,iBAAiB,WAAW,eAAe;AAAA,IACrD;AAAA,EACD,GAAG,CAAC,iBAAiB,aAAa,CAAC;AAGnC,QAAM,mBAAmB,YAAY,CAAC,MAAkB;;AACvD,QAAI,CAAC,eAAe,WAAW,CAAC,mBAAmB,CAAC,cAAe;AAEnE,UAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,OAAA,IAAW,eAAe;AACvD,UAAM,SAAS,EAAE,UAAU;AAC3B,UAAM,SAAS,EAAE,UAAU;AAE3B,QAAI,WAAW;AACf,QAAI,YAAY;AAEhB,QAAI,OAAO,SAAS,GAAG,GAAG;AACzB,iBAAW,KAAK,IAAI,IAAI,QAAQ,MAAM;AAAA,IACvC;AACA,QAAI,OAAO,SAAS,GAAG,GAAG;AAEzB,iBAAW,KAAK,IAAI,IAAI,QAAQ,MAAM;AAAA,IACvC;AACA,QAAI,OAAO,SAAS,GAAG,GAAG;AACzB,kBAAY,KAAK,IAAI,IAAI,SAAS,MAAM;AAAA,IACzC;AACA,QAAI,OAAO,SAAS,GAAG,GAAG;AACzB,kBAAY,KAAK,IAAI,IAAI,SAAS,MAAM;AAAA,IACzC;AAGA,QAAI,OAAO,WAAW,KAAK,gBAAgB,YAAY,OAAO;AAC7D,YAAM,cAAc,QAAQ;AAC5B,kBAAY,WAAW;AAAA,IACxB;AAEA,oBAAgB,MAAM,QAAQ,GAAG,QAAQ;AACzC,QAAI,gBAAgB,YAAY,SAAS,gBAAgB,YAAY,SAAS;AAC7E,sBAAgB,MAAM,SAAS,GAAG,SAAS;AAAA,IAC5C;AAGA,UAAM,OAAO,gBAAgB,sBAAA;AAC7B,UAAM,iBAAgB,wBAAmB,YAAnB,mBAA4B;AAElD,QAAI,eAAe;AAClB,uBAAiB;AAAA,QAChB,GAAG,KAAK,OAAO,cAAc;AAAA,QAC7B,GAAG,KAAK,MAAM,cAAc;AAAA,QAC5B,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,MAAA,CACb;AAAA,IACF;AAAA,EACD,GAAG,CAAC,iBAAiB,aAAa,CAAC;AAGnC,QAAM,kBAAkB,YAAY,MAAM;AACzC,aAAS,oBAAoB,aAAa,gBAAuB;AACjE,aAAS,oBAAoB,WAAW,eAAe;AAEvD,mBAAe,UAAU;AACzB,QAAI,mBAAmB,SAAS;AAC/B,oBAAc,UAAU,mBAAmB,QAAQ;AACnD,oBAAA;AAAA,IACD;AAAA,EACD,GAAG,CAAC,kBAAkB,aAAa,CAAC;AAGpC,QAAM,wBAAwB,YAAY,CAAC,MAA2C;AACrF,yBAAqB,EAAE,aAAa;AACpC,uBAAmB,IAAI;AAAA,EACxB,GAAG,CAAA,CAAE;AAGL,QAAM,8BAA8B,YAAY,CAAC,MAAc,SAAiB;AAE/E,QAAI,mBAAmB,SAAS;AAC/B,yBAAmB,QAAQ,MAAA;AAAA,IAC5B;AAGA,QAAI,YAAY;AAChB,iBAAa;AACb,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC9B,mBAAa;AACb,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC9B,qBAAa;AAAA,MACd;AACA,mBAAa;AAAA,IACd;AACA,iBAAa;AAGb,aAAS,YAAY,cAAc,OAAO,SAAS;AAGnD,QAAI,mBAAmB,SAAS;AAC/B,oBAAc,UAAU,mBAAmB,QAAQ;AACnD,oBAAA;AAAA,IACD;AAGA,uBAAmB,KAAK;AACxB,yBAAqB,IAAI;AAAA,EAC1B,GAAG,CAAC,aAAa,CAAC;AAGlB,QAAM,UAAU;AAAA,IACf,SAAS,MAAM;AAEd,aAAO,iBAAiB,cAAc,SAAS,iBAAiB,OAAO;AAAA,IACxE;AAAA,IACA,SAAS,CAAC,YAAoB;AAC7B,YAAM,EAAE,MAAM,eAAe,IAAA,IAAQ,kBAAkB,OAAO;AAC9D,uBAAiB,UAAU;AAC3B,oBAAc,UAAU;AACxB,UAAI,mBAAmB,SAAS;AAC/B,2BAAmB,QAAQ,YAAY;AAAA,MACxC;AAAA,IACD;AAAA,IACA,OAAO;AAAA,MACN,eAAe,CAAC,aAAqB;AACpC,oBAAY,cAAc,QAAQ;AAAA,MACnC;AAAA,IAAA;AAAA,IAED,MAAM;AAAA,MACL,WAAW;AAAA,QACV,QAAQ,CAAC,SAAiB;AAAA,MAAA;AAAA,MAE3B,SAAS,CAAC,SAAiB;AAAA,IAAA;AAAA,EAC5B;AAGD,sBAAoB,KAAK,MAAM,SAAS,EAAE;AAE1C,YAAU,MAAM;AACf,QAAI,eAAe;AACjB,oBAAsB,UAAU;AAAA,IAClC;AAAA,EACD,GAAG,CAAC,aAAa,CAAC;AAGlB,QAAM,aAAa,CAAC,SAAiB,UAAmB,CAAC,MAAwB;AAChF,MAAE,eAAA;AACF,gBAAY,SAAS,KAAK;AAAA,EAC3B;AAEA,MAAI,OAAO;AACV,WACC,qBAAC,OAAA,EAAI,WAAU,0BACd,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA;AAAA,QAAA;AAAA,QAAe,MAAM;AAAA,MAAA,GAAQ;AAAA,MACnE,oBAAC,YAAO,SAAS,MAAM,SAAS,IAAI,GAAG,WAAU,uBAAsB,UAAA,QAAA,CAEvE;AAAA,IAAA,GACD;AAAA,EAEF;AAEA,SACC,qBAAC,OAAA,EAAI,WAAU,2BAEd,UAAA;AAAA,IAAA,qBAAC,OAAI,IAAI;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,GAEV,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,OAAO,EAAE,QAAQ,WAAW,OAAO,OAAA,GAAU,UAAA,OAAA,CAAI;AAAA,MACvD,oBAAC,UAAK,OAAO,EAAE,QAAQ,WAAW,OAAO,OAAA,GAAU,UAAA,OAAA,CAAI;AAAA,MACvD,oBAAC,UAAK,OAAO,EAAE,QAAQ,WAAW,OAAO,OAAA,GAAU,UAAA,SAAA,CAAM;AAAA,MACzD,oBAAC,UAAK,OAAO,EAAE,QAAQ,WAAW,OAAO,OAAA,GAAU,UAAA,SAAA,CAAM;AAAA,MACzD,oBAAC,UAAK,OAAO,EAAE,QAAQ,WAAW,OAAO,OAAA,GAAU,UAAA,OAAA,CAAI;AAAA,IAAA,GACxD;AAAA,IAGA,qBAAC,OAAI,IAAI;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,KAAK;AAAA,MACL,GAAG;AAAA,MACH,cAAc;AAAA,MACd,SAAS;AAAA,MACT,YAAY;AAAA,IAAA,GAGZ,UAAA;AAAA,MAAA,oBAAC,SAAA,EAAQ,OAAO,iBAAiB,qBAAqB,oBACrD,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,SAAS;AAAA,UACT,IAAI;AAAA,YACH,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,KAAK;AAAA,YACL,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,aAAa,iBAAiB,iBAAiB;AAAA,YAC/C,SAAS,iBAAiB,eAAe;AAAA,YACzC,OAAO,iBAAiB,iBAAiB;AAAA,YACzC,WAAW;AAAA,cACV,SAAS,iBAAiB,gBAAgB;AAAA,YAAA;AAAA,YAE3C,YAAY;AAAA,YACZ,YAAY;AAAA,UAAA;AAAA,UAIb,UAAA;AAAA,YAAA,qBAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BACjE,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,GAAE,kFAAiF,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,MAAK,QAAM;AAAA,cACzL,oBAAC,YAAA,EAAS,QAAO,kBAAiB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,MAAK,QAAM;AAAA,cAClI,oBAAC,QAAA,EAAK,GAAE,mBAAkB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO;AAAA,cAC9G,oBAAC,QAAA,EAAK,GAAE,sBAAqB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO;AAAA,cACjH,oBAAC,QAAA,EAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAO;AAAA,YAAA,GACpG;AAAA,YACA,oBAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,IAAA,GAAO,UAAA,SAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAE5D;AAAA,MAEA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,0BAGzD,SAAA,EAAQ,OAAM,QACd,UAAA,oBAAC,YAAA,EAAW,MAAK,SAAQ,SAAS,YAAY,UAAU,iBAAiB,GACxE,UAAA,oBAAC,QAAK,UAAS,SAAQ,GACxB,EAAA,CACD;AAAA,MACA,oBAAC,WAAQ,OAAM,QACd,8BAAC,YAAA,EAAW,MAAK,SAAQ,SAAS,YAAY,UAAU,iBAAiB,QAAQ,SAAS,GACzF,UAAA,oBAAC,QAAK,UAAS,SAAQ,GACxB,EAAA,CACD;AAAA,MAEA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,MAG1D;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAK;AAAA,UACL,IAAI,EAAE,UAAU,KAAK,QAAQ,IAAI,UAAU,OAAA;AAAA,UAE1C,UAAA,gBAAgB,IAAI,CAAA,WACpB,oBAAC,UAAA,EAA4B,OAAO,OAAO,OACzC,UAAA,OAAO,MAAA,GADM,OAAO,KAEtB,CACA;AAAA,QAAA;AAAA,MAAA;AAAA,MAIF;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAK;AAAA,UACL,IAAI,EAAE,UAAU,KAAK,QAAQ,IAAI,UAAU,OAAA;AAAA,UAE1C,UAAA,cAAc,IAAI,CAAA,SAClB,oBAAC,YAAoB,OAAO,MAAM,OAAO,EAAE,YAAY,KAAA,GACrD,UAAA,KAAA,GADa,IAEf,CACA;AAAA,QAAA;AAAA,MAAA;AAAA,MAIF;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAK;AAAA,UACL,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,UAAU,OAAA;AAAA,UAEzC,UAAA,WAAW,IAAI,CAAA,SACf,oBAAC,YAAoB,OAAO,MAAO,UAAA,KAAA,GAApB,IAAyB,CACxC;AAAA,QAAA;AAAA,MAAA;AAAA,MAGF,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,0BAGzD,SAAA,EAAQ,OAAM,QACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,MAAM,GACtD,UAAA,oBAAC,cAAW,UAAS,QAAA,CAAQ,GAC9B,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,UACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,QAAQ,GACxD,UAAA,oBAAC,gBAAa,UAAS,QAAA,CAAQ,GAChC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,aACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,WAAW,GAC3D,UAAA,oBAAC,oBAAiB,UAAS,QAAA,CAAQ,GACpC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,iBACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,eAAe,GAC/D,UAAA,oBAAC,uBAAoB,UAAS,QAAA,CAAQ,GACvC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,aACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,WAAW,GAC3D,UAAA,oBAAC,aAAU,UAAS,QAAA,CAAQ,GAC7B,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,eACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,aAAa,GAC7D,UAAA,oBAAC,eAAY,UAAS,QAAA,CAAQ,GAC/B,GACD;AAAA,MAEA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,MAG1D,oBAAC,SAAA,EAAQ,OAAM,cACd,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,MAAK;AAAA,UACL,aAAa,CAAC,MAAM;AACnB,cAAE,eAAA;AACF,gCAAoB,EAAE,QAAQ,EAAE,eAAe,MAAM,QAAQ;AAAA,UAC9D;AAAA,UACA,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,kBAAkB,cAAc,OAAO,iBAAiB,QAAA;AAAA,UAEhG,UAAA,oBAAC,QAAA,EAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,QAAQ,OAAO,OAAA,GAAU,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA,GAEzE;AAAA,MACA,oBAAC,SAAA,EAAQ,OAAM,oBACd,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,MAAK;AAAA,UACL,aAAa,CAAC,MAAM;AACnB,cAAE,eAAA;AACF,gCAAoB,EAAE,QAAQ,EAAE,eAAe,MAAM,MAAM;AAAA,UAC5D;AAAA,UACA,OAAO,EAAE,OAAO,IAAI,QAAQ,IAAI,QAAQ,kBAAkB,cAAc,OAAO,iBAAiB,UAAA;AAAA,UAEhG,UAAA,oBAAC,QAAA,EAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,QAAQ,OAAO,OAAA,GAAU,UAAA,IAAA,CAAC;AAAA,QAAA;AAAA,MAAA,GAEzE;AAAA,MAEA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,0BAGzD,SAAA,EAAQ,OAAM,cACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,aAAa,GAC7D,UAAA,oBAAC,mBAAgB,UAAS,QAAA,CAAQ,GACnC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,gBACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,eAAe,GAC/D,UAAA,oBAAC,qBAAkB,UAAS,QAAA,CAAQ,GACrC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,eACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,cAAc,GAC9D,UAAA,oBAAC,oBAAiB,UAAS,QAAA,CAAQ,GACpC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,WACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,aAAa,GAC7D,UAAA,oBAAC,sBAAmB,UAAS,QAAA,CAAQ,GACtC,GACD;AAAA,MAEA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,0BAGzD,SAAA,EAAQ,OAAM,eACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,qBAAqB,GACrE,UAAA,oBAAC,sBAAmB,UAAS,QAAA,CAAQ,GACtC,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,iBACd,UAAA,oBAAC,cAAW,MAAK,SAAQ,aAAa,WAAW,mBAAmB,GACnE,UAAA,oBAAC,sBAAmB,UAAS,QAAA,CAAQ,GACtC,GACD;AAAA,MAEA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,IAAI,IAAA,EAAI,CAAG;AAAA,MAG1D,oBAAC,SAAA,EAAQ,OAAM,eACd,8BAAC,YAAA,EAAW,MAAK,SAAQ,SAAS,kBACjC,UAAA,oBAACG,MAAA,EAAS,UAAS,QAAA,CAAQ,GAC5B,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,gBACd,UAAA,oBAAC,YAAA,EAAW,MAAK,SAAQ,SAAS;;AAAM,kCAAa,YAAb,mBAAsB;AAAA,SAC7D,UAAA,oBAACC,SAAU,UAAS,SAAQ,GAC7B,EAAA,CACD;AAAA,MACA,oBAAC,SAAA,EAAQ,OAAM,gBACd,8BAAC,YAAA,EAAW,MAAK,SAAQ,SAAS,uBACjC,UAAA,oBAAC,YAAA,EAAW,UAAS,QAAA,CAAQ,GAC9B,GACD;AAAA,0BACC,SAAA,EAAQ,OAAM,QACd,UAAA,oBAAC,YAAA,EAAW,MAAK,SAAQ,aAAa,WAAW,eAAe,OAAO,GACtE,UAAA,oBAAC,QAAK,UAAS,SAAQ,GACxB,EAAA,CACD;AAAA,IAAA,GACD;AAAA,IAGA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,KAAK;AAAA,QACL,MAAK;AAAA,QACL,QAAO;AAAA,QACP,OAAO,EAAE,SAAS,OAAA;AAAA,QAClB,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAIX;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,KAAK;AAAA,QACL,MAAK;AAAA,QACL,QAAO;AAAA,QACP,OAAO,EAAE,SAAS,OAAA;AAAA,QAClB,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAIX;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,KAAK;AAAA,QACL,MAAK;AAAA,QACL,QAAO;AAAA,QACP,OAAO,EAAE,SAAS,OAAA;AAAA,QAClB,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAIV,iBACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAU;AAAA,QACV,OAAO;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,QAAQ;AAAA,QAAA;AAAA,MACT;AAAA,IAAA,IAGD,qBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,cACvB,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,KAAK;AAAA,UACL,iBAAe;AAAA,UACf,WAAU;AAAA,UACV,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,SAAS;AAAA,UACT,OAAO;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,iBAAiB;AAAA,UAAA;AAAA,UAEjB,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,MAIJ,mBAAmB,iBACnB;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,OAAO;AAAA,YACN,UAAU;AAAA,YACV,MAAM,cAAc;AAAA,YACpB,KAAK,cAAc;AAAA,YACnB,OAAO,cAAc;AAAA,YACrB,QAAQ,cAAc;AAAA,YACtB,QAAQ;AAAA,YACR,eAAe;AAAA,YACf,QAAQ;AAAA,UAAA;AAAA,UAIT,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACA,IAAI;AAAA,kBACH,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,SAAS;AAAA,kBACT,KAAK;AAAA,kBACL,SAAS;AAAA,kBACT,QAAQ;AAAA,kBACR,cAAc;AAAA,kBACd,GAAG;AAAA,kBACH,WAAW;AAAA,kBACX,eAAe;AAAA,gBAAA;AAAA,gBAGf,UAAA;AAAA,kBAAA,gBAAgB,YAAY,SAC5B,oBAAC,SAAA,EAAQ,OAAM,iBACd,UAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACA,MAAK;AAAA,sBACL,SAAS,MAAA;;AAAM,0DAAqB,YAArB,mBAA8B;AAAA;AAAA,sBAC7C,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,sBAEzB,8BAAC,WAAA,EAAU,IAAI,EAAE,UAAU,KAAG,CAAG;AAAA,oBAAA;AAAA,kBAAA,GAEnC;AAAA,kBAEA,gBAAgB,YAAY,WAC5B,qBAAA,UAAA,EACC,UAAA;AAAA,oBAAA,oBAAC,SAAA,EAAQ,OAAM,WACd,UAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM;AACd,gCAAM,QAAQ,gBAAgB,cAAc,OAAO;AACnD,8BAAI,OAAO;AACV,kCAAM,WAAW,gBAAgB,iBAAiB,sCAAsC,EAAE,UAAU;AACpG,kCAAM,KAAK,SAAS,cAAc,IAAI;AACtC,qCAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AAClC,oCAAM,KAAK,SAAS,cAAc,IAAI;AACtC,iCAAG,MAAM,UAAU;AACnB,iCAAG,YAAY,EAAE;AAAA,4BAClB;AACA,kCAAM,YAAY,EAAE;AACpB,gCAAI,mBAAmB,QAAS,eAAc,UAAU,mBAAmB,QAAQ;AAAA,0BACpF;AAAA,wBACD;AAAA,wBACA,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,wBAEzB,8BAAC,kBAAA,EAAiB,IAAI,EAAE,UAAU,KAAG,CAAG;AAAA,sBAAA;AAAA,oBAAA,GAE1C;AAAA,oBACA,oBAAC,SAAA,EAAQ,OAAM,cACd,UAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM;AACd,gCAAM,OAAO,gBAAgB,iBAAiB,UAAU;AACxD,8BAAI,KAAK,SAAS,GAAG;AACpB,iCAAK,KAAK,SAAS,CAAC,EAAE,OAAA;AACtB,gCAAI,mBAAmB,QAAS,eAAc,UAAU,mBAAmB,QAAQ;AAAA,0BACpF;AAAA,wBACD;AAAA,wBACA,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,wBAEzB,8BAAC,qBAAA,EAAoB,IAAI,EAAE,UAAU,KAAG,CAAG;AAAA,sBAAA;AAAA,oBAAA,GAE7C;AAAA,oBACA,oBAAC,SAAA,EAAQ,OAAM,cACd,UAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM;AACd,0CAAgB,iBAAiB,IAAI,EAAE,QAAQ,CAAA,OAAM;AACpD,kCAAM,WAAW,GAAG,QAAQ,OAAO,MAAM;AACzC,kCAAM,OAAO,SAAS,cAAc,WAAW,OAAO,IAAI;AAC1D,iCAAK,MAAM,UAAU;AACrB,+BAAG,YAAY,IAAI;AAAA,0BACpB,CAAC;AACD,8BAAI,mBAAmB,QAAS,eAAc,UAAU,mBAAmB,QAAQ;AAAA,wBACpF;AAAA,wBACA,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,wBAEzB,UAAA,oBAAC,oBAAiB,IAAI,EAAE,UAAU,IAAI,WAAW,kBAAgB,CAAG;AAAA,sBAAA;AAAA,oBAAA,GAEtE;AAAA,oBACA,oBAAC,SAAA,EAAQ,OAAM,iBACd,UAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACA,MAAK;AAAA,wBACL,SAAS,MAAM;;AACd,gCAAM,UAAU,gBAAgB,iBAAiB,IAAI;AACrD,gCAAM,aAAW,aAAQ,CAAC,MAAT,mBAAY,SAAS,WAAU;AAChD,8BAAI,WAAW,GAAG;AACjB,oCAAQ,QAAQ,CAAA,OAAM;AACrB,kCAAI,GAAG,iBAAkB,IAAG,YAAY,GAAG,gBAAgB;AAAA,4BAC5D,CAAC;AACD,gCAAI,mBAAmB,QAAS,eAAc,UAAU,mBAAmB,QAAQ;AAAA,0BACpF;AAAA,wBACD;AAAA,wBACA,IAAI,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,wBAEzB,UAAA,oBAAC,uBAAoB,IAAI,EAAE,UAAU,IAAI,WAAW,kBAAgB,CAAG;AAAA,sBAAA;AAAA,oBAAA,EACxE,CACD;AAAA,kBAAA,GACD;AAAA,kBAED,oBAAC,SAAA,EAAQ,OAAM,UACd,UAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACA,MAAK;AAAA,sBACL,SAAS;AAAA,sBACT,IAAI;AAAA,wBACH,OAAO;AAAA,wBACP,QAAQ;AAAA,wBACR,OAAO;AAAA,wBACP,WAAW,EAAE,SAAS,UAAA;AAAA,sBAAU;AAAA,sBAGjC,8BAAC,OAAA,EAAM,IAAI,EAAE,UAAU,KAAG,CAAG;AAAA,oBAAA;AAAA,kBAAA,EAC9B,CACD;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIA,CAAC,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI,CAAA,WACjD;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEA,aAAa,CAAC,MAAM,kBAAkB,GAAG,MAAM;AAAA,gBAC/C,OAAO;AAAA,kBACN,UAAU;AAAA,kBACV,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,iBAAiB;AAAA,kBACjB,QAAQ;AAAA,kBACR,eAAe;AAAA,kBACf,QAAQ,GAAG,MAAM;AAAA,kBACjB,GAAI,WAAW,QAAQ,EAAE,KAAK,IAAI,MAAM,GAAA;AAAA,kBACxC,GAAI,WAAW,OAAO,EAAE,KAAK,IAAI,MAAM,OAAO,WAAW,mBAAA;AAAA,kBACzD,GAAI,WAAW,QAAQ,EAAE,KAAK,IAAI,OAAO,GAAA;AAAA,kBACzC,GAAI,WAAW,OAAO,EAAE,KAAK,OAAO,OAAO,IAAI,WAAW,mBAAA;AAAA,kBAC1D,GAAI,WAAW,QAAQ,EAAE,QAAQ,IAAI,OAAO,GAAA;AAAA,kBAC5C,GAAI,WAAW,OAAO,EAAE,QAAQ,IAAI,MAAM,OAAO,WAAW,mBAAA;AAAA,kBAC5D,GAAI,WAAW,QAAQ,EAAE,QAAQ,IAAI,MAAM,GAAA;AAAA,kBAC3C,GAAI,WAAW,OAAO,EAAE,KAAK,OAAO,MAAM,IAAI,WAAW,mBAAA;AAAA,gBAAmB;AAAA,cAC7E;AAAA,cAlBK;AAAA,YAAA,CAoBN;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKF,mBAAmB,uBACnB;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,IAAI;AAAA,YACH,UAAU;AAAA,YACV,MAAM,oBAAoB;AAAA,YAC1B,KAAK,oBAAoB;AAAA,YACzB,WAAW;AAAA,YACX,SAAS;AAAA,YACT,KAAK;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,YACP,cAAc;AAAA,YACd,GAAG;AAAA,YACH,WAAW;AAAA,YACX,QAAQ;AAAA,UAAA;AAAA,UAGT,UAAA;AAAA,YAAA,oBAAC,SAAA,EAAQ,OAAM,QACd,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACA,MAAK;AAAA,gBACL,aAAa,WAAW,MAAM;AAAA,gBAC9B,IAAI,EAAE,OAAO,SAAS,OAAO,IAAI,QAAQ,GAAA;AAAA,gBAEzC,UAAA,oBAAC,YAAA,EAAW,UAAS,QAAA,CAAQ;AAAA,cAAA;AAAA,YAAA,GAE/B;AAAA,YACA,oBAAC,SAAA,EAAQ,OAAM,UACd,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACA,MAAK;AAAA,gBACL,aAAa,WAAW,QAAQ;AAAA,gBAChC,IAAI,EAAE,OAAO,SAAS,OAAO,IAAI,QAAQ,GAAA;AAAA,gBAEzC,UAAA,oBAAC,cAAA,EAAa,UAAS,QAAA,CAAQ;AAAA,cAAA;AAAA,YAAA,GAEjC;AAAA,YACA,oBAAC,SAAA,EAAQ,OAAM,aACd,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACA,MAAK;AAAA,gBACL,aAAa,WAAW,WAAW;AAAA,gBACnC,IAAI,EAAE,OAAO,SAAS,OAAO,IAAI,QAAQ,GAAA;AAAA,gBAEzC,UAAA,oBAAC,kBAAA,EAAiB,UAAS,QAAA,CAAQ;AAAA,cAAA;AAAA,YAAA,GAErC;AAAA,YACA,oBAAC,SAAA,EAAQ,aAAY,YAAW,UAAQ,MAAC,IAAI,EAAE,SAAS,yBAAyB,IAAI,IAAA,EAAI,CAAG;AAAA,YAC5F,oBAAC,SAAA,EAAQ,OAAM,cACd,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACA,MAAK;AAAA,gBACL,IAAI,EAAE,OAAO,SAAS,OAAO,IAAI,QAAQ,GAAA;AAAA,gBACzC,aAAa,CAAC,MAAM;AACnB,oBAAE,eAAA;AACF,sCAAoB,EAAE,QAAQ,EAAE,eAAe,MAAM,QAAQ;AAAA,gBAC9D;AAAA,gBAEA,UAAA,oBAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,UAAU,UAAA,IAAA,CAAC;AAAA,cAAA;AAAA,YAAA,GAE1D;AAAA,YACA,oBAAC,SAAA,EAAQ,OAAM,aACd,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACA,MAAK;AAAA,gBACL,cAAa;AAAA,gBACb,UAAU;AAAA,gBACV,IAAI;AAAA,kBACH,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,UAAU;AAAA,kBACV,sCAAsC,EAAE,QAAQ,OAAA;AAAA,kBAChD,sBAAsB,EAAE,OAAO,QAAA;AAAA,gBAAQ;AAAA,gBAGvC,UAAA,WAAW,IAAI,CAAA,SACf,oBAAC,YAAoB,OAAO,MAAO,UAAA,KAAA,GAApB,IAAyB,CACxC;AAAA,cAAA;AAAA,YAAA,EACF,CACD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACD,GAEF;AAAA,IAIA,oBACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,MAAI;AAAA,QACJ,UAAU,iBAAiB;AAAA,QAC3B,SAAS,MAAM,oBAAoB,IAAI;AAAA,QACvC,kBAAgB;AAAA,QAChB,qBAAmB;AAAA,QACnB,cAAc,EAAE,UAAU,UAAU,YAAY,OAAA;AAAA,QAChD,iBAAiB,EAAE,UAAU,OAAO,YAAY,OAAA;AAAA,QAEhD,UAAA,oBAAC,OAAI,IAAI,EAAE,GAAG,KACb,8BAAC,KAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,qBAAqB,mBAAmB,KAAK,SACvE,UAAA,cAAc,IAAI,CAAC,UACnB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEA,aAAa,CAAC,MAAM;AACnB,gBAAE,eAAA;AACF,kBAAI,iBAAiB,SAAS,QAAQ;AACrC,4BAAY,aAAa,KAAK;AAAA,cAC/B,OAAO;AACN,4BAAY,eAAe,KAAK;AAAA,cACjC;AACA,kCAAoB,IAAI;AAAA,YACzB;AAAA,YACA,IAAI;AAAA,cACH,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,WAAW,EAAE,WAAW,cAAc,QAAQ,GAAG,UAAU,WAAA;AAAA,YAAW;AAAA,UACvE;AAAA,UAlBK;AAAA,QAAA,CAoBN,GACF,EAAA,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAKD,mBAAmB,qBACnB,qBAAA,UAAA,EACC,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,SAAS,MAAM;AACd,+BAAmB,KAAK;AACxB,iCAAqB,IAAI;AAAA,UAC1B;AAAA,UACA,IAAI;AAAA,YACH,UAAU;AAAA,YACV,KAAK;AAAA,YACL,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,UAAA;AAAA,QACT;AAAA,MAAA;AAAA,0BAEA,aAAA,CAAA,CAAY;AAAA,IAAA,EAAA,CACd;AAAA,EAAA,GAEF;AAEF,CAAC;AAED,aAAa,cAAc;"}
|